2022年3月,Grafana实验室发布了Grafana Mimir,这是世界上最具扩展性、性能最强的开源时间序列数据库。Mimir提供了巨大的规模--10亿个活跃的系列,甚至更多--具有易于部署、多租户、持久存储、高可用性和超快查询性能。
从一开始,Grafana Mimir就可以直接使用Prometheus指标。然而,Mimir的愿景不仅仅是成为最好的、最具扩展性的Prometheus后端,而是成为最好的、最具扩展性的时间序列数据库,而不管指标格式如何。用户不应该为了向Mimir发送度量而改变他们的代码。
因此,今天我们为Mimir开源了三个编写代理,可以用来从Graphite、Datadog和InfluxDB摄取指标,并将这些指标存储在Mimir中。这些代理在开源项目中标明,允许使用现有的监控基础设施快速、简单地摄取指标--并为Mimir从任何系统摄取指标奠定了基础。
对于Grafana云用户来说,Graphite代理已经普遍可用,而InfluxDB也将很快跟进。(没有Grafana Cloud账户?你今天就可以注册一个免费账户!)
什么是Grafana Mimir代理?
作为我们Grafana实验室 "大帐篷 "理念的一部分,我们希望让用户尽可能简单地从尽可能多的来源摄取数据。就像Grafana是一个可视化所有数据的工具一样,我们正在建立Mimir,使其成为一个存储所有指标的工具。
这是Mimir架构的一个关键组成部分:
Grafana Mimir架构图,现在可以从Prometheus、Grafana Agent、OpenMetrics、InfluxDB、Datadog和Graphite摄取指标.
为了实现这一点,写代理允许从Graphite和Datadog以及通过Influx Line协议本地摄入指标。通过添加代理作为收集代理(Datadog代理、Carbon-Relay-NG等)的额外端点,任何指标都将被翻译成Prometheus时间序列,并以Prometheus远程写入格式发送,存储在Mimir中。
这些代理被托管在GitHub上,目前被认为是实验性的。我们邀请您试用它们并分享您的反馈!
OpenTelemetry的OTLP指标的本地摄取即将到来。
Grafana Mimir代理:它们如何工作
每个代理的输入是以本地协议(Graphite度量、Datadog度量或Influx Line协议)发送的度量。
InfluxDB、Datadog和Graphite指标如何被摄入Grafana Mimir的示意图。

