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

使用Grafana Alloy提取JSON日志namespace标签失败求助

问题:Grafana Alloy提取JSON日志的namespace标签失败

示例日志行

{
  "timestamp": "2025-09-05T16:48:03.7170571+07:00",
  "level": 2,
  "level_name": "info",
  "message": "client registered",
  "namespace": "connection_manager"
}

当前流水线配置

loki.process "default" {
  stage.json {
    expressions = {
      originalLoggedTime = "timestamp"
      namespace          = "namespace"
    }
  }

  stage.timestamp {
    source = "originalLoggedTime"
    format = "2006-01-02T15:04:05.999999999Z07:00"
  }

  stage.labels {
    values = {
      namespace = "namespace"
    }
  }

  forward_to = [otelcol.receiver.loki.default.receiver]
}

问题现象

配置后namespace标签从未在Loki/Grafana中显示(仅显示level和service_name)。

解决方案

1. 修正时间戳格式匹配问题

你的stage.timestamp中使用的格式字符串与日志中的时间格式不匹配,这会导致时间解析失败,进而中断流水线后续步骤,使得标签无法添加。

日志中的时间格式是2025-09-05T16:48:03.7170571+07:00,对应的Go时间格式字符串应为2006-01-02T15:04:05.0000000-07:00:

  • 0000000匹配7位小数部分
  • -07:00匹配带符号的时区偏移(Go会自动兼容+符号)

2. 添加时间解析失败后的续行策略

即使时间解析失败,也要让流水线继续执行后续的标签提取步骤,避免因为时间问题导致标签丢失。

修改后的完整配置

loki.process "default" {
  stage.json {
    expressions = {
      originalLoggedTime = "timestamp"
      namespace          = "namespace"
    }
  }

  # 可选调试步骤:输出提取到的namespace字段,验证解析是否成功
  stage.output {
    source = "namespace"
  }

  stage.timestamp {
    source = "originalLoggedTime"
    format = "2006-01-02T15:04:05.0000000-07:00"
    # 时间解析失败时继续执行后续步骤
    action = "continue"
  }

  stage.labels {
    values = {
      namespace = "namespace"
    }
  }

  forward_to = [otelcol.receiver.loki.default.receiver]
}

额外检查点

  • 确认日志确实被路由到该loki.process组件,没有被其他流水线的标签覆盖
  • 在Grafana中查询时,刷新标签列表,确保没有过滤namespace标签

内容的提问来源于stack exchange,提问作者Văn Hữu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 10:33:38