自定义 Exporter 是 Prometheus 监控专属业务的关键入口,需完成采集、转换、暴露三环节;指标设计应聚焦可观测、可归因、可行动的具体量,合理选用 Counter、Gauge、Histogram/Summary 类型并规范命名与标签;推荐 Go 或 Python 实现,按功能分层组织代码,通过 HTTP 暴露符合文本格式的 /metrics 接口,并在 Prometheus 中配置抓取目标以完成接入验证。

自定义 Exporter 是让 Prometheus 监控你专属业务或系统的关键入口。它不复杂,但需要理清采集、转换、暴露三个环节,缺一不可。
明确你要监控什么指标
指标设计直接影响后续可维护性和告警有效性。避免泛泛而谈的“CPU 使用率”,而是聚焦可观测、可归因、可行动的具体量:
-
Counter 类型:适合累计类数据,如
app_order_processed_total{region="us-east",status="success"} -
Gauge 类型:适合瞬时状态,如
app_queue_length{queue="payment"} -
Histogram/Summary 类型:适合延迟、耗时类分布,如
http_request_duration_seconds_bucket{le="0.2"}
每个指标必须带清晰的 Name、Help 字符串和必要标签(label),标签不宜过多,通常控制在 3–5 个以内,避免高基数问题。
选择语言并初始化项目结构
Go 和 Python 是最主流的选择。Go 性能高、生态成熟,适合长期运行的独立 Exporter;Python 开发快、调试直观,适合快速验证或轻量级集成。
-
Go 项目示例:用
go mod init myapp-exporter初始化,引入github.com/prometheus/client_golang -
Python 项目示例:安装
pip install prometheus-client,用start_http_server(9101)启动端点 - 建议按功能分层:
collectors/(采集逻辑)、metrics/(指标定义)、main.go或app.py(服务入口)
实现采集与暴露逻辑
核心是把原始数据变成 Prometheus 可识别的指标,并通过 HTTP 提供 /metrics 接口。
- 采集方式取决于目标:调用系统命令(
ps、df)、读取文件(/proc)、请求 API(HTTP 或 gRPC)、监听本地 socket 等 - Go 中需注册
Collector实现Describe()和Collect()方法;Python 中直接调用.inc()、.set()、.observe()即可更新指标 - 暴露端点必须返回纯文本格式,以
# HELP和# TYPE开头,每行一个指标,例如:
# HELP app_up Whether the app is up
# TYPE app_up gauge
app_up 1
接入 Prometheus 并验证
Exporter 本身只是数据出口,必须被 Prometheus 主动抓取才能生效。
- Kubernetes 环境下,用
ServiceMonitor或PodMonitorCRD 声明目标,Operator 自动注入配置 - 传统环境,在
prometheus.yml的scrape_configs中添加 job,指定static_configs或file_sd_configs - 验证方法:直接
curl http://your-exporter:9101/metrics查看输出格式是否合规;再进 Prometheus Web UI 的Graph页面,输入指标名看是否有数据点

















