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

如何通过Grafana动态替换Loki日志消息的变量占位符

解决方案:在Grafana中动态替换Loki日志message字段的占位符

方法一:Grafana自定义JavaScript Transform(灵活通用)

这是适配动态占位符场景的最优方案,直接在Grafana面板内对日志行做处理:

  1. 打开目标Loki日志面板,切换到「Transform」标签页
  2. 点击「Add transformation」,选择「Custom JavaScript」
  3. 粘贴以下代码并点击「Apply」:
return data.map(frame => {
  const newFields = frame.fields.map(field => {
    if (field.name === 'message') {
      const values = field.values.map((msg, idx) => {
        // 获取当前行的properties数据
        const props = frame.fields.find(f => f.name === 'properties').values.get(idx);
        // 正则匹配所有{.XXX}格式的占位符并替换
        return msg.replace(/\{\.(\w+)\}/g, (_, key) => props[key] || _);
      });
      return { ...field, values };
    }
    return field;
  });
  return { ...frame, fields: newFields };
});

该代码会自动识别message中的所有{.XXX}占位符,从同日志行的properties字段中提取对应值完成替换,若找不到对应值则保留原占位符。

方法二:LogQL查询阶段预处理(适合固定占位符场景)

如果你的占位符类型固定,可直接在Loki查询时完成替换,避免Grafana端的性能开销:
示例LogQL查询(假设只有User和Code两种占位符):

{job="your-job-label"} 
| json  // 解析JSON格式日志
| replace(message, "{.User}", User) 
| replace(message, "{.Code}", Code)

注意:此方法需要为每个占位符单独写replace语句,不适用于占位符动态变化的场景。

备选方案:日志采集阶段预处理

如果上述方案都无法满足性能需求,可在日志采集环节(如Fluentd、Filebeat)完成占位符替换,将处理后的日志发送到Loki,Grafana直接展示最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 19:17:25