如何将离散事件转换为兼容Grafana State Timeline的表格?
适配Grafana State Timeline面板的KQL数据转换方案求助
需求说明
我正在使用Grafana的State Timeline面板,需要将现有日志数据转换为适配该面板的格式:
源数据格式
| TimeGenerated | playbook_name | status | runtime |
|---|---|---|---|
| 11:02 | config_backup | success | 3600 |
| 12:33 | update_inventory | success | 52 |
| 13:04 | config_backup | partial_success | 3600 |
| 14:31 | update_inventory | success | 47 |
目标数据格式
| TimeGenerated | config_backup | update_inventory |
|---|---|---|
| 11:00 | success | |
| 11:15 | success | |
| 11:30 | success | |
| 11:45 | success | |
| 12:00 | ||
| 12:15 | ||
| 12:30 | success | |
| 12:45 | ||
| 13:00 | partial_success | |
| 13:15 | partial_success | |
| 13:30 | partial_success | |
| ... |
核心需求:在任务开始时间+运行时长覆盖的时间范围内,对应任务列需标记其状态。例如config_backup任务11:02开始,运行3600秒(1小时),则11:00-12:00的每个15分钟时间块的config_backup列都标记为success。
已实现步骤
已完成15分钟间隔时间块的生成,KQL代码如下:
let _start=ago(1d); let _end=now(); let interval = 15m; let timetable = range TimeGenerated from ago(1d) to now() step 15m; log_ansible_playbook_stats_CL | union timetable
我也了解用make_series进行行列转置的方法,但卡在根据运行时长填充状态的环节。
遇到的问题
- 尝试用以下代码计算剩余运行时长,仅对单一行有效,因为KQL是整体评估而非逐行执行:
| extend runtime_s = toint(prev(runtime_s)) - 900 fillforward()函数不支持条件判断,无法在超出任务运行时长后停止填充状态。- 考虑过生成任务起止日志再用
fillforward()填充中间状态,但希望找到更优的实现方案,寻求帮助。
内容的提问来源于stack exchange,提问作者MrPoulet
相关产品推荐
相关产品推荐

