特别是对于 Singlestat 面板,将 null 视为零会很有用,否则无法为具有 null 结果的面板着色。
如果您使用 Graphite,transformNull 函数效果很好
我现在看不到后端的填充机制。
哪个是?
普罗米修斯
prometheus 有转换功能/特性吗? 我还没有尝试过(真的很想这样做,可能会添加 Prometheus 作为官方数据源插件)
一个相当不错的选择: http :
在 grafana 2.1 中,就着色而言,似乎“空”值被视为 0 值(即使空值被映射到 #1166 中的文本)。
为了使它更具挑战性:但是,如果越低越好,您可能希望在 0/1/3 上设置绿色/橙色/红色的阈值,即读取值 >3(但可能 null 也应该是红色)。 因此,空值变为绿色,但您可以争辩说它应该是红色的。
在解决这个问题时,值得与 #1319 一起考虑。 例如,它们可以通过实现文本映射的范围并为这些文本指定颜色编码来同时解决(然后间接指定值的颜色,这更灵活但可以说更麻烦)。
@torkelo我同意@feliksik 的观点,甚至将其称为错误:当我的一个受监控节点脱机时,查询其平均负载将返回 null。 由于 singlestat 面板将 null 替换为零,因此面板以绿色显示“N/A”,而实际上它应该是红色或无色(最好取决于配置选项)。
编辑:原来这个功能之前就存在 (#1130),但在 cc21c66b3a128ea680be2e491cb89f8da90b2677 中被删除。 猜猜我们可以将讨论移至#1130。
+1 我同意 @n-st 和@feliksik 的观点:目前我们的仪表板显示“红色”表示不适用,而实际上不适用意味着没有数据/没有活动,所以最好不要着色。
可以使用 OR 运算符在 Prometheus 中为null
返回 0:如果度量表达式没有返回任何内容,则exression OR on() vector(0)
将返回 0。 @pdf @torkelo
关闭它,因为大多数 TSDB 后端都有处理查询中的空值的方法
@grobie
如果表达式为空,则 OR 运算符确实可以解决此问题。 但是,在单个统计页面中,这会修复空值的颜色,但会破坏非空指标的颜色,因为它们将报告具有多个值:真实值和由您的普罗米修斯表达式添加的 {}。
我可以建议重新打开这个问题吗?
@boeboe我从上面的评论中更新了我的表达。 这个应该适合你。
说明:Prometheus 在表达式中使用标签匹配。 如果您的expression
返回任何带有标签的内容,它将与vector(0)
生成的时间序列不匹配。 为了使这成为可能,有必要通过添加on()
明确告诉 Prometheus 不要尝试匹配任何标签。
@grobie感谢您的解释。 不幸的是,Prometheus 文档没有给出关于on()
运算符使用的明确示例(https://prometheus.io/docs/querying/operators)
这是我当前的查询:
counter_services_active_sessions_responses_4xx_total{kubernetes_namespace="dev-appservicebase"} OR vector(0)
如果指标确实存在,我应该如何重写这个以避免重复(在这种情况下,微服务返回 HTTP 4xx 响应)。 现在查询返回以下 2 个结果:
counter_services_active_sessions_responses_4xx_total{instance="172.24.27.130:8081",job="Kubernetes -24-24",pod_template_hash="3210291495",type="active-sessions-type"} 1173
{} 0
@grobie 不介意我的最后一条评论,一定看到您更新了查询。 谢谢!
有人有 MySQL 的查询解决方法吗?
@TheFrogDaddy您可以在和/或与合并功能结合使用时使用选择案例。
@TheFrogDaddy您可以在和/或与合并功能结合使用时使用选择案例。
您好,感谢您这么快回复我。 我没有让它工作,我错过了什么吗?
试过这个:
SELECT
$__timeGroup(updated, '1h', 0) AS time,
COALESCE(SUM(1),0) as value,
'Errors' AS metric
FROM
mytable
WHERE
$__timeFilter(updated)
AND error_message IS NOT NULL
GROUP BY 1;
和这个
SELECT
$__timeGroup(updated, '1h', 0) AS time,
CASE ISNULL(SUM(1))
WHEN TRUE THEN 0
ELSE SUM(1)
END AS value,
'Errors' AS metric
FROM
myTable
WHERE
$__timeFilter(updated)
AND error_message IS NOT NULL
GROUP BY 1;
谢谢
可以使用 OR 运算符在 Prometheus 中为
null
返回 0:如果度量表达式没有返回任何内容,则exression OR on() vector(0)
将返回 0。 @pdf @torkelo
不要忘记激活即时选项!
说的真好
可以使用 OR 运算符在 Prometheus 中为
null
返回 0:如果度量表达式没有返回任何内容,则exression OR on() vector(0)
将返回 0。 @pdf @torkelo
好的。 兄弟
可以使用 OR 运算符在 Prometheus 中为
null
返回 0:如果度量表达式没有返回任何内容,则exression OR on() vector(0)
将返回 0。 @pdf @torkelo
这不适用于by (label)
,而这似乎有效:
expression OR up*0
sum by (label) (data_metric) - sum by (label) (nodata_metric or up*0)
这是我的 2 美分
sum(expression) by (label) -
sum(expression offset $__interval OR expression * 0) by (label)
这可以为我提供目标区间中 2 表达式的差异。 如果时间序列不存在,则考虑值为 0 进行计算
最有用的评论
可以使用 OR 运算符在 Prometheus 中为
null
返回 0:如果度量表达式没有返回任何内容,则exression OR on() vector(0)
将返回 0。 @pdf @torkelo