VictoriaMetrics 中文教程(05)对接各类监控数据采集器

本文介绍 VictoriaMetrics 如何对接 Prometheus Exporter、Datadog Agent、Telegraf、Graphite/StatsD、OpenTSDB collector 和 NewRelic Infrastructure agent,包括 promscrape、DD_DD_URL、InfluxDB line protocol、Graphite、OpenTSDB telnet/HTTP 等写入方式。

作者 快猫运营团队

VictoriaMetrics

VictoriaMetrics 中文教程系列文章:

VictoriaMetrics 期望做大一统的时序数据存储,可以对接各类采集器,比如 Prometheus 生态的各类 Exporter、Telegraf、Datadog Agent、OpenTSDB collector、StatsD 等。本文介绍这些采集器如何把数据写入 VictoriaMetrics。

核心摘要

  • Prometheus Exporter 场景可以通过 -promscrape.config 让 VictoriaMetrics 直接读取 prometheus.yaml 并主动抓取目标。
  • Datadog Agent 可以通过 DD_DD_URL 或配置文件中的 dd_url 把数据写入 VictoriaMetrics。
  • Telegraf 可以通过 outputs.influxdboutputs.http 对接 VictoriaMetrics 的 InfluxDB 兼容接口。
  • Graphite/StatsD 场景可以让 VictoriaMetrics 监听 -graphiteListenAddr
  • OpenTSDB 支持 telnet put 和 HTTP 两种方式,可分别通过 -opentsdbListenAddr-opentsdbHTTPListenAddr 开启。

Prometheus Exporter

如果你原本使用 Prometheus,肯定了解 Prometheus 配置文件 prometheus.yaml。这个文件定义了 Prometheus 的监控目标。Prometheus 通过 Pull 方式从监控目标拉取监控数据,然后存储到本地 TSDB 中。

VictoriaMetrics 启动时,可以通过 -promscrape.config 参数指向 prometheus.yaml。这样 VictoriaMetrics 就会自动拉取各个监控目标暴露的数据,并存储到自己的 TSDB 中。

需要注意,prometheus.yaml 里除了定义监控目标,还可能包含一些和抓取数据无关的配置,例如 Alertmanager 配置。VictoriaMetrics 启动时会检测这个文件,如果有一些 VictoriaMetrics 用不到的配置项,就会报错。

此时有两个解法:

  • 根据报错信息,删除无用配置。
  • 给 VictoriaMetrics 加上 -promscrape.config.strictParse=false 参数,让 VictoriaMetrics 忽略这些无用配置项。

Datadog Agent

Datadog 在可观测性领域的地位毋庸置疑。Datadog Agent 是 Datadog 的采集器,开源且用户很多。因此,VictoriaMetrics 针对 Datadog Agent 提供了专门接口,可以直接把 Datadog Agent 数据写入 VictoriaMetrics。

Datadog Agent 启动时,可以通过环境变量 DD_DD_URL 指定服务端地址。把这个地址指向 VictoriaMetrics,就可以把 Datadog Agent 数据写入 VictoriaMetrics。

DataDog agent to VictoriaMetrics

配置示例:

DD_DD_URL=http://<victoriametrics>:8428/datadog

<victoriametrics> 替换为自己的 VictoriaMetrics 地址。

除了环境变量,也可以通过 Datadog Agent 配置文件配置:

dd_url: http://victoriametrics:8428/datadog

Telegraf

Telegraf 是 InfluxData 主推的采集器,和 InfluxDB 对接很顺。Telegraf 支持不同 output 插件,可以通过 influxdbhttp 两种 output plugin 对接 VictoriaMetrics。

influxdb output plugin 配置:

[[outputs.influxdb]]
  urls = ["http://<victoriametrics-addr>:8428"]

http output plugin 配置:

[[outputs.http]]
  url = "http://<victoriametrics-addr>:8428/influx/write"
  data_format = "influx"
  non_retryable_statuscodes = [400]

<victoriametrics-addr> 替换为自己的 VictoriaMetrics 地址。在这个逻辑里,VictoriaMetrics 扮演的是 InfluxDB 角色,接口兼容 InfluxDB 写入接口。

