Prometheus Exporter 完全指南
Exporter 是 Prometheus 监控非原生系统的桥梁:把数据库、中间件、硬件的指标翻译成 Prometheus 格式。主流 Exporter 盘点、Nginx 实操、指标爆炸防护与 relabeling 技巧。
很多系统并不原生暴露 Prometheus 格式的指标——MySQL、Nginx、Redis、交换机、UPS……Exporter 就是填平这个鸿沟的翻译官:它从目标系统采集数据,转成 Prometheus 标准格式,通过 HTTP 端点暴露给 Prometheus 抓取。
Exporter 的工作模型
目标系统(MySQL) → Exporter 采集并转换 → /metrics 端点 → Prometheus 定期抓取
Exporter 通常作为 sidecar 或独立进程部署在目标旁边,Prometheus 配置里把它当作普通抓取目标。
主流 Exporter 盘点
| Exporter | 监控对象 |
|---|---|
| Node Exporter | Linux/Unix 主机:CPU、内存、磁盘、网络 |
| Blackbox Exporter | 主动探测:HTTP/TCP/ICMP/DNS("外部视角"监控) |
| MySQLd Exporter | MySQL:连接、查询、复制、慢查询 |
| PostgreSQL Exporter | PG:查询时长、锁、复制延迟 |
| Redis Exporter | Redis:内存、命中率、慢日志 |
| Nginx Exporter | Nginx:连接数、请求数(需 stub_status 或 VTS) |
| Kube-state-metrics | K8s 对象状态:Deployment、Pod、Node |
| SNMP Exporter | 网络设备:交换机、路由器 |
选型原则:优先官方维护的(prometheus 官方 GitHub org 下的),其次看社区活跃度与指标文档质量。
实操:用 Exporter 监控 Nginx
Nginx 开源版只暴露极简的 stub_status,需要 exporter 做转换:
# docker-compose.yml 片段
services:
nginx:
image: nginx:latest
# nginx.conf 里开启 stub_status:
# location /stub_status { stub_status; allow 127.0.0.1; allow exporter网段; }
nginx-exporter:
image: nginx/nginx-prometheus-exporter:latest
command:
- -nginx.scrape-uri=http://nginx:80/stub_status
Prometheus 配置抓取:
scrape_configs:
- job_name: nginx
static_configs:
- targets: ['nginx-exporter:9113']
抓到的指标长这样:
nginx_connections_active 4
nginx_connections_handled 59
nginx_http_requests_total 120
防指标爆炸:Exporter 的卫生管理
Exporter 默认可能暴露几百上千个指标,很多你根本用不上。基数失控会拖垮存储与查询。两种治理手段:
1. 在 Exporter 侧裁剪
多数 exporter 支持参数关闭不需要的采集模块,如 Node Exporter:
node_exporter --collector.disable-defaults \
--collector.cpu --collector.meminfo --collector.filesystem
2. 在 Prometheus 侧用 relabeling 丢弃
scrape_configs:
- job_name: node
static_configs:
- targets: ['localhost:9100']
metric_relabel_configs:
- source_labels: [__name__]
regex: 'go_.*|promhttp_.*' # 丢掉 exporter 自身的 Go 运行时指标
action: drop
metric_relabel_configs 在指标入库前处理,可以 drop、keep、改标签——是控制基数的最后一道闸。
观测云对照
不想维护一堆 exporter 进程的话,观测云 DataKit 内置数百种集成采集器——主机、数据库、中间件、消息队列开箱即用,配置一个文件即可启用,不需要为每个组件单独部署 exporter;已有的 Prometheus exporter 资产也可以被 DataKit 直接抓取兼容,指标与其他观测数据(日志、Trace)统一存储分析,避免又建一个数据孤岛。
常见问题(FAQ)
Q:Exporter 本身需要监控吗?
A:需要。Exporter 挂了 = 监控盲区。用 Prometheus 的 up 指标对 exporter 目标设告警即可。
Q:现有系统没有对应 exporter 怎么办?
A:三个选项:找社区第三方 exporter(GitHub 搜);用 Blackbox/textfile 模式曲线采集;或者用客户端库写一个小型自定义 exporter——暴露几个核心指标的 Go/Python 小服务,通常一两百行就能搞定。
Q:Exporter 的抓取间隔怎么定?
A:常规 15-30s。高频指标(如网络流量)15s,低频(如证书有效期)可以 5 分钟。注意全局一致性——同一个 job 里混用不同间隔会让 PromQL 分析变复杂。