惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Stack Overflow Blog
Stack Overflow Blog
J
Java Code Geeks
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
博客园 - 【当耐特】
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
C
Check Point Blog
月光博客
月光博客
腾讯CDC
Engineering at Meta
Engineering at Meta
博客园 - Franky
Vercel News
Vercel News
D
Docker
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
F
Fortinet All Blogs
Microsoft Security Blog
Microsoft Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
雷峰网
雷峰网
Google DeepMind News
Google DeepMind News
Martin Fowler
Martin Fowler
GbyAI
GbyAI
B
Blog
Hugging Face - Blog
Hugging Face - Blog
T
Tailwind CSS Blog

mafeifan 的编程技术分享

mafengwo-mp3-downloader | mafeifan 的编程技术分享 示例页面 | mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 查看 default namespace 下的 default service account名称 mafeifan 的编程技术分享 检查日志 | mafeifan 的编程技术分享 bridge fdb show dev flannel.1 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享 mafeifan 的编程技术分享
mafeifan 的编程技术分享
2026-01-16 · via mafeifan 的编程技术分享

从广义的层面上讲,任何遵循Prometheus数据格式 ,可对其提供监控指标的程序都可以称为Exporter。在Prometheus社区中提供了丰富多样的Exporter供选择,如前面用到的node_exporter。

这些Exporter不仅类型丰富,功能上也很强大,通过合理的使用可以极大的方便我们的运维监控工作。除此之外,Prometheus还提供了支持多种开发语言的Clinet Libraries,用于满足Exporter的定制化开发需求。

本文将对Exporter进行介绍,包括工作中常用到的Exporter,以及如何通过Client Libraries开发自定义的Exporter。

一. Exporter运行方式 ​

1. 独立运行 ​

以前面使用过的node_exporter为例,由于操作系统本身并不直接支持Prometheus,因此,只能通过一个独立运行的程序,从操作系统提供的相关接口将系统的状态参数转换为可供Prometheus读取的监控指标。

除了操作系统外,如Mysql、kafka、Redis等介质,都是通过这种方式实现的。这类Exporter承担了一个中间代理的角色。

2. 应用集成 ​

由于Prometheus项目的火热,目前有部分开源产品直接在代码层面使用Prometheus的Client Library,提供了在监控上的直接支持,如kubernetes、ETCD等产品。

这类产品自身提供对应的metrics接口,Prometheus可通过接口直接获取相关的系统指标数据。这种方式打破了监控的界限,应用程序本身做为一个Exporter提供功能。

二. 常用的Exporter ​

下面表格是一些较常使用到的Exporter,内容覆盖了数据库、主机、HTTP、云平台等多个层面。

除以上这些外,还有很多其他用途的Exporter,有兴趣的朋友可以自行查看官网:https://prometheus.io/docs/instrumenting/exporters/。

三. 自定义Exporter ​

虽然Prometheus社区提供了丰富多样的Exporter给用户使用,但由于各家公司的环境都有自身的特点,有时候可能无法在现有资源中找到合适的工具。对此,我们可以利用Prometheus的Clinet Libraries,开发符合实际需要的自定义Exporter。

Client Libraries支持的语言版本非常丰富,除了官方提供了Go、Java or Scala、Python和Ruby几种外,还有很多第三方开发的其他语言版本。

本文我们将以Python为例,演示Exporter的开发。

示例:开发一个exporter,并用于获取系统网络连数状态为TIME_WAIT的数量指标。

本次将调用到的Linux的命令如下 ,用于获取系统的TIME_WAIT连接数量

bash

$ netstat -an  |grep TIME_WAIT |wc -l
36

使用pip安装python的prometheus-client库

$ pip install prometheus-client

在Python开发中引入prometheus-client和commands库,command库用于执行Linux系统命令。

python

from prometheus_client import Gauge
import commands

定义一个Gauge指标,名称为time_wait_count,并添加标签type。

time_wait_count = Gauge('time_wait_count', 'time_wait count of system',['type'])

定义执行函数,函数调用上面的Linux命令,用于获取相关的指标信息

python

def get_time_wait_count():
    number=commands.getoutput('netstat -an  |grep TIME_WAIT |wc -l')
    time_wait_count.labels('Linux').set(int(number))

现在,我们可以通过执行get_time_wait_count函数获取到time_wait_count的指标value,但要做为一个exporter运行,我们还得支持http协议。

此处,可以用到prometheus_client的start_http_server模块,该模块支持做为http服务启动。 完整的代码如下:

python


from prometheus_client import start_http_server,Gauge
import commands

time_wait_count = Gauge('time_wait_count', 'time_wait count of system',['type'])

def get_time_wait_count():
    number=commands.getoutput('netstat -an  |grep TIME_WAIT |wc -l')
    time_wait_count.labels('Linux').set(int(number))


if __name__ == '__main__':
    # Start up the server to expose the metrics.
    start_http_server(8090)
    # Generate some requests.
    while True:
        get_time_wait_count()

将代码保存为mytest_exporter.py,在需要监控的服务器上运行该程序

$ python mytest_exporter.py

访问http://IP:8090/metrics,可看到该Exporter已经获取到系统的相关指标。