如果想查看 Telegraf 数据写入情况,可以通过 VictoriaMetrics 的 export 接口查询数据:

curl -G 'http://localhost:8428/api/v1/export' -d 'match={__name__=~"measurement_.*"}'

对接 Graphite 兼容 agent,比如 StatsD

VictoriaMetrics 可以监听一个新端口来接收 Graphite 类型数据:

/path/to/victoria-metrics-prod -graphiteListenAddr=:2003

之后可以通过命令行测试:

echo "foo.bar.baz;tag1=value1;tag2=value2 123 `date +%s`" | nc -N localhost 2003

上面是在 VictoriaMetrics 进程所在机器上,通过 nc 命令发送数据到 2003 端口。VictoriaMetrics 会自动解析 Graphite 数据格式,并存储到自己的 TSDB 中。

对接 OpenTSDB collector

如果通过 OpenTSDB 的 telnet put 协议发送数据到 VictoriaMetrics,可以通过下面命令让 VictoriaMetrics 监听新端口:

/path/to/victoria-metrics-prod -opentsdbListenAddr=:4242

之后可以通过 nc 命令测试发送数据:

echo "put foo.bar.baz `date +%s` 123 tag1=value1 tag2=value2" | nc -N localhost 4242

VictoriaMetrics 会自动解析 OpenTSDB 数据格式,并存储到自己的 TSDB 中。

OpenTSDB 除了支持 TCP,也支持 HTTP 方式接收数据。如果要通过 HTTP 写入,需要通过 -opentsdbHTTPListenAddr 指定端口:

/path/to/victoria-metrics-prod -opentsdbHTTPListenAddr=:4242

之后就可以通过 HTTP 发送数据:

curl -H 'Content-Type: application/json' -d '{"metric":"x.y.z","value":45.34,"tags":{"t1":"v1","t2":"v2"}}' http://localhost:4242/api/put

上例写入一条测试数据。如果要批量写入,可以这么写:

curl -H 'Content-Type: application/json' -d '[{"metric":"foo","value":45.34},{"metric":"bar","value":43}]' http://localhost:4242/api/put

另外,VictoriaMetrics 还支持和 NewRelic Infrastructure agent 对接,原理类似,这里不赘述。

常见采集器对接方式汇总

采集器或协议 VictoriaMetrics 对接方式 适用场景
Prometheus Exporter -promscrape.config 指向 prometheus.yaml 沿用 Prometheus 抓取配置
Datadog Agent DD_DD_URLdd_url Datadog Agent 数据写入 VictoriaMetrics
Telegraf outputs.influxdboutputs.http InfluxDB line protocol 生态
Graphite/StatsD -graphiteListenAddr Graphite plaintext 协议写入
OpenTSDB telnet put -opentsdbListenAddr OpenTSDB TCP 写入
OpenTSDB HTTP -opentsdbHTTPListenAddr OpenTSDB HTTP 写入

FAQ

VictoriaMetrics 能直接抓 Prometheus Exporter 吗?

可以。通过 -promscrape.config 指向 Prometheus 配置文件,VictoriaMetrics 可以像 Prometheus 一样抓取目标暴露的指标。

Telegraf 写入 VictoriaMetrics 时应该选哪个 output?

可以使用 outputs.influxdb,也可以使用 outputs.http 并把数据格式设为 influx。二者都利用了 VictoriaMetrics 对 InfluxDB 写入接口的兼容能力。

OpenTSDB 写入 VictoriaMetrics 支持哪几种方式?

支持 telnet put 协议和 HTTP 方式。分别通过 -opentsdbListenAddr-opentsdbHTTPListenAddr 开启监听端口。

小结

VictoriaMetrics 期待做大一统的时序数据存储,因此提供了丰富的采集器和协议兼容能力。对接时最关键的是先判断数据来自哪个生态:Prometheus、Datadog、InfluxDB/Telegraf、Graphite/StatsD 还是 OpenTSDB。确定来源后,再选择对应入口参数或写入 URL。

联系我们交流

延伸路径

继续看解决方案和产品对比

如果你正在做监控、可观测性或故障定位相关选型,建议从解决方案和产品对比继续往下看。

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云