天天看点

Prometheus监控运维实战十二:Exporter详解

从广义的层面上讲,任何遵循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​​ 

容器

​​ca​​​​r​​dviso

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已经获取到系统的相关指标。

Prometheus监控运维实战十二:Exporter详解

继续阅读