Exporter 生态与开发
Prometheus 的数据采集能力不限于标准协议——它通过 Exporter 的模式,将任何系统(数据库、消息队列、硬件设备)都变成可被 Prometheus 抓取的目标。Exporter 本质上是一个转换器:将目标系统的指标格式转换为 Prometheus 的 /metrics 端点格式。
社区维护着数百个官方和非官方的 Exporter,覆盖了几乎所有主流中间件和系统。理解 Exporter 的工作原理,能让你在需要时快速开发自定义 Exporter,也能让你在遇到问题时快速定位 Exporter 配置问题。
Exporter 工作原理
Exporter 的职责:
- 连接被监控目标:连接到 Redis、MySQL、K8s API 等
- 收集指标:执行查询命令、读取 API 数据
- 格式转换:将收集的数据转换为 Prometheus 文本格式
- 暴露端点:通过 HTTP 端口暴露
/metrics端点
官方 Exporter 生态
最常用的 Exporter
node_exporter 部署
node-exporter-daemonset.yaml
prometheus.yml
自定义 Exporter 开发
场景:监控自定义业务系统
假设你需要监控一个内部消息队列系统的指标。
1. 使用 Prometheus client library
custom_exporter.py
2. Java Exporter 开发
CustomExporter.java
3. 中间件方式(Java Agent)
CustomMetricsFilter.java
Exporter 配置最佳实践
1. 标签命名规范
2. 避免高基数标签
3. 合理的采集间隔
常见问题
问题一:Exporter 连接失败
问题二:指标格式错误
问题三:指标丢失
质量判断标准
读完本节后,你应该能够回答:
- Exporter 的工作原理是什么?它如何将各种系统的指标转换为 Prometheus 格式?
- 自定义 Exporter 开发有哪几种方式?分别在什么场景下适用?
- 在开发自定义 Exporter 时,如何避免高基数标签问题?低基数标签和高基数标签应该如何区分使用?
- node_exporter 在 Kubernetes 中的部署需要哪些特殊的 volume mount?为什么?
- 如果 Exporter 的
/metrics端点返回 404 或空白页面,应该从哪几个方面排查?