更新时间:2025 年 6 月
常用的 exporter 列表:Exporters and integrations | Prometheus
简介
在 Prometheus 的监控体系中,Exporter 是一种独立的程序或服务。充当了 Prometheus 与第三方目标系统(本身不直接暴露 Prometheus 格式指标的系统)之间的桥梁
Exporter 可以采集第三方系统的数据,将数据转换为符合 Prometheus 的指标格式,并为 Prometheus 提供标准的 /metrics
HTTP 接口。
核心概念
目的
扩展 Prometheus 的监控范围,使其能够收集来自各种来源(数据库、硬件、消息队列、存储系统、云服务、甚至操作系统本身等)的指标
工作模式
Exporters 通常作为一个独立的进程(守护进程)运行在需要被监控的目标主机或容器中,工作步骤如下
- 主动查询目标系统(通过其原生 API、CLI 工具、协议或读取日志文件等)
- 将查询到的原始监控数据(如状态、性能计数器)转换、聚合、标准化为 Prometheus 理解的文本格式
- 公开一个 HTTP 端点(通常是
/metrics
),在该端点上发布转换后的指标数据 - Prometheus Server 定期(根据配置的抓取间隔)向这个 HTTP 端点发起 HTTP GET 请求(即
Pull
),拉取最新的指标数据
指标格式
转换后发布的数据是纯文本格式,遵循 Prometheus 的文本格式规范。基本结构包括:
# HELP
: 指标的描述信息# TYPE
: 指标的类型 (counter
,gauge
,histogram
,summary
,untyped
)<metric name>{<label name>=<label value>, ...} <metric value>
: 指标数据行,包含指标名、标签(键值对用于维度划分)、数值(浮点数或整数
核心作用
Prometheus 的设计理念是直接抓取目标服务的指标端点,但现实环境中绝大多数系统无法提供原生支持 Prometheus 的数据格式。Exporters 的核心作用正是解决这一问题:
- 协议转换器
将非 Prometheus 原生协议的数据(如:JMX, SNMP, MySQL SHOW STATUS, Private API 等)转换为标准的 Prometheus 文本格式 - 监控边界扩展器
使 Prometheus 能监控传统 IT 基础设施(硬件、网络设备)、云平台服务(AWS/Azure/GCP)、中间件(数据库、消息队列)等原本不可直连的目标 - 数据标准化引擎
对原始监控数据进行清洗、加工、添加统一标签(如instance
,job
),输出符合 Prometheus 数据模型的指标 - 统一接入层
为所有异构系统提供一致的/metrics
HTTP 接口,极大简化 Prometheus 的抓取配置与管理复杂度
类型
官方/社区维护
Prometheus 社区维护了一个庞大且活跃的 Exporters 和集成列表,覆盖了流行的软件和系统,质量较高。常见例子:
-
数据库相关:
mysqld_exporter
- ``postgres_exporter`
mongodb_exporter
redis_exporter
elasticsearch_exporter
-
消息队列:
kafka_exporter
rabbitmq_exporter
-
Web 服务器/代理:
nginx_exporter
- ``haproxy_exporter`
-
硬件/系统:
node_exporter
(监控主机硬件和操作系统指标 - 最常用)ipmi_exporter
(监控硬件传感器/IPMI)snmp_exporter
(通用 SNMP 设备监控)
-
存储:
ceph_exporter
,gluster_exporter
-
云平台:
cloudwatch_exporter
(AWS CloudWatch)
-
其他中间件:
-
jmx_exporter
(监控任何暴露 JMX 的 Java 应用) -
blackbox_exporter
(主动探测 HTTP, HTTPS, DNS, TCP, ICMP 等服务的可用性和性能 - 非常有用)
-
自定义
- 当没有现成的 Exporter 满足需求时,可以自己编写。例如:为自己的内部微服务、业务应用或专有设备编写 Exporter
- 使用 Prometheus 官方提供的客户端库(支持 Go, Java/JVM, Python, Ruby, .Net 等)可以非常方便地创建自定义指标并暴露
/metrics
端点
使用方式
部署 Exporter
- 在需要监控的目标主机或容器中下载、安装并运行相应的 Exporter。通常有预编译的二进制文件和 Docker 镜像可用
- 配置 Exporter(如果需要),例如指定目标数据库的连接信息、认证凭据、监听端口等(通常通过命令行参数或配置文件)
配置 Prometheus
- 在 Prometheus 的配置文件
prometheus.yml
中,添加一个新的抓取作业 (scrape_configs
) - 指定该作业的
job_name
: 给这个抓取任务起个有意义的名字(如node_exporter
)static_configs.targets
: 运行 Exporter 的主机名/IP 地址和端口列表(如:['host1:9100', 'host2:9100']
)信息。如果 Exporter 运行在容器内,需确保网络可达- 可选的
metrics_path
: 如果 Exporter 的端点不是默认的/metrics
,需要指定 - 可选的
scheme
(http
/https
) - 可选的标签 (
labels
): 可以添加额外的标签到从这个作业抓取的所有指标上(如environment="production"
,role="webserver"
)
重启/重载 Prometheus
重启/重载 Prometheus 让配置生效
验证
- 直接在浏览器访问
http://<exporter_host>:<exporter_port>/metrics
查看是否输出指标 - 在 Prometheus Web UI 的
Status -> Targets
页面检查该抓取作业的状态是否为UP
- 在 Prometheus Web UI 的
Graph
页面尝试查询该 Exporter 暴露的指标
特点与注意事项
- 拉取模型: Exporters 遵循 Prometheus 的拉取(
Pull
)模型。被动等待 Prometheus 来抓取数据 - 资源消耗: Exporters 本身会消耗一定的 CPU 和内存资源,因为它们需要定期查询目标系统。需要监控 Exporter 自身的资源使用情况
- 安全性:
- 保护 Exporter 的端点(特别是暴露在互联网上时)。考虑使用防火墙规则、认证(基本认证、Bearer Token)或 TLS 加密
- 如果 Exporter 需要访问敏感信息(如数据库密码),确保其配置文件和运行环境的安全
- 版本兼容性: Exporter 的版本可能与其监控的目标系统版本有兼容性要求,需要注意匹配
- 指标质量: 不同 Exporter 暴露的指标数量和质量可能差异很大。需要仔细阅读其文档,了解哪些指标可用及其含义
- Pushgateway 的特殊性:
pushgateway
可以看成是一个允许推送指标(Push
)的 Exporter,但它主要用于短暂的、无法被抓取的作业(如 cron job),不要把其作为长期存储指标的地方,使用不当可能导致指标陈旧等问题