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

快猫运营团队 2024-10-21 11:07:23

VictoriaMetrics

VictoriaMetrics 中文教程系列文章:

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

Prometheus Exporter

如果你原本用了 Prometheus,那你肯定了解 Prometheus 的配置文件,prometheus.yaml,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 插件,我们可以通过 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、Telegraf、Datadog-Agent、OpenTSDB collector、StatsD 等等。本文介绍了如何对接这些采集器,希望对你有所帮助。

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云
OpenSource
开源版
Flashcat
Flashcat