基于Loki日志在Grafana中构建请求计数与耗时统计图表
解决方案
1. 提取日志中的耗时数值
你的日志格式固定,末尾的[数字] ms是请求耗时,用Loki的pattern函数可以直观提取并转为数值类型,方便后续计算:
{job="你的Docker应用job名"} |= "Application - GET /programs/statement" | pattern `<app> - <method> <path> <params> <status> <status_text> <duration:int> ms`
其中<duration:int>会自动把提取到的耗时字符串转为整数,为聚合计算做准备。
2. 计算请求耗时的最小值/最大值
提取出耗时字段后,用Loki的时间聚合函数就能得到指定时间窗口内的极值:
最大耗时查询
max_over_time( {job="你的Docker应用job名"} |= "Application - GET /programs/statement" | pattern `<app> - <method> <path> <params> <status> <status_text> <duration:int> ms` | unwrap duration [1m] ) by (job)
unwrap duration:将提取的duration字段从日志流解析为可计算的数值max_over_time([1m]):按1分钟时间窗口,计算每个窗口内的最大耗时by (job):可根据需求替换为method、status等维度,实现分组统计
最小耗时查询
把max_over_time替换为min_over_time即可:
min_over_time( {job="你的Docker应用job名"} |= "Application - GET /programs/statement" | pattern `<app> - <method> <path> <params> <status> <status_text> <duration:int> ms` | unwrap duration [1m] ) by (job)
3. Grafana图表配置
- 图表类型选择:用折线图展示耗时随时间的变化趋势,用统计面板直接展示当前的最小/最大值
- 多指标同屏:在同一面板添加三个查询(记录数、最小耗时、最大耗时),即可同时查看三类数据
- 时间窗口调整:根据业务需求修改
[1m]为[5m]、[1h]等,适配不同粒度的监控需求
补充:记录数统计(参考格式)
和耗时查询统一格式的记录数统计写法:
count_over_time( {job="你的Docker应用job名"} |= "Application - GET /programs/statement" [1m] ) by (job)
内容的提问来源于stack exchange,提问作者bimonih260
相关产品推荐
相关产品推荐

