Exporter 本质上就是将收集的数据,转化为对应的文本格式,并提供 http 请求。
文本格式
Exporter 收集的数据转化的文本内容以行 (\n) 为单位,空行将被忽略, 文本内容最后一行为空行。
注释
文本内容,如果以 # 开头通常表示注释。
- 以 # HELP 开头表示 metric 帮助说明。
- 以 # TYPE 开头表示定义 metric 类型,包含 counter, gauge, histogram, summary, 和 untyped 类型。
- 其他表示一般注释,供阅读使用,将被 Prometheus 忽略。
采样数据的样式
内容如果不以 # 开头,表示采样数据。它通常紧挨着类型定义行,满足以下格式:
metric_name [
"{" label_name "=" `"` label_value `"` { "," label_name "=" `"` label_value `"` } [ "," ] "}"
] value [ timestamp ]
下面是一个完整的例子:
# HELP http_requests_total The total number of HTTP requests.
# TYPE http_requests_total counter
http_requests_total{method="post",code="200"} 1027 1395066363000
http_requests_total{method="post",code="400"} 3 1395066363000
一个 exporter 就是将收集的数据转化为文本格式,并提供 http 请求即可,那很容自己实现一个,prometheus官方提供了client各种语言的库,比如go语言的clent-golang,只要集成使用就能输出对应的指标。
client_golang
我们开发探针都是基于官方提供的语言库,最多使用的还是golang,我们需要重点了解client_golang。
exporter
通过各种client库,我们可以开发各种采集探针,将数据转为固定的文本格式来给监控提供数据。不同的监控通过不同的探针来实现,下面是一些常见探针的使用说明:
- Node_Exporter
- grok_Exporter
- mtail
- nginx
- blackbox_Exporter
- gpu_Exporter
- mysqld_Exporter
- postgres_Exporter
- process_Exporter
- redis_Exporter
- snmp_Exporter
其他探针
还有其他很多采集器,可以直接去prometheus官方网站看目前发布的https://prometheus.io/docs/instrumenting/exporters/
开发注意
1、探针日志注意事项:
- 正常情况下应该不输出日志,只会在有错误的情况下输出错误日志
- 如果输出日志了,应该设置定时清理脚本
这个也适用于很多服务器下面的情况,毕竟如果程序如果跑在了别人的机器上,你是不容易操作的。
2、探针的管理
prometheus的exporter都是独立的,简单几个使用还是不错,解耦还开箱即用,但是数量多了,运维的压力变大了,例如探针管理升级,运行情况的检查等,有几种方案解决
- 做一个管理平台,类似于后台系统,专门对exporter进行管理
- 用一个主进程整合几个探针,每个探针依旧是原来的版本
- 用telegraf来支持各种类型的input,all in one