从广义的层面上讲,任何遵循prometheus数据格式 ,可对其提供监控指标的程序都可以称为exporter。在prometheus的社区中提供了丰富多样的exporter供选择,如前面用到的node_exporter。这些exporter不仅类型丰富,功能上也很强大,通过有效的使用可以极大的方便我们的运维监控工作。除此之外,prometheus还提供了支持多种开发语言的clinet libraries,用于满足exporter的定制化开发需求。
本文将主要介绍工作中常用的exporter,以及如何通过clinet libraries开发自定义的exporter。
以前面使用过的node_exporter为例,由于操作系统本身并不直接支持prometheus,因此,只能通过一个独立运行的程序,从操作系统提供的相关接口将系统的状态参数转换为可供prometheus读取的监控指标。除了操作系统外,如mysql、kafka、redis等介质,都是通过这种方式实现的。这类exporter承担了一个中间代理的角色。
由于prometheus项目的火热,目前有部分开源产品直接在代码层面使用prometheus的client library,提供了在监控上的直接支持,如kubernetes、etcd等产品。这类产品自身提供对应的metrics接口,prometheus可通过接口直接获取相关的系统指标数据。这种方式打破了监控的界限,应用程序本身做为一个exporter提供功能。
下面表格是一些较常使用到的exporter及相关的代码仓库地址,内容覆盖了数据库、主机、http、云平台等多个层面。
<col>
类型
监控介质
exporter
数据库
mysql
mysql server exporter
elasticsearch
elasticsearch exporter
mongodb
mongodb exporter
redis
redis exporter
postgresql
postgresql exporter
硬件/操作系统
主机/linux
node exporter
gpu
nvidia gpu exporter
windows
windows exporter
ipmi
ipmi exporter
网络设备
snmp exporter
消息队列
rabbitmq
rabbitmq exporter
kafka
kafka exporter
rocketmq
rocketmq exporter
http
apache
apache exporter
haproxy
haproxy exporter
nginx
nginx exporter
云平台
阿里云
alibaba cloudmonitor exporter
aws
aws cloudwatch exporter
azure
azure monitor exporter
华为云
huawei cloudeye exporter
腾讯云
tencentcloud monitor exporter
其他
探针检测
blackbox exporter
容器
cardviso
ssh
ssh exporter
除以上这些外,还有很多其他用途的exporter,有兴趣的朋友可以自行查看官网:https://prometheus.io/docs/instrumenting/exporters/。
虽然promethesu社区提供了丰富多样的exporter给用户使用,但由于各家公司的环境都有自身的特点,有时候可能无法在现有资源中找到合适的工具。此时,我们可以利用prometheus的clinet libraries,开发符合实际需要的自定义exporter。
clinet libraries支持的语言版本非常丰富,除了官方提供了go、java or scala、python和ruby几种外,还有很多第三方开发的其他语言版本。本文我们将以python为例,演示exporter的开发。
示例:开发一个exporter,用于获取系统网络连数状态为time_wait的数量指标
本示例将调用到的linux的命令如下 ,用于获取系统的time_wait连接数量
使用pip安装python的prometheus-client库
在python开发中引入prometheus-client和commands库,command库用于执行linux系统命令。
定义一个gauge指标,名称为time_wait_count,并添加标签type
定义执行函数,函数调用上面的linux命令,用于获取相关的指标信息
现在,我们可以通过执行get_time_wait_count函数获取到time_wait_count的指标value,但要做为一个exporter运行,我们还得支持http协议。
此处,可以用到prometheus_client的start_http_server模块,该模块支持做为http服务启动。
完整的代码如下:
将代码保存为mytest_exporter.py,在需要监控的服务器上运行该程序
访问http://ip:8090/metrics,可看到该exporter已经获取到系统的相关指标。