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库,我们可以开发各种采集探针,将数据转为固定的文本格式来给监控提供数据。不同的监控通过不同的探针来实现,下面是一些常见探针的使用说明:

其他探针

还有其他很多采集器,可以直接去prometheus官方网站看目前发布的https://prometheus.io/docs/instrumenting/exporters/

开发注意

1、探针日志注意事项:

  • 正常情况下应该不输出日志,只会在有错误的情况下输出错误日志
  • 如果输出日志了,应该设置定时清理脚本

这个也适用于很多服务器下面的情况,毕竟如果程序如果跑在了别人的机器上,你是不容易操作的。

2、探针的管理

prometheus的exporter都是独立的,简单几个使用还是不错,解耦还开箱即用,但是数量多了,运维的压力变大了,例如探针管理升级,运行情况的检查等,有几种方案解决

  • 做一个管理平台,类似于后台系统,专门对exporter进行管理
  • 用一个主进程整合几个探针,每个探针依旧是原来的版本
  • 用telegraf来支持各种类型的input,all in one