如何在Prometheus指标中添加自定义键值对并替换实例IP为服务器名
实现Prometheus指标实例IP替换为服务器名称的方案
当然可以实现!Prometheus自带的标签重写机制完全能搞定你的需求,下面给你两种实用方案,按需选择就行:
方案1:添加自定义server_name标签(推荐)
这种方式会保留原instance标签的IP信息,同时新增server_name字段,既不丢失原始数据,又能直观看到服务器名称。修改Prometheus的配置文件(通常是prometheus.yml),在node_exporter的抓取配置里加入relabel_configs:
scrape_configs: - job_name: "node_exporter" static_configs: - targets: ["10.21.88.12:9100", "10.21.88.13:9100"] # 你的node_exporter实例列表 relabel_configs: # 给10.21.88.12:9100添加server_name=ServerA - source_labels: [__address__] regex: "10\\.21\\.88\\.12:9100" target_label: server_name replacement: "ServerA" # 给10.21.88.13:9100添加server_name=ServerB - source_labels: [__address__] regex: "10\\.21\\.88\\.13:9100" target_label: server_name replacement: "ServerB"
配置解释:
__address__是Prometheus内置的标签,存储目标实例的IP:端口regex用来匹配特定的实例地址(注意正则里的.要转义成\\.)target_label指定要新增的标签名replacement设置标签对应的服务器名称
方案2:直接替换instance标签
如果你希望完全把instance字段换成服务器名称,可以用同样的relabel_configs修改instance标签:
scrape_configs: - job_name: "node_exporter" static_configs: - targets: ["10.21.88.12:9100", "10.21.88.13:9100"] relabel_configs: - source_labels: [__address__] regex: "10\\.21\\.88\\.12:9100" target_label: instance replacement: "ServerA" - source_labels: [__address__] regex: "10\\.21\\.88\\.13:9100" target_label: instance replacement: "ServerB"
进阶:用文件服务发现批量管理(适合多服务器场景)
如果你的服务器数量较多,逐个写正则匹配会很繁琐,推荐用文件服务发现来管理实例和标签:
- 创建一个JSON文件(比如
nodes.json),内容如下:
[ { "targets": ["10.21.88.12:9100"], "labels": { "server_name": "ServerA" } }, { "targets": ["10.21.88.13:9100"], "labels": { "server_name": "ServerB" } } ]
- 修改Prometheus配置,用
file_sd_configs替换原来的static_configs:
scrape_configs: - job_name: "node_exporter" file_sd_configs: - files: ["/path/to/your/nodes.json"] # 替换成你的JSON文件路径 # 如果需要把server_name替换成instance标签,加上这段 relabel_configs: - source_labels: [server_name] target_label: instance replacement: "$1"
这种方式的好处是,新增或修改服务器时,只需要更新JSON文件,不用改Prometheus主配置,维护起来更高效。
生效验证
修改配置后,记得重启Prometheus或者发送热加载请求让配置生效:
curl -X POST http://<你的Prometheus地址>:9090/-/reload
之后打开Prometheus的查询页面,输入up{job="node_exporter"},就能看到带有server_name标签(或替换后的instance标签)的指标了。
内容的提问来源于stack exchange,提问作者gowtham rajeevswaroop
相关产品推荐
相关产品推荐

