如何在Grafana+Loki中基于logFmt日志提取繁忙应用实例指标
解决方案
1. 每秒繁忙实例数(时间序列可视化)
使用以下LogQL查询,可统计每秒处于繁忙状态的应用实例总数:
accumulate(sum_over_time( ({job="你的应用任务名"} |= `logfmt` |= `msg="Started processing request"` or |= `msg="Completed processing request"` | label_format delta=if(msg="Started processing request", "1", "-1") | unwrap delta | to_value )[1s:1s] ))
说明:
- 替换
{job="你的应用任务名"}为你实际的Loki日志标签筛选条件 - 先过滤出所有请求开始/结束的日志,给开始事件标记
delta=1、结束事件标记delta=-1 - 按1秒窗口聚合求和,再通过
accumulate函数累计计算当前的繁忙实例总数
2. 每个实例的繁忙时间区间(状态时间线可视化)
使用以下LogQL查询,配合Grafana的State Timeline面板,可直观展示每个实例的繁忙/空闲时间段:
{job="你的应用任务名"} |= `logfmt` |= `msg="Started processing request"` or |= `msg="Completed processing request"` | logfmt | label_format status=if(msg="Started processing request", "busy", "idle")
面板配置提示:
- 选择
State Timeline面板类型 - 在
Group by选项中选择instance.id,将数据按实例分组 - 可自定义
busy/idle状态的显示颜色,更清晰区分实例状态
如果需要精准查看每个请求的处理时间区间,可使用join配对每个实例的开始/结束日志:
join on(instance.id) ( {job="你的应用任务名"} |= `logfmt` |= `msg="Started processing request"` | logfmt | label_format start_time=`{{.time}}` , {job="你的应用任务名"} |= `logfmt` |= `msg="Completed processing request"` | logfmt | label_format end_time=`{{.time}}` )
该查询会输出每个实例的请求开始/结束时间,适合在Table面板中查看或导出。
内容的提问来源于stack exchange,提问作者V.Lorz
相关产品推荐
相关产品推荐

