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

如何在Prometheus告警规则中使用windows_exporter的hostname标签?

解决Windows Exporter告警中无法使用hostname标签的问题

问题根源

实例down的告警一般基于up指标,而windows_exporter的up指标默认仅包含job、instance标签,hostname标签只存在于windows_cs_hostname这类由cs采集器生成的指标中,因此直接在告警规则中引用$labels.hostname会无法获取到值。

解决方案

方案1:通过PromQL关联hostname标签(推荐)

修改告警规则的PromQL查询语句,使用group_left将windows_cs_hostname的hostname标签关联到up指标结果中,这样告警标签里就会包含hostname:

groups:
- name: instance_down
  rules:
  - alert: InstanceDown
    expr: up{job=~"node_exporter|windows_exporter"} == 0 * on(instance) group_left(hostname) windows_cs_hostname{job="windows_exporter"} or up{job="node_exporter"} == 0
    for: 1m
    annotations:
      summary: "{{ $labels.hostname }} instance is down"

解释:

  • 对windows_exporter的up指标,通过on(instance) group_left(hostname)关联同实例下的windows_cs_hostname指标,把hostname标签合并进来
  • 保留node_exporter的原有逻辑,因为它本身的up指标已经带有hostname标签

方案2:在注释中做兼容处理(无需修改PromQL)

如果不想调整PromQL,可以在告警注释里使用条件判断,优先使用hostname标签,若不存在则自动去除instance中的端口号:

annotations:
  summary: "{{ if $labels.hostname }}{{ $labels.hostname }}{{ else }}{{ reReplaceAll ":.*" "" $labels.instance }}{{ end }} instance is down"

解释:

  • reReplaceAll ":.*" "" $labels.instance会把instance中:及后面的端口号去掉,只保留IP或主机名

注意事项

确保windows_exporter已经启用了cs采集器(默认是启用的,如果没启用需要在启动参数中添加--collectors.enabled=cs,...),否则windows_cs_hostname指标不会生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 17:02:39