Grafana/Timestream:如何可视化某些事件随时间变化的数量
Grafana/Timestream: how to visualize number of certain events over time
我是 Grafana 和 Timestream 的新手,想了解它们是否适合我的需求。
我的目标是可视化日志中的一些特定事件。
我有一个字段代表会话 ID (cmcd_sid) 和一些指标 - cmcd_bs:
cmcd_sid cmcd_bs <other fields>
"78b459fc-9fab-4286-8840-8f1420f528da" -
"78b459fc-9fab-4286-8840-8f1420f528da" -
"78b459fc-9fab-4286-8840-8f1420f528da" true
所以我需要的是获取并可视化超过 1% cmcd_bs=true
的会话数 (cmcd_sid)
WITH total_requests AS (
SELECT cast (count(*) as double) as CNT_TOTAL, cmcd_sid as SID_TOTAL FROM $__database.$__table
WHERE cmcd_sid is not NULL
AND time > ago(3h)
GROUP BY cmcd_sid
), bs_requests AS (
SELECT cast (count(*) as double) as CNT_BS, cmcd_sid as SID_BS FROM $__database.$__table
WHERE cmcd_bs is not NULL
AND time > ago(3h)
GROUP BY cmcd_sid
)
SELECT count(DISTINCT SID_BS), SID_BS
FROM total_requests, bs_requests
WHERE SID_TOTAL = SID_BS
AND CNT_BS / CNT_TOTAL * 100 > 1
GROUP BY SID_B
我写了一个查询给了我这些会话,但是当我尝试在 Grafana 中可视化它时,它抛出“数据没有时间字段”
理想情况下,我想要一个图表来描述我在一段时间内有多少这样的会话,但不确定如何将时间字段合并到查询中?
1。可视化类型
Grafana中的时间序列图需要时间字段,可以在右上角选择其他可视化类型版本面板。超过 1% 的会话总数 cmcd_bs = true
,似乎是一个数字。如果是这样,您可以选择图表类型“Stat”或“Gauge”。
2。时间流查询
注意:
- 查询中的最后一个分组依据没有影响,因为 2 个 CTE 已按此列分组。
- 您可以将 2 个 CTE 合并为一个,因为它们按相同的键分组。
cmcd_bs is not NULL
不等同于 cmcd_bs = true
因此,您可以重写您的查询:
WITH
session_stats AS (
SELECT
cmcd_sid,
SUM(CAST(cmcd_bs AS INT)) / CAST(COUNT(*) AS DOUBLE) AS true_bs_rate
FROM $__database.$__table
WHERE
cmcd_sid IS NOT NULL
AND time > ago(3h)
GROUP BY cmcd_sid
)
SELECT
COUNT(*) AS high_true_bs_rate_session_count
FROM session_stats
WHERE true_bs_rate > 0.01
3。时间过滤器
您的查询中有固定时间过滤器 time > ago(3h)
。因此,如果您在 Grafana 中更改时间段,该值不会更改(您可以 select 主仪表板右上角的时间段)。要仅计算 Grafana 中定义的时间段内的记录,您必须将 $__timeFilter
传递给您的查询:
WITH
session_stats AS (
SELECT
cmcd_sid,
SUM(CAST(cmcd_bs AS INT)) / CAST(COUNT(*) AS DOUBLE) AS true_bs_rate
FROM $__database.$__table
WHERE
cmcd_sid IS NOT NULL
AND $__timeFilter
GROUP BY cmcd_sid
)
SELECT
COUNT(*) AS high_true_bs_rate_session_count
FROM session_stats
WHERE true_bs_rate > 0.01
4。时间序列可视化
如果您想要的不是单个值,而是每日(或每周、每月...)随时间推移的演变。您可以按所需时间段分组,而不是对整个数据集进行聚合:
WITH
session_stats AS (
SELECT
cmcd_sid,
MIN(time) AS session_start_time,
SUM(CAST(cmcd_bs AS INT)) / CAST(COUNT(*) AS DOUBLE) AS true_bs_rate
FROM $__database.$__table
WHERE
cmcd_sid IS NOT NULL
GROUP BY cmcd_sid
HAVING
MIN(time) >= from_milliseconds(${__from})
AND MIN(time) < from_milliseconds(${__to})
)
SELECT
DATE_TRUNC('day', session_start_time) AS day,
COUNT(*) AS high_true_bs_rate_session_count
FROM session_stats
WHERE true_bs_rate > 0.01
GROUP BY DATE_TRUNC('day', session_start_time)
注意:会话可能会被 $__timeFilter
截断并且 cmcd_bs = true
的计数对于这些会话会有偏差,这就是为什么时间过滤器在第一个之后完成的原因通过...分组。这也适用于其他查询。
我是 Grafana 和 Timestream 的新手,想了解它们是否适合我的需求。
我的目标是可视化日志中的一些特定事件。
我有一个字段代表会话 ID (cmcd_sid) 和一些指标 - cmcd_bs:
cmcd_sid cmcd_bs <other fields>
"78b459fc-9fab-4286-8840-8f1420f528da" -
"78b459fc-9fab-4286-8840-8f1420f528da" -
"78b459fc-9fab-4286-8840-8f1420f528da" true
所以我需要的是获取并可视化超过 1% cmcd_bs=true
WITH total_requests AS (
SELECT cast (count(*) as double) as CNT_TOTAL, cmcd_sid as SID_TOTAL FROM $__database.$__table
WHERE cmcd_sid is not NULL
AND time > ago(3h)
GROUP BY cmcd_sid
), bs_requests AS (
SELECT cast (count(*) as double) as CNT_BS, cmcd_sid as SID_BS FROM $__database.$__table
WHERE cmcd_bs is not NULL
AND time > ago(3h)
GROUP BY cmcd_sid
)
SELECT count(DISTINCT SID_BS), SID_BS
FROM total_requests, bs_requests
WHERE SID_TOTAL = SID_BS
AND CNT_BS / CNT_TOTAL * 100 > 1
GROUP BY SID_B
我写了一个查询给了我这些会话,但是当我尝试在 Grafana 中可视化它时,它抛出“数据没有时间字段”
理想情况下,我想要一个图表来描述我在一段时间内有多少这样的会话,但不确定如何将时间字段合并到查询中?
1。可视化类型
Grafana中的时间序列图需要时间字段,可以在右上角选择其他可视化类型版本面板。超过 1% 的会话总数 cmcd_bs = true
,似乎是一个数字。如果是这样,您可以选择图表类型“Stat”或“Gauge”。
2。时间流查询
注意:
- 查询中的最后一个分组依据没有影响,因为 2 个 CTE 已按此列分组。
- 您可以将 2 个 CTE 合并为一个,因为它们按相同的键分组。
cmcd_bs is not NULL
不等同于cmcd_bs = true
因此,您可以重写您的查询:
WITH
session_stats AS (
SELECT
cmcd_sid,
SUM(CAST(cmcd_bs AS INT)) / CAST(COUNT(*) AS DOUBLE) AS true_bs_rate
FROM $__database.$__table
WHERE
cmcd_sid IS NOT NULL
AND time > ago(3h)
GROUP BY cmcd_sid
)
SELECT
COUNT(*) AS high_true_bs_rate_session_count
FROM session_stats
WHERE true_bs_rate > 0.01
3。时间过滤器
您的查询中有固定时间过滤器 time > ago(3h)
。因此,如果您在 Grafana 中更改时间段,该值不会更改(您可以 select 主仪表板右上角的时间段)。要仅计算 Grafana 中定义的时间段内的记录,您必须将 $__timeFilter
传递给您的查询:
WITH
session_stats AS (
SELECT
cmcd_sid,
SUM(CAST(cmcd_bs AS INT)) / CAST(COUNT(*) AS DOUBLE) AS true_bs_rate
FROM $__database.$__table
WHERE
cmcd_sid IS NOT NULL
AND $__timeFilter
GROUP BY cmcd_sid
)
SELECT
COUNT(*) AS high_true_bs_rate_session_count
FROM session_stats
WHERE true_bs_rate > 0.01
4。时间序列可视化
如果您想要的不是单个值,而是每日(或每周、每月...)随时间推移的演变。您可以按所需时间段分组,而不是对整个数据集进行聚合:
WITH
session_stats AS (
SELECT
cmcd_sid,
MIN(time) AS session_start_time,
SUM(CAST(cmcd_bs AS INT)) / CAST(COUNT(*) AS DOUBLE) AS true_bs_rate
FROM $__database.$__table
WHERE
cmcd_sid IS NOT NULL
GROUP BY cmcd_sid
HAVING
MIN(time) >= from_milliseconds(${__from})
AND MIN(time) < from_milliseconds(${__to})
)
SELECT
DATE_TRUNC('day', session_start_time) AS day,
COUNT(*) AS high_true_bs_rate_session_count
FROM session_stats
WHERE true_bs_rate > 0.01
GROUP BY DATE_TRUNC('day', session_start_time)
注意:会话可能会被 $__timeFilter
截断并且 cmcd_bs = true
的计数对于这些会话会有偏差,这就是为什么时间过滤器在第一个之后完成的原因通过...分组。这也适用于其他查询。