如何在Grafana中展示近一个月服务器/服务正常运行时间占比
在Grafana中展示过去一个月服务器正常运行时间占比配置方法
首先你给出的uptime % = ( up / down ) * 100公式存在逻辑错误:当down值为0时会直接触发除零报错,且公式没有结合时间维度统计时长占比。正常运行时间占比的正确计算逻辑是统计周期内服务正常运行总时长 / 统计周期总时长 * 100,基于Node Exporter上报的标准指标即可快速实现,配置步骤如下:
确认基础指标状态
Node Exporter默认会上报up指标作为实例存活标识:服务正常运行、采集链路通畅时指标值为1,服务宕机、采集失败时指标值为0,只要Prometheus可以正常拉取到该指标就可以开展后续配置。编写PromQL查询语句
计算固定30天周期的正常运行时间占比,使用如下查询语句:avg_over_time(up{job="替换为你的node_exporter对应job名"}[30d]) * 100语句说明:
avg_over_time()函数会计算指定时间范围内所有采样点的平均值,由于up指标只有0和1两个取值,计算出的平均值恰好等于正常运行时长占统计周期总时长的比例- 大括号内的标签可以按需筛选:如果要统计单台服务器的数据,补充
instance="对应服务器IP:9100"标签即可;如果要统计所有节点,去掉标签筛选条件即可 - 乘以100是为了输出符合日常使用习惯的百分比数值
如果需要适配Grafana右上角的全局时间选择器,不需要写死30天的固定周期,将时间范围替换为Grafana内置变量即可:
配置后会自动匹配你选择的时间范围计算占比,选30天就输出月统计值,选7天就输出周统计值。avg_over_time(up{job="替换为你的node_exporter对应job名"}[$__range]) * 100Grafana面板配置
- 新建面板,单值展示推荐选择
Stat面板类型,多实例对比推荐选择Table类型,需要展示占比变化趋势可以选择Time series类型 - 在查询配置页选择对应的Prometheus数据源,粘贴上述编写好的PromQL语句
- 在右侧面板配置栏找到Standard options分类,将Unit设置为
Percent (0-100) - 可按需配置阈值规则:比如正常运行占比低于99.9%时显示黄色告警、低于99%时显示红色告警,快速识别异常节点
- 多实例场景下,将查询的Legend设置为
{{instance}},面板会自动按实例名称区分展示数据
- 新建面板,单值展示推荐选择
特殊场景适配
如果统计周期内存在服务完全停摆、无任何指标上报的时段,上述语句默认不会将无数据时段计入停机时间。如果业务上需要把无数据时段也判定为停机,可以使用如下语句补零后再计算:avg_over_time( (up{job="替换为你的node_exporter对应job名"} or vector(0))[$__range:1m] ) * 100
内容的提问来源于stack exchange,提问作者Mohammad Reza Mousavi
相关产品推荐
相关产品推荐

