Prometheus中基于IPMI Exporter筛选HP服务器高温查询问题排查
问题排查与解决方案
核心问题:指标标签不匹配导致关联失败
你的查询用and同时过滤ipmi_bmc_info和ipmi_temperature_celsius两个指标,但Prometheus的and操作要求两边的时间序列所有标签完全一致才能匹配。ipmi_bmc_info(BMC信息指标)通常只有服务器级别的标签(比如instance、manufacturer_id),而ipmi_temperature_celsius(温度指标)会额外包含传感器级别的标签(比如name),两者标签集不重合,所以and会直接过滤掉所有结果。
正确的查询写法
要实现按制造商区分阈值的温度告警,需要用group_left关联两个指标的共同标签(比如instance,代表单台服务器),把制造商信息关联到温度序列上,再分别设置阈值:
ipmi_temperature_celsius{job="ipmi",name=~"02-CPU.*"} * on(instance) group_left(manufacturer_id) ipmi_bmc_info{job="ipmi"} > on(instance,manufacturer_id) group_left() ( ipmi_bmc_info{job="ipmi",manufacturer_id="Hewlett-Packard (11)"} * 40 or ipmi_bmc_info{job="ipmi",manufacturer_id="Supermicro (10876)"} * 50 )
写法说明
- 先获取CPU温度序列,用
name=~"02-CPU.*"匹配所有CPU传感器(避免仅匹配单个CPU 1) - 通过
on(instance) group_left(manufacturer_id)将ipmi_bmc_info中的manufacturer_id标签关联到温度序列上 - 最后用
on(instance,manufacturer_id)匹配对应制造商的阈值:HP服务器用40℃,超微用50℃
额外优化建议
- 先确认
ipmi_bmc_info的manufacturer_id值是否正确:执行ipmi_bmc_info{job="ipmi"}查看实际返回的制造商标识,比如超微可能是"Supermicro (10876)",需要和实际数据一致 - 如果只关注CPU温度,保留
name=~"02-CPU.*"的过滤;若要监控所有温度传感器,可去掉该标签过滤
内容的提问来源于stack exchange,提问作者Jairo Serrano
相关产品推荐
相关产品推荐

