Exporter入门介绍

半兽人 发表于: 2021-03-18   最后更新时间: 2021-08-14 23:44:50  
{{totalSubscript}} 订阅, 3,061 游览

Exporter是什么

为Prometheus提供监控数据源的都被称为Exporter,比如Node Exporter用来提供节点相关的资源(cpu、内存、disk...)使用状况,而Prometheus从这些不同的Exporter中获取监控数据,然后可以在诸如Grafana这样的可视化工具中进行结果的显示。

Exporter

Exporter的类型

Exporter来源可以分为2种:

  • 社区提供的Exporter
  • 自定义的Exporter

Exporter支持方式可以分为:

  • 内嵌支持Prometheus,比如kubernetes或者etcd,简单来说这种类型的软件中不需要单独的Exporter用于提供给Prometheus的监控数据的功能,这是其本身的功能特性之一。

  • 独立运行的Exporter,比如NodeExporter,操作系统本身由于不像kubernetes那样提供对于Prometheus的支持,所以需要单独运行Node Exporter用于提供节点自身的信息给Prometheus进行监控。

Exporter接口

Prometheus通过exporter机制将监控metric数据收集到服务端,exporter是一个http(不支持https)服务端口,由Prometheus server定时拉取,如下示意:

Exporter

http返回格式的要求,见官方文档

Exporter格式

metric_name ["{" label_name "=" `"` label_value `"` { "," label_name "=" `"` label_value `"` } [ "," ] "}"] value [ timestamp ]
  • metric_name:指标的名称
  • label:指标维度的标签,可以有多个
  • value:指标具体的值

Exporter的四种指标

Counter:只增不减的累加指标

Counter就是一个计数器,表示一种累积型指标,该指标只能单调递增或在重新启动时重置为零,例如,您可以使用计数器来表示所服务的请求数,已完成的任务或错误。

Gauge:可增可减的测量指标

Gauge是最简单的度量类型,只有一个简单的返回值,可增可减,也可以set为指定的值。所以Gauge通常用于反映当前状态,比如当前温度或当前内存使用情况;当然也可以用于“可增加可减少”的计数指标。

Histogram:自带buckets区间用于统计分布的直方图

Histogram主要用于在设定的分布范围内(Buckets)记录大小或者次数。

例如http请求响应时间:0-100ms、100-200ms、200-300ms、>300ms 的分布情况,Histogram会自动创建3个指标,分别为:

事件发送的总次数<basename>_count:比如当前一共发生了2次http请求

所有事件产生值的大小的总和<basename>_sum:比如发生的2次http请求总的响应时间为150ms

事件产生的值分布在bucket中的次数<basename>_bucket{le="上限"}:比如响应时间0-100ms的请求1次,100-200ms的请求1次,其他的0次

Summary:数据分布统计图

Summary和Histogram类似,都可以统计事件发生的次数或者大小,以及其分布情况。

Summary和Histogram都提供了对于事件的计数_count以及值的汇总_sum,因此使用_count,和_sum时间序列可以计算出相同的内容。

同时Summary和Histogram都可以计算和统计样本的分布情况,比如中位数,n分位数等等。不同在于Histogram可以通过histogram_quantile函数在服务器端计算分位数。 而Sumamry的分位数则是直接在客户端进行定义。因此对于分位数的计算。 Summary在通过PromQL进行查询时有更好的性能表现,而Histogram则会消耗更多的资源。相对的对于客户端而言Histogram消耗的资源更少。

Exporter开发

Exporter SDK

对于开源的平台,我们一般能从官方列表中找到对应的Exporter,稍加集成就可以顺利接入。对于闭源或者自研的系统,提供一个Prometheus Exporter形式监控接口则会提升软件本身的监控能力。官方提供了常用的客户端库用来开发一个集成http serverExporter库。非正式的也有一些其它语言的库。

Exporter

Exporter库基本实现了上图的功能,提供了一个HttpServer,实现GET /metrics接口,这个接口关联到一个Handle访问CollectorRegistry获取所有的指标信息,序列化为Text文本格式返回。其中ColloecorRetistry需要提前注册需要获取的各种指标对象。

由于Exporter本身提供了一个REST服务器,所以不会特别轻量,会带来一些线程的消耗,如果在一个机器上启动过多Exporter实例则需要注意,想办法减少Exporter实例的数量。

自研的Exporter的优势是可以在代码中埋点,精确代码中的监控业务数据。同时写好一个Exporter还有一些原则,比如要统计http请求的次数,某一种错误产生的次数,当前active连接的个数等等。

扩展Node Exporter

Node Exporter是Prometheus官方发布的用来监控主机资源信息的Exporter,这个Exporter本身提供了一个Textfile Collector对外接口,可以用来把一些可以脚本化的监控数据带上去,通过 --collector.textfile.directory 参数指定本地文本收集路径:

/opt/exporter/node_exporter/node_exporter --collector.textfile.directory=/opt/exporter/node_exporter/key

自研Exporter

除了以上2种方式,也可以按照规范自己开发Exporter服务,实现一个返回文本指标格式的HTTP Server

社区支持的Exporter

去官方查看吧,我就不贴过来了,非常齐全:https://prometheus.io/docs/instrumenting/exporters/

更新于 2021-08-14

查看Prometheus更多相关的文章或提一个关于Prometheus的问题,也可以与我们一起分享文章