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

如何基于Prometheus多低阶指标生成可扩展的高阶主机健康指标?

在Prometheus中模块化构建主机健康高阶指标host_healthy

要实现模块化的主机健康指标,最佳方式是利用Prometheus的Recording Rules,将每个健康维度的判定逻辑拆分为独立模块,最后合并为最终的host_healthy指标。这种方式既方便修改规则,也便于后续扩展新的健康维度。

一、整体思路

将每个健康判定条件拆分为单独的中间得分指标(如disk_health_score、service_health_score),每个指标对应一个维度的健康状态得分(0.0-1.0),最后通过聚合逻辑合并所有维度得分,得到最终的host_healthy指标。

二、Recording Rules配置实现

在Prometheus的配置文件(如prometheus.yml)中添加以下规则组,每个模块独立定义,便于维护:

groups:
- name: host_health_rules
  interval: 1m  # 规则计算间隔,可根据监控需求调整
  rules:
    # 模块1:磁盘空间健康得分
    - record: disk_health_score
      expr: |
        # 先计算剩余磁盘空间:1 - 已用磁盘比例
        (1 - disk_space_used) < 0.9 ? 1.0 :
        (1 - disk_space_used) > 0.99 ? 0.0 :
        0.7
      labels:
        module: disk

    # 模块2:服务在线状态健康得分
    - record: service_health_score
      expr: |
        # 所有服务在线时,sum等于count(每个service_online值为1)
        sum by (host) (service_online) == count by (host) (service_online) ? 1.0 : 0.0
      labels:
        module: service

    # 模块3:失败登录次数健康得分
    - record: login_health_score
      expr: |
        # 统计最近15分钟内的失败登录增量,少于3次得1.0,否则0.0
        increase(failed_login_attempts[15m]) < 3 ? 1.0 : 0.0
      labels:
        module: login

    # 模块4:合并所有维度得分得到最终健康指标
    - record: host_healthy
      expr: |
        # 取所有维度得分的最小值,确保任一维度不健康时整体健康状态降级
        min by (host) (
          disk_health_score,
          service_health_score,
          login_health_score
        )
      labels:
        module: combined

三、各模块说明

  1. 磁盘空间模块:

    • 通过1 - disk_space_used计算剩余磁盘空间比例
    • 按规则映射为对应得分:剩余<0.9得1.0,剩余>0.99得0.0,中间值得0.7
  2. 服务在线模块:

    • 对每个主机,统计所有service_online指标的总和与数量,若相等则所有服务在线(得1.0),否则存在离线服务(得0.0)
  3. 失败登录模块:

    • 使用increase()函数计算Counter类型指标的增量(最近15分钟),增量<3得1.0,否则得0.0
    • 可根据需求调整时间范围(如[5m]或[30m])
  4. 合并模块:

    • 使用min by (host)取所有维度得分的最小值,确保只要有一个维度不健康(得分0),整体健康状态直接变为0.0;若磁盘状态为欠佳(0.7),其他维度正常,则整体得0.7,符合规则要求

四、扩展与维护

  • 修改规则:只需修改对应模块的expr内容即可,例如调整磁盘剩余空间的阈值、失败登录的次数或时间范围
  • 新增维度:添加新的中间得分模块(如内存使用率、CPU负载),然后在合并模块的min()函数中加入新的得分指标
  • Grafana展示:直接查询host_healthy指标,使用时间线组件展示,无需在Grafana中编写复杂PromQL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 10:05:01