能否在Grafana中按时间维度以百分比形式展示基于Zabbix指标的网站可用性(SLA)?
如何在Grafana中将Zabbix的Web应用可用性指标转为百分比展示(带时间维度)
当然可以实现!这是监控Web服务时非常常见的需求,我之前配置过类似的场景,给你一步步拆解怎么做:
核心逻辑先理清楚
你的指标规则是:0=服务正常(up),1=服务宕机(down)。那可用性百分比的本质就是**「正常运行时间占总时间的比例 × 100」**,我们只需要把原始指标转成这个逻辑就行,同时保留时间维度的趋势。
方式一:Grafana直接计算推荐,无需修改Zabbix配置
这种方式最灵活,不用动Zabbix的采集规则,直接在Grafana查询层处理:
拉取原始指标
确保Grafana已经连接好Zabbix数据源,新建面板后选择Zabbix数据源,找到你的两个Web应用可用性指标(比如命名为web_app1_availability、web_app2_availability)。编写转换查询表达式
因为原始值0代表正常,我们需要先把它转成「正常占比」,再换算成百分比:- 用
1 - $value把0转为1(100%正常),1转为0(0%正常) - 用
rate()函数计算时间粒度内的平均占比,再乘以100得到百分比 - 最终的查询语句可以写成:
这里的100 * (1 - rate(web_app1_availability[$__rate_interval]))$__rate_interval是Grafana的内置变量,会根据面板的时间范围自动适配最佳粒度,比固定写5m或10m要智能得多。
- 用
配置面板展示时间趋势
- 选择「折线图」或「面积图」作为面板类型,这样就能直观看到可用性百分比随时间的波动
- 在面板的「显示」设置里,把Y轴单位改成「百分比(%)」,数值会自动以百分比格式展示
- 如果要同时展示两个应用,直接在面板里添加第二个查询,对应第二个指标,再给每个查询设置清晰的图例(比如「Web应用1 可用性」)
方式二:Zabbix预处理指标可选
如果你希望数据源本身就输出百分比值,也可以在Zabbix里创建衍生指标:
- 在Zabbix中新建一个计算型Item,基于原始的可用性指标,公式设置为:
100 - (last("web_app1_availability") * 100) - 这样Zabbix会直接采集并存储百分比格式的可用性数据,之后在Grafana里直接拉取这个指标,选折线图就能看到时间维度的趋势了。
额外优化小技巧
- 若想查看某个时间段的整体平均可用性(比如过去24小时),可以添加一个「统计面板」,用
avg()函数计算:avg(100 * (1 - rate(web_app1_availability[24h]))) - 可以给面板设置阈值告警:比如当可用性低于99%时,折线或面板背景变红,快速识别异常状态
内容的提问来源于stack exchange,提问作者Infestor




