Prometheus 自定义导出器构建器
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/prometheus-custom-exporter-builder 到我的 AI 助手中。
技能介绍
解决什么问题
prom/prometheus 和官方 exporter 覆盖的是进程、节点、中间件这类通用指标,它们回答的是「这台机器/这个容器还活着吗」。当你想知道自己应用的业务语义——订单创建耗时分布、某类任务的积压深度、按租户维度划分的队列长度——默认指标往往要么不存在,要么粒度太粗,只能去看日志和 APM。
更麻烦的是指标建模本身:把一个会增长的值塞进 gauge、把一个单调递增的累计值放进 counter、给请求延迟随手设几个固定桶,都会让后续的 rate()、histogram_quantile() 算出看似合理但实际误导的曲线。排查这类问题时,经常要翻回 SDK 文档去确认 CounterVec 的标签顺序和 observe() 的调用时机。
技能如何工作
该技能围绕两个官方客户端组织构建过程,输出可直接接入现有 Prometheus 抓取链路的导出器:
- Python 路线:基于
prometheus_clientSDK,适合已经在 Python 服务里做埋点的场景,可直接复用进程内已有的运行时状态。 - Go 路线:基于
client_golang库,适合高吞吐服务,通过promhttp.Handler()暴露/metrics。
在指标定义层面,它按三类信号分别处理:
counter与标签:为累计值设计标签集(如handler、status、method),并通过CounterVec在请求路径上做labels(...).inc()。histogram与分桶:为延迟、大小这类分布型指标设置合理的 bucket 边界,而不是用默认的一串数字凑数;分桶决定了histogram_quantile()能否算出可信的 p95/p99。gauge仪表化:把当前值、在途请求数、队列深度这类可上可下的状态暴露为 gauge,并明确谁在何时调用set()。
适用边界与注意点
- 它负责的是导出器的构建与指标建模,不替代 Prometheus server 的部署、配置和长期存储方案。
- 分桶要结合实际观测范围设定。桶边界太稀疏会让直方图退化成「非空即满」,太密则会让基数失控,在抓取端和存储端都付出代价。
- 标签基数是最容易被低估的坑:不要把用户 ID、订单号、IP 这类高基数值放进 label,
cardinality膨胀会拖垮服务端。 counter的单调性假设意味着它不能用于会被重置的量(比如每秒请求数这种应换算成 rate 的原始累计值,而非直接暴露瞬时值)。- 抓取路径与端口要纳入既有的服务发现与网络策略,导出器本身只负责「提供指标」,不负责「被发现」。
截图预览
使用场景
- 为后端服务编写自定义导出器,暴露订单延迟分布与按租户划分的队列深度,供Prometheus抓取。
- 在Go高并发服务中构建导出器,使用client_golang库为请求大小分布设置合理的直方图分桶边界。
- Python应用需将内部业务累计值暴露为带handler和status标签的counter,供Prometheus定期抓取。
适合人员
- 后端工程师,需要在现有Python或Go服务中暴露自定义业务指标以完善监控体系。
- SRE,负责为缺乏通用exporter的内部中间件构建专用指标导出器并合理设计直方图分桶。
- 可观测性平台开发者,需要规范团队内部的指标命名、标签设计以及counter与gauge的使用边界。