如何在Prometheus告警邮件中添加节点主机名(含IP和端口)
在Prometheus告警邮件中同时显示节点主机名、IP和端口
要实现这个需求,核心是让Prometheus的告警规则能获取到节点主机名标签,以下是两种可行方案:
方案一:通过关联node_exporter内置指标获取主机名
node_exporter默认会暴露node_uname_info指标,其中包含nodename标签(对应节点主机名)。我们可以通过PromQL的标签关联,把主机名标签附加到up指标上:
- 修改告警规则的
expr语句,用group_left关联node_uname_info:
- alert: instance_down expr: 'up{job="node_exporter"} == 0 * on(instance) group_left(nodename) node_uname_info{job="node_exporter"}' for: 1m labels: severity: critical annotations: title: 'Instance {{ $labels.nodename }} ({{ $labels.instance }}) down' description: >- Node {{ $labels.nodename }} ({{ $labels.instance }}) of job {{ $labels.job }} has been down for more than 1 minute.
这样$labels.nodename就能直接调用节点主机名,同时保留$labels.instance的IP:端口格式。
方案二:让node_exporter直接携带主机名标签
修改node_exporter的启动参数,添加自定义主机名标签,这样所有暴露的指标都会自带主机名:
- 启动node_exporter时添加
--labels参数(要求node_exporter版本≥0.18):
./node_exporter --labels="nodename=$(hostname)"
- 无需修改告警的
expr,直接在annotations中引用$labels.nodename:
- alert: instance_down expr: 'up{job="node_exporter"} == 0' for: 1m labels: severity: critical annotations: title: 'Instance {{ $labels.nodename }} ({{ $labels.instance }}) down' description: >- Node {{ $labels.nodename }} ({{ $labels.instance }}) of job {{ $labels.job }} has been down for more than 1 minute.
两种方案都能实现同时显示主机名、IP和端口的需求,你可以根据现有部署环境选择合适的方式。
内容的提问来源于stack exchange,提问作者iamsumesh
相关产品推荐
相关产品推荐

