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

求助:Grafana实现动态Worker时序图并标记红色空闲时段

在Grafana中实现动态Worker执行时序区间图

一、核心实现思路

要实现动态Y轴(每个Worker对应独立Y轴条目)+ 执行区间展示,核心是把process字段映射为动态Y轴标识,搭配Grafana的条形图(Bar Chart)或时间序列图的区间模式来呈现起止时间。

二、动态Y轴的SQL查询语句

通过窗口函数给每个唯一process分配动态整数ID,避免硬编码Y轴值:

SELECT
  process,
  execution,
  start_time AS "time",
  end_time - start_time AS "duration",
  -- 为每个process分配唯一动态Y轴ID
  DENSE_RANK() OVER (ORDER BY process) AS y_axis_id
FROM log_table
WHERE $__timeFilter(start_time) OR $__timeFilter(end_time)
ORDER BY process, start_time
  • DENSE_RANK()自动为不同process生成连续整数,实现Y轴动态适配
  • $__timeFilter适配Grafana面板的时间范围选择,过滤数据

三、Grafana面板配置

  1. 面板类型选择:优先用Bar Chart(横向布局更贴合示例图效果),也可使用Time Series面板
  2. 数据映射设置:
    • 将y_axis_id设为Y轴字段,process设为图例(Legend),让Y轴显示Worker名称而非ID
    • 用start_time作为起始时间、duration作为条形长度,或在Time Series中配置start_time和end_time为时间区间
  3. Y轴优化:
    • 开启Y轴的Labels选项,关联process字段,直接显示Worker名称
    • 关闭Y轴自动缩放,保证每个Worker条目独立展示

四、空闲时间红色标记实现

需要先生成每个Worker两次执行之间的空闲区间,再叠加到图表中:

1. 生成空闲区间的SQL查询

WITH process_executions AS (
  SELECT
    process,
    start_time,
    end_time,
    -- 获取当前执行的下一次启动时间
    LEAD(start_time) OVER (PARTITION BY process ORDER BY start_time) AS next_start
  FROM log_table
  WHERE $__timeFilter(start_time) OR $__timeFilter(end_time)
)
SELECT
  process,
  end_time AS "time",
  next_start - end_time AS "idle_duration",
  DENSE_RANK() OVER (ORDER BY process) AS y_axis_id,
  'idle' AS type
FROM process_executions
WHERE next_start IS NOT NULL AND next_start > end_time

2. Grafana叠加配置

  • 将上述查询作为第二个数据源添加到面板
  • 把该数据系列的颜色设为红色,开启填充模式,空闲区间会以红色背景显示在对应Worker条目下

五、注意事项

  • 确保process字段标识唯一,避免同一Worker被分配多个Y轴ID
  • 若Worker数量较多,可开启Grafana的Y轴滚动功能,方便查看全量条目

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:00:09