Telegraf 发送指标给 Prometheus
Telegraf 简介
Telegraf 作为一个指标层面的 all-in-one 的采集器,用途广泛,Telegraf 具备多种 output 插件,本篇介绍如何使用 prometheus remote write 方式发送数据给后端。
Telegraf 具体的介绍之前讲过很多了,不在这里展开了,如果想看历史文章,可以关注公众号 SRETalk,搜索(搜索关键字 Telegraf)历史文章,有好几篇调研笔记。
Telegraf 输出插件
Telegraf 支持多种 output plugin,可以把采集到的数据发给多种后端,比如 OpenTSDB、Datadog 等,之前讲解 Nightingale 和 Telegraf 对接的时候,大都推荐使用 outputs.opentsdb 插件与 Nightingale 对接。实际上,OpenTSDB 的方式比较简单易于理解,性能不好,更好的发送方式其实是通过 prometheus remote write 协议来发送指标。
在 telegraf.conf 里增加下面的配置:
[[outputs.http]]
url = "http://localhost:19000/prometheus/v1/write"
data_format = "prometheusremotewrite"
[outputs.http.headers]
Content-Type = "application/x-protobuf"
Content-Encoding = "snappy"
X-Prometheus-Remote-Write-Version = "0.1.0"
这是开启了 Telegraf 的 http output 插件,通过 http 方式发送指标给后端,发送地址配置的是 http://localhost:19000/prometheus/v1/write
这是 n9e-server 的地址,因为 n9e-server 支持接收 prometheus remote write 数据,所以通过这种方式,Telegraf 就可以把数据推给 Nightingale 了。
当然,也可以把数据直接推给 Prometheus,url 配置为 Prometheus 的 remote write 地址即可,比如:
http://localhost:9090/api/v1/write
。前提是 Prometheus 需要开启 remote-write 的 feature,怎么开启?在 Prometheus 的启动参数中增加:--web.enable-remote-write-receiver
即可。
Telegraf 发给后端的监控指标,都会带有一个 host 标签来标识 Telegraf 所在机器的机器名,host 这个标签比较通用,容易和实际的监控数据的标签冲突,通过 remote write 方式发数据给 Nightingale 的时候,我们建议做如下调整:
1, 在 [global_tags]
中增加一个标签,标签名是 agent_hostname,标签值设置为本机的机器名,比如
[global_tags]
agent_hostname = "telegraf-flashcat.cloud"
2, 在 [agent]
配置段中忽略 hostname 字段,配置如下:
[agent]
## Override default hostname, if empty use os.Hostname()
hostname = ""
## If set to true, do no set the "host" tag in the telegraf agent.
omit_hostname = true
这样一来,Telegraf 就会忽略 host 字段,同时,我们又设置了全局标签 agent_hostname,Telegraf 就会给所有时序数据都附上 agent_hostname 这个标签,Nightingale 服务端收到这个数据之后,看到 agent_hostname 标签,就会当做机器标识,自动 rename 成 ident,写入 target 表,这样你就可以在对象列表里看到了。
关于作者
本文作者秦晓辉,Flashcat合伙人,文章内容是Flashcat技术团队共同沉淀的结晶,作者做了编辑整理,我们会持续输出监控、稳定性保障相关的技术文章,文章可转载,转载请注明出处,尊重技术人员的成果。