值为null时图表展示指标方法及Grafana无数据时显示0的配置
我来针对你的两个问题分别给出实用解决方案,都是监控可视化里很常见的场景:
处理方式主要分两类,取决于你用的数据源(比如Prometheus)和可视化工具(比如Grafana):
用数据源查询语句补全null:如果是Prometheus,直接用
fill()函数就能把null值替换成你想要的数值,比如你的指标是my_target_metric,可以写成:fill(my_target_metric, 0)这样所有原本为null的位置都会被填充为0,图表线条就不会断档。如果是想判断指标是否完全缺失,还可以用
or vector(0),确保至少返回一个0值序列。调整可视化面板的显示规则:以Grafana为例,进入面板的「编辑」界面,找到「Axes」或者「Display」选项卡下的「Null value」设置,通常有三个选项:
As zero:直接将null值渲染为0Connected:用线条连接前后非null的数据点,视觉上保持连续As null:默认的断档显示,也就是不填充
你当前的count(custom_metrics_project1<1)在没有匹配到任何样本时,Prometheus不会返回任何时间序列,这就导致Grafana提示“Points not found”。解决的核心是让查询在无匹配时强制返回一个值为0的标量,只需要修改查询语句为:
count(custom_metrics_project1 < 1) or vector(0)
原理很简单:当count(...)能查到有效结果时,就返回实际的计数值;当没有符合条件的样本时,count(...)没有输出,or逻辑就会触发后面的vector(0),返回一个值为0的标量,这样Grafana就能拿到数据,直接显示0而不是报错。
如果你的场景更复杂(比如需要区分指标完全不存在和存在但无匹配样本的情况),也可以结合absent()函数,但上面的or vector(0)是最直接高效的写法。
内容的提问来源于stack exchange,提问作者Nikolay Baranenko

