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

Splunk未将JSON格式日志转为JSON结构的问题排查求助

问题原因分析

自定义控制器的log字段未被解析为JSON,通常由以下几个原因导致:

  • 应用日志输出非标准JSON:自定义控制器程序输出的日志本身不是严格符合语法的JSON(比如引号不匹配、缺少大括号、手动拼接字符串导致格式错误),CloudWatch或Splunk无法识别解析。
  • CloudWatch解析规则未覆盖目标日志流:CloudWatch日志组可能仅对特定命名空间、容器标签的日志设置了JSON解析规则,自定义控制器的日志流不在规则覆盖范围内。
  • CloudWatch Agent采集配置缺失:Agent配置中未针对自定义控制器的日志路径开启JSON解析,导致采集时未对日志做结构化处理。
  • Splunk解析规则未匹配目标日志:Splunk接收CloudWatch数据时,仅对特定日志源或字段应用了解析逻辑,自定义控制器的日志未触发JSON解析规则。
排查步骤
  • 验证应用日志输出格式
    直接查看自定义控制器的容器原始日志,确认输出是否为标准JSON:

    kubectl logs <custom-controller-pod> -n <target-namespace>
    

    检查日志是否存在语法错误(如未闭合的引号、多余逗号),若输出为普通文本而非JSON,问题根源在应用本身。

  • 检查CloudWatch日志组解析配置
    登录AWS控制台,进入对应CloudWatch日志组:

    1. 查看「提取字段」配置,确认是否设置了JSON格式解析规则;
    2. 检查规则的过滤条件(如容器名称、命名空间标签),确认自定义控制器的日志流符合条件;
    3. 查看日志流的「已提取字段」,确认是否有JSON字段被识别。
  • 检查CloudWatch Agent配置
    登录EKS节点,查看Agent配置文件(通常路径/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json):

    1. 确认采集列表中包含自定义控制器的日志路径(如/var/log/containers/*custom-controller*.log);
    2. 检查该采集项是否启用json_parse: true配置,确保Agent会解析JSON格式日志。
  • 检查Splunk解析配置
    在Splunk中排查:

    1. 查看接收CloudWatch数据的数据源配置,确认是否开启「自动解析JSON」;
    2. 使用| spath input=log在搜索中临时解析log字段,验证是否能提取出JSON结构;
    3. 检查props.conf和transforms.conf,确认是否对目标日志源设置了spath解析规则。
修复方案
  • 修复应用日志输出
    修改自定义控制器代码,使用结构化日志库(如Go的zap、Java的logback JSON编码器、Python的structlog)输出标准JSON格式日志,避免手动拼接字符串导致的格式错误。

  • 调整CloudWatch解析规则

    • 若日志组解析规则未覆盖目标日志流,修改规则过滤条件(如添加自定义控制器的容器名称前缀、命名空间);
    • 更新CloudWatch Agent配置,确保自定义控制器的日志采集项启用json_parse: true,示例配置片段:
      {
        "logs": {
          "logs_collected": {
            "files": {
              "collect_list": [
                {
                  "file_path": "/var/log/containers/*custom-controller*.log",
                  "log_group_name": "/aws/eks/<cluster-name>/containers",
                  "log_stream_name": "{container_name}",
                  "json_parse": true
                }
              ]
            }
          }
        }
      }
      

    更新后重启CloudWatch Agent:sudo systemctl restart amazon-cloudwatch-agent

  • 配置Splunk解析规则

    • 若Splunk未自动解析,在搜索中使用| spath input=log提取字段,确认有效后,将规则添加到props.conf:
      [aws:cloudwatch:logs]
      EXTRACT-json_log = spath input=log
      
    • 若通过Lambda转发CloudWatch日志到Splunk,修改Lambda代码,确保解析自定义控制器的log字段为JSON后再发送。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:50:32