Graphite指标
Graphite写代理接受摄入请求(通常通过Carbon-Relay-NG),然后将传入的Graphite指标翻译成Prometheus指标。Graphite-to-Prometheus指标翻译区分了无标签的Graphite指标和有标签的Graphite指标,我们的代理支持这两种指标。两者的名称映射方案如下。
无标记的Graphite度量
Graphite metric:some.test.metric
在Prometheus中。graphite_untagged{__n000__="some", __n001__="test", __n002__="metric"}
标记的石墨指标
Graphite metric:some.test.metric;my_tag=my_value;another_tag=another_value
在Prometheus中。graphite_tagged{name="some.test.metric", my_tag="my_value", another_tag="another_value"}
依赖性:Graphite写代理作为一个独立的二进制文件运行,没有其他依赖性。
Datadog度量
Datadog写代理翻译传入的Datadog度量,并将它们与任何主机标签(Datadog Agent单独发送)结合起来,生成可以转发到Mimir的Prometheus系列。为了促进指标/主机标签的结合,Datadog写代理使用Prometheus本身作为主机标签的持久存储,它由一个memcached实例支持以提高性能。
一个典型的设置是使用DD_ADDITIONAL_ENDPOINTS 环境变量来告诉Datadog代理在其现有的目标之外将其指标发送到Datadog写代理。要把Datadog的指标转发给Grafana Cloud,请使用文档中描述的配置。
支持以下Datadog端点:
/api/v1/series/api/v1/check_run/intake
Datadog度量:rack_fans_speed.1{rack:0x13,shelf:04,pos:FL,pos:RR}, type = GAUGE
在Prometheus中:rack__fans__speed_dot_1{rack="'0x13'",shelf="'04'",pos="'FL','RR'", _dot_internal_dot_dd__type="gauge"}
在Mimir和Datadog之间,标签/标签名称中允许的字符有轻微的不兼容。需要进行一些翻译。普罗米修斯的度量衡名称和标签必须与重码匹配。[a-zA-Z_:][a-zA-Z0-9_:]*
然而,Datadog允许在其标记/标签名称中使用句号(.)等字符,这是Prometheus所不允许的。Datadog写代理对公制名称和标签使用以下翻译规则(仅对公制名称使用前两条规则):
- 任何下划线(_)字符都会被双下划线取代
__ - 任何句号(......)字符都会被字符串所取代
_dot_ - 任何破折号(-)字符都被字符串所取代
_dsh_ - 任何斜线(/)字符都被字符串所取代
_sls_
依赖性:Datadog写代理作为一个独立的二进制文件运行,需要访问memcached服务器才能运行。
InfluxDB线路协议
最初的InfluxDB Line协议代理是由Grafana实验室的Goutham Veeramachaneni开发的,正在被归入Mimir项目。最初,它将保留在现有的GitHub仓库中,然后它将被转移到Mimir Proxies GitHub仓库中,与Graphite和Datadog写入代理一起。
Influx线协议的度量:
weather,location=us-midwest temperature=82 1465839830100400200
在普罗米修斯:
weather_temperature{location="us-midwest",__proxy_source__="influx"}
依赖性:Influx写代理作为一个独立的二进制文件运行,没有其他依赖性。
部署示例:将Graphite指标摄入Grafana Mimir中
在这里,我们将指导你如何配置和运行 Graphite 写入代理,以便与在 localhost 上的 9090 端口运行的现有 Mimir 安装对话。如果没有现有的 Mimir 安装,或者你想快速安装一个测试安装,那么请遵循Get started with Grafana Mimir 文档。
收集所需信息
要配置一个写代理,你需要知道以下信息:
- 写入代理应该监听的TCP端口
- 在Mimir中进行远程写入的端点
写入代理的默认TCP端口是8000;但是,最好选择一个独特的非默认端口,特别是如果你要在同一台主机上运行多个写入代理(Graphite、Datadog、Influx等)。
如果Mimir被配置为在localhost上监听9009端口,那么远程写终端将是http://localhost:9009/api/v1/push。
下载和构建
(注意:预构建的二进制文件和Docker镜像是我们要做的事情之一。)
克隆github.com/grafana/mim…仓库并构建它(需要一个go开发环境):
- go mod tidy
- make build
- 进行测试
假设一切顺利,测试应该通过,你将在dist子目录下有一个graphite-proxy-writes二进制文件。
运行 Graphite 写入代理
现在你可以使用上面收集的信息来运行 Graphite 写入代理:
dist/graphite-proxy-writes \
-auth.enable=false \
-server.http-listen-address 127.0.0.1 \
-server.http-listen-port 8008 \
-write-endpoint http://localhost:9009/api/v1/push
例子 公差发送
你可以使用下面的命令来向 Graphite 写入代理发送一个度量的例子:
curl -H "Content-Type: application/json" "http://localhost:8008/graphite/metrics" -d '[{"Name": "AMetricName","Metric": "AMetricName.Foo.Bar","Interval": 10,"Value": 1000.123,"Unit": "unknown","Time": 1657179807,"Mtype": "gauge","interval": 10}]'
你可以通过使用Grafana中的Explore来检查指标是否已经到了Mimir。
对于Graphite写代理,你也可以使用Carbon-Relay-NG来接受更广泛的Graphite格式(包括通过TCP的纯文本)。关于Graphite写入代理的更详细的安装/使用说明可以在GitHub上找到。
Grafana Mimir的下一步是什么?
这是Graphite、Datadog和Influx写代理的初始实验性或 "现状 "版本,因此通过两个不同的GitHub仓库发布。随着时间的推移,Influx写代理将从它原来/现在的地方转移到Mimir代理仓库中。
有大量的工作计划来重构现有的代理,并开发一个通用的框架来创建未来的写代理,减少重复和更多的模板代码。现有的代理是由不同的团队内部开发的,所以在整合它们的过程中,我们正在采用所有三个团队的最佳方法,并考虑到未来的写代理。我们认为这是我们技术债务的一部分,不希望这个东西停滞不前或腐烂。
请关注即将到来的许多方面的改进--日志、追踪、测试、可维护性,以及更多的改进毕竟,我们的目标是成为存储你所有指标的最佳单一工具。