
VictoriaMetrics 中文教程系列文章:
- VictoriaMetrics 中文教程(01)简介
- VictoriaMetrics 中文教程(02)安装
- VictoriaMetrics 中文教程(03)如何配置 Prometheus 使其把数据远程写入 VictoriaMetrics
- VictoriaMetrics 中文教程(04)对接 Grafana 同时介绍 vmui
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.influxdb或outputs.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。

配置示例:
DD_DD_URL=http://<victoriametrics>:8428/datadog
把 <victoriametrics> 替换为自己的 VictoriaMetrics 地址。
除了环境变量,也可以通过 Datadog Agent 配置文件配置:
dd_url: http://victoriametrics:8428/datadog
Telegraf
Telegraf 是 InfluxData 主推的采集器,和 InfluxDB 对接很顺。Telegraf 支持不同 output 插件,可以通过 influxdb 和 http 两种 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_URL 或 dd_url |
Datadog Agent 数据写入 VictoriaMetrics |
| Telegraf | outputs.influxdb 或 outputs.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。
