You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Prometheus relabel配置中拼接EC2实例标签生成实例名?

实现Prometheus EC2实例名的多标签拼接重标记

没问题,这个需求在Prometheus的relabel配置里完全可以实现,核心是利用source_labels数组指定多个源标签,再通过replacement参数来拼接它们的内容。

基础实现:拼接Name标签和私有IP

你原来的配置只使用了单个源标签,现在只需要修改source_labels为包含__meta_ec2_tag_Name和__meta_ec2_private_ip的数组,然后在replacement里用占位符对应每个源标签的值,用冒号连接起来即可:

relabel_configs:
- source_labels: ['__meta_ec2_tag_Name', '__meta_ec2_private_ip']
  target_label: 'instance'
  replacement: '${1}:${2}'

这里的${1}会替换成第一个源标签(__meta_ec2_tag_Name)的值,${2}对应第二个源标签(__meta_ec2_private_ip)的值,最终就会生成你想要的portal-service:10.0.19.98格式的实例名。

扩展:添加更多标签

如果后续需要拼接更多标签(比如EC2实例ID),只需要扩展source_labels数组,并在replacement里增加对应的占位符即可:

relabel_configs:
- source_labels: ['__meta_ec2_tag_Name', '__meta_ec2_private_ip', '__meta_ec2_instance_id']
  target_label: 'instance'
  replacement: '${1}:${2}:${3}'

健壮性优化:处理无Name标签的实例

如果你的EC2实例存在没有设置Name标签的情况,直接拼接会得到类似:10.0.19.98的不美观结果。可以先给这类实例设置一个默认名称,再进行拼接:

relabel_configs:
# 第一步:给无Name标签的实例设置默认名称
- source_labels: ['__meta_ec2_tag_Name']
  target_label: 'temp_instance_name'
  replacement: 'unnamed-ec2-instance'
# 第二步:拼接默认名称和私有IP
- source_labels: ['temp_instance_name', '__meta_ec2_private_ip']
  target_label: 'instance'
  replacement: '${1}:${2}'

这样即使实例没有Name标签,也会生成unnamed-ec2-instance:10.0.19.98这样的有效实例名。

内容的提问来源于stack exchange,提问作者Vova Rozhkov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:00:15