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

Flask/Quart应用日志的Fluentd <source>配置问题及K8s日志无输出排查

问题描述

我的Python Flask/Quart应用日志格式如下:

2025-04-04 05:16:07 INFO     Running app...

我需要配置Fluentd的<source>部分,目前尝试的配置如下:

<source>
  @type tail
  #dummy [{"python_log": "2025-04-04 05:16:07 INFO     Running app..."}]
  path /var/log/pythonrestapi/log*
  pos_file /var/log/td-agent/pos/pythonrestapi_logs.pos
  read_from_head true
  tag pythonrestapi
  key_name message
  reserve_data true
  time_type string
  time_format %Y-%m-%d %H:%M:%S
  keep_time_key true
  # even if we failed to parse the time send the record over to splunk
  emit_invalid_record_to_error false
  reserve_time true
  <parse>
      @type regexp
      expression /^(?<time>.+?)\s+(?<level>\w+)\s+(?<message>.*)$/
  </parse>      
</source>

该应用运行在本地K8s集群中,执行kubectl logs -f <pod>无任何输出,但在Pod内部查看日志文件时能看到正常日志内容(示例如下):

root@pythonrestapi-0:/app# tail /var/log/pythonrestapi/log 
2025-04-04 05:44:55 INFO     Running app...
2025-04-04 05:44:55 INFO     Running on https://0.0.0.0:443 (CTRL + C to quit)
2025-04-04 05:44:55 INFO     Running on http://0.0.0.0:8080 (CTRL + C to quit)
2025-04-04 05:44:55 INFO     Running on https://0.0.0.0:443 (QUIC) (CTRL + C to quit)
2025-04-04 05:44:56 INFO     Running on https://[::]:443 (QUIC) (CTRL + C to quit)
2025-04-04 06:05:07 INFO     [99903abd9bdedae87ca987a682701e7b6b6c40d8] ALPN negotiated protocol h3
2025-04-04 06:05:07 INFO     [99903abd9bdedae87ca987a682701e7b6b6c40d8] Connection close received (code 0x0, reason )
2025-04-04 06:05:24 INFO     [227c58078cee0ae359d042ff2b05fe97e191eba4] ALPN negotiated protocol h3
2025-04-04 06:05:24 INFO     [227c58078cee0ae359d042ff2b05fe97e191eba4] Connection close received (code 0x0, reason )

请问如何正确配置Fluentd的<source>部分?


修正后的配置及说明

最终<source>配置

<source>
  @type tail
  path /var/log/pythonrestapi/log*
  pos_file /var/log/td-agent/pos/pythonrestapi_logs.pos
  read_from_head true
  tag pythonrestapi
  <parse>
      @type regexp
      expression /^(?<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})\s+(?<level>\w+)\s+(?<message>.*)$/
      time_key time
      time_format %Y-%m-%d %H:%M:%S
      keep_time_key true
  </parse>
  emit_invalid_record_to_error false
</source>

关键调整点

  1. 修复正则表达式
    原正则的.+?匹配时间过于宽泛,改为明确的数字格式匹配\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},同时用\s+匹配日志级别(如INFO)与消息内容之间的多个空格,避免解析失败。

  2. 合并时间解析配置
    移除外部重复的time_type、reserve_time等参数,将时间解析逻辑统一放到<parse>块内,避免参数冲突导致的解析异常。

  3. 移除冗余配置
    删掉key_name和reserve_data:这两个参数会把原始日志塞进指定字段,导致K8s无法识别标准日志结构,移除后Fluentd会直接输出解析后的time、level、message字段,符合kubectl logs的读取要求。

  4. 补充输出配置(必要)
    要让kubectl logs能看到内容,还需要确保Fluentd将解析后的日志输出到标准输出,可添加如下<match>块:

    <match pythonrestapi>
      @type stdout
      format json
    </match>
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 13:14:52