You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Grafana对接Timestream如何可视化cmcd_bs占比超1%的会话数量随时间变化

问题解决方案

你遇到的报错是因为Grafana的时序可视化面板要求返回结果必须包含时间类型字段作为X轴维度,你当前的查询仅统计了固定时间窗口内的符合条件会话,没有拆分时间维度,因此无法生成趋势图。

核心修改思路

  • 使用Timestream的date_bin函数结合Grafana内置的$__interval变量,按适配面板的时间粒度拆分时间桶
  • 两个CTE分组时同时按时间桶和会话ID分组,统计每个时间桶内每个会话的总请求量、cmcd_bs=true的请求量
  • 最终按时间桶聚合,统计每个时间桶内符合占比要求的会话数量
  • 修正原查询的两处逻辑错误:cmcd_bs过滤条件错误、GROUP BY字段笔误

修改后的查询语句

WITH total_requests AS (
    SELECT 
        date_bin($__interval, time, now()) as time_bucket,
        cast (count(*) as double) as CNT_TOTAL, 
        cmcd_sid as SID_TOTAL 
    FROM $__database.$__table
    WHERE cmcd_sid is not NULL
       AND time >= $__timeFrom
       AND time <= $__timeTo
    GROUP BY time_bucket, cmcd_sid
), bs_requests AS (
    SELECT 
        date_bin($__interval, time, now()) as time_bucket,
        cast (count(*) as double) as CNT_BS, 
        cmcd_sid as SID_BS 
    FROM $__database.$__table
    WHERE cmcd_bs = true 
       AND time >= $__timeFrom
       AND time <= $__timeTo
    GROUP BY time_bucket, cmcd_sid
)
SELECT 
    time_bucket as time,
    count(DISTINCT SID_BS) as qualified_session_count
FROM total_requests
JOIN bs_requests 
  ON total_requests.time_bucket = bs_requests.time_bucket
  AND total_requests.SID_TOTAL = bs_requests.SID_BS
WHERE CNT_BS / CNT_TOTAL * 100 > 1
GROUP BY time_bucket
ORDER BY time_bucket

额外说明

  • 原查询中使用ago(3h)固定时间范围,替换为Grafana内置的$__timeFrom和$__timeTo变量后,统计范围会自动同步面板右上角选择的时间范围,适配性更强
  • 如果你需要统计的是每个会话在整个选择时间范围内的总占比,而不是每个时间桶内的占比,可以删除CTE中的时间分桶逻辑,最终统计时用$__timeTo作为时间字段返回,配合Grafana的「统计」「仪表」等非时序面板使用
  • 如需调整统计粒度,可手动把$__interval替换为固定时间值,例如1h(按小时统计)、5m(按5分钟统计)

内容的提问来源于stack exchange,提问作者Agenobarb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 09:09:05