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

Kubernetes中Fluentd解析带前缀Nginx JSON访问日志方法

场景说明

这是Kubernetes环境下采集容器化Nginx日志的通用标准场景。日志前缀并非Fluentd添加,是容器运行时(Docker/Containerd)写入/var/log/containers/路径日志的标准CRI格式,固定结构为:[RFC3339格式时间戳] [输出流stdout/stderr] [日志标记F/P] [容器原始输出内容]。
你当前使用的fluent/fluentd-kubernetes-daemonset:v1.14.6-debian-elasticsearch7-1.0镜像已预置全部所需解析能力,不需要安装任何额外插件,调整采集规则即可完成正确解析。

正确配置方案

直接替换原有source段的解析配置,用两层嵌套解析分别处理外层CRI格式、内层Nginx输出的JSON格式:

<source>
  @type tail
  path /var/log/containers/*nginx*.log
  pos_file /var/log/nginx.log.pos
  tag nginx.access
  <parse>
    # 第一层:解析CRI日志外层前缀
    @type cri
    <parse>
      # 第二层:解析Nginx输出的原生JSON日志
      @type json
      time_key time_local
      time_format %d/%b/%Y:%H:%M:%S %z
    </parse>
  </parse>
</source>

配置生效后自动完成以下处理:

  • 自动剥离CRI格式前缀,不会把时间戳、stdout标识混入业务日志字段
  • 自动处理JSON转义字符,将Nginx log_format中定义的remote_addr、status、request_time等所有字段直接映射为Elasticsearch的独立可检索字段
  • 自动使用Nginx日志自带的time_local作为日志事件时间,不依赖Fluentd采集时间生成时间戳,时间精度和准确性更高
可选优化配置

如果不需要保留CRI层解析出的冗余字段,可以添加如下过滤规则清理无效字段:

<filter nginx.access>
  @type record_transformer
  remove_keys stream, time
</filter>
原有配置问题说明

之前配置的@type nginx解析器是专门适配Nginx默认文本格式日志的,搭配全量匹配正则^(?<somenginxstuff>.*)$相当于未做任何结构化处理,所有日志内容会被塞入单个字段,无法正常检索分析。

内容的提问来源于stack exchange,提问作者Matt The Ninja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:06:22