如何在Grafana中合并查询计算Loki日志的任务执行耗时
合并表格并计算任务执行耗时的方案
一、用Grafana Transform功能关联两个查询结果
- 在面板中保留你已有的两个PromQL查询(分别对应START、END状态),确保两者都包含
threadId、keyID、task、epoch字段。 - 点击面板顶部的Transform按钮,添加第一个转换规则:
- 选择「Add field from calculation」,将第一个查询的
epoch字段重命名为start_epoch;对第二个查询执行同样操作,把epoch重命名为end_epoch。
- 选择「Add field from calculation」,将第一个查询的
- 添加第二个转换规则:
- 选择「Join」类型,设置关联键为
threadId、keyID、task三个字段,让两个查询结果通过这组唯一标识精准匹配。 - 根据需求选择关联方式:「Inner join」只保留同时有START和END记录的任务;「Outer join」会包含缺失对应状态的任务。
- 选择「Join」类型,设置关联键为
二、计算任务执行耗时
合并数据后,继续添加转换规则完成耗时计算:
- 添加「Add field from calculation」类型的转换,设置:
- 计算方式选「Binary operation」
- 第一个字段选
end_epoch,第二个字段选start_epoch - 操作符选「Subtract」(减法)
- 新字段命名为
duration(耗时单位由你的EPOCH精度决定,比如秒/毫秒)
- 可选:如果需要转换单位(如毫秒转秒),再添加一次「Add field from calculation」,用
duration除以对应系数(如1000),命名为duration_seconds。
三、优化面板展示
- 切换到「Panel options」,选择表格展示模式,调整列顺序,把
task、threadId、keyID、duration放在显眼位置。 - 给
duration列设置格式化规则:比如指定单位(秒/毫秒),或添加条件格式化(耗时超过阈值时标红)。 - 可选:如果需要按任务维度统计,添加「Group by」类型的转换,分组字段选
task,对duration计算平均值、最大值等聚合结果。
四、关键注意事项
- 确保两个查询的
threadId、keyID、task字段格式完全一致(包括大小写、数据类型),否则关联会失败。 - 若同一任务组合存在多条START/END记录,先通过「Reduce」类型转换去重:分组字段选三个关联键,对
epoch取最大值(最新时间)或最小值(最早时间)。
内容的提问来源于stack exchange,提问作者Klaus
相关产品推荐
相关产品推荐

