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

能否在Loki/Grafana中对日志行内数值进行求和?

如何用Loki/Grafana对日志内的指定数值求和?

问题背景

现有日志行如下:

01/02/2022 - my log line - arbitrary number: 40
02/02/2022 - another log line - arbitrary number: 60

需要在Grafana或Loki中将日志里的arbitrary number对应的数值求和得到结果100。实际场景中存在多标签,每个标签对应数千条日志,需制作仪表盘展示每个标签下该类数值的总和。查阅Loki文档后产生疑问:Loki/Grafana是否仅能处理日志流元数据,无法操作日志内的具体数值?

解决方案

当然可以操作日志内的具体数值并求和,Loki的LogQL支持解析日志内容提取字段,再结合聚合函数实现需求,步骤如下:

  • 过滤目标日志流:先通过标签或日志内容过滤出包含arbitrary number的日志,示例:

    {job="your-job-label"} |= "arbitrary number:"
    

    替换your-job-label为实际的日志流标签。

  • 提取数值字段:用正则表达式解析日志中的数值,通过命名捕获组提取目标数字:

    {job="your-job-label"} |= "arbitrary number:" | regexp `arbitrary number: (?P<num>\d+)`
    
  • 按标签分组求和:将提取的字符串数值转为数值类型后,按指定标签聚合求和:

    sum by (your-target-label) (
      avg_over_time(
        {job="your-job-label"} |= "arbitrary number:" | regexp `arbitrary number: (?P<num>\d+)` | unwrap num [1m]
      )
    )
    
    • unwrap num:将提取的字符串类型数值转为数值类型
    • avg_over_time:单条日志对应单个数值,用平均值保留每条日志的数值(也可替换为sum_over_time,效果一致)
    • sum by (your-target-label):按业务需要的标签分组求和,替换为实际标签名即可

如果无需分组,直接简化为:

sum(
  avg_over_time(
    {job="your-job-label"} |= "arbitrary number:" | regexp `arbitrary number: (?P<num>\d+)` | unwrap num [1m]
  )
)

Loki不仅能处理日志流元数据,还支持对日志内容做解析、字段提取,并基于这些字段完成聚合计算,完全满足制作仪表盘展示各标签下数值总和的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:05:51