Prometheus Exporter 完全指南

Exporter 是 Prometheus 监控非原生系统的桥梁:把数据库、中间件、硬件的指标翻译成 Prometheus 格式。主流 Exporter 盘点、Nginx 实操、指标爆炸防护与 relabeling 技巧。

最佳实践
Prometheus Exporter 完全指南技术指南封面

很多系统并不原生暴露 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 分析变复杂。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台