如何为Prometheus创建自定义ETCD指标并修改ETCD暴露的原有指标
ETCD自定义Prometheus指标相关问题解答
核心结论
ETCD本身不支持在不修改源码的前提下新增、修改原生暴露的Prometheus指标,它的所有内置指标都是源码层面硬编码实现的,目前没有提供可供用户自定义指标的配置入口。
可行的落地方案
- 方案一:开发自定义ETCD exporter
不需要改动ETCD本身,你可以基于官方ETCD exporter做二次开发,或者自己写一个轻量的自定义exporter。在exporter中调用ETCD的开放API拉取你需要的业务数据,直接生成符合Prometheus格式的指标对外暴露端口,Prometheus直接采集该exporter的端点即可。这种方案比你现在使用etcdctl写本地文件再采集的方案效率更高,也不需要处理本地文件落盘、定时任务调度、文件脏数据等额外问题。 - 方案二:配合node exporter的textfile收集器实现(你现有方案的优化版)
如果你不想额外维护新的服务,可以直接用这个方案:写一个定时执行的脚本,用etcdctl拉取需要的自定义数据,按照Prometheus指标规范格式化后写入指定目录下的.prom文件,开启了textfile收集器的node exporter会自动读取该文件内的指标并对外暴露。注意给脚本加异常校验,避免输出格式错误的指标导致采集失败。 - 方案三:修改ETCD源码(非必要不推荐)
如果必须要让自定义指标和ETCD原生指标在同一个端口暴露,可以拉取对应版本的ETCD源码,在其内部的Prometheus指标注册逻辑中添加你需要的自定义指标逻辑,编译后替换集群的ETCD二进制即可。但该方案后续ETCD版本升级需要重新适配你的改动,维护成本极高,还可能引入稳定性风险,没有特殊需求不要选择。
方案选择建议
- 自定义指标实时性要求高、查询逻辑复杂的场景,优先选择自定义exporter方案
- 仅需简单定制指标、不想额外维护服务的场景,textfile收集器方案完全可以满足需求
内容的提问来源于stack exchange,提问作者Martin Parsons
相关产品推荐
相关产品推荐

