微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 Clikhouse 到 grafana 的供应商指标

如何解决从 Clikhouse 到 grafana 的供应商指标

大家好,我在向 grafana 添加监视器时遇到了这样的问题,其中包含有关供应商对 clickhouse 数据库的请求状态的指标。 我需要状态 = 200 或! = 200 返回时间表。

我们希望当条件 - count (CASE WHEN StatusRes! = '200' THEN 1 END) 满足时,我们将显示请求状态不是 200 的供应商的数据,但如果 - count (CASE WHEN StatusRes 0 = '200' THEN 1 END ) 只有请求状态为 200 的供应商。

但实际上请求处理错误(所有状态都返回200和500),不知道为什么。

这是查询本身,我们将在 grafana 中使用它来获取指标:

    SELECT
    $timeSeries as t,StatusRes,count(CASE WHEN StatusRes != '200' THEN 1 END),count(CASE WHEN StatusRes == '200' THEN 1 END),Provider
FROM $table

WHERE $timeFilter

GROUP BY
    t,Provider
ORDER BY
    t,Provider

解决方法

count( col ) -- 计算 ROWS 的数量,其中 col 不为空。这不是关于 CH,而是关于 ANSI SQL。

你实际上应该使用 countIf

    StatusRes,countIf(StatusRes != '200'),countIf(StatusRes == '200'),Provider

或总和

    sum(StatusRes != '200'),sum(StatusRes == '200'),

create table XX(a Int64,StatusRes String) Engine=Memory;

INSERT INTO XX SELECT
    number,['200','500','400'][(rand() % 3) + 1]
FROM numbers(1000);


SELECT
    sum(StatusRes = '200'),sum(StatusRes != '200')
FROM XX

┌─sum(equals(StatusRes,'200'))─┬─sum(notEquals(StatusRes,'200'))─┐
│                           321 │                              679 │
└───────────────────────────────┴──────────────────────────────────┘



SELECT
    countIf(StatusRes = '200'),countIf(StatusRes != '200')
FROM XX
┌─countIf(equals(StatusRes,'200'))─┬─countIf(notEquals(StatusRes,'200'))─┐
│                               321 │                                  679 │
└───────────────────────────────────┴──────────────────────────────────────┘

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。