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

如何在Grafana中用Lucene Query去除Elasticsearch字段前缀子串

解决Grafana中Elasticsearch日志字段的前缀截取问题

我之前处理过类似的日志提取需求,结合你在用的Grafana v5.0.4和Elasticsearch 5.x版本,咱们可以通过在查询中使用脚本字段来精准提取你需要的内容,具体操作如下:

核心思路

你的日志前缀有固定模式(都是以<30>日期时间 workers foo :或workers foo:这类格式结尾的前缀),我们可以用正则匹配定位前缀的结束位置,提取之后的目标内容,再基于提取后的内容做分组统计。

具体操作步骤

  1. 打开Grafana的Elasticsearch查询配置面板,找到Group by区域:
    • 把原来选择message.keyword作为分组字段的设置,改成选择Script选项(而非具体字段)。
  2. 在脚本输入框中,填入以下Painless脚本(Elasticsearch 5.x原生支持Painless语法):
    def matcher = /^.*?foo\s*:\s*(.*)$/.matcher(doc['message.keyword'].value);
    if (matcher.find()) {
      return matcher.group(1);
    } else {
      return doc['message.keyword'].value; // 防止匹配失败时丢失数据,返回原内容
    }
    
    这个脚本的作用是:用正则匹配整个日志内容,找到foo后跟随冒号(允许冒号前后有空格)的位置,提取冒号之后的所有内容作为分组依据。
  3. 保持指标为Count、时间分组@timestamp的设置不变,执行查询后就能得到你期望的去掉前缀的结果了。

灵活调整提示

如果后续日志前缀模式有变化,只需要修改正则表达式即可。比如如果前缀固定结尾是workers foo,可以把正则改成^.*?workers foo\s*:\s*(.*)$,匹配会更精准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:34:39