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>
关键调整点
修复正则表达式
原正则的.+?匹配时间过于宽泛,改为明确的数字格式匹配\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},同时用\s+匹配日志级别(如INFO)与消息内容之间的多个空格,避免解析失败。合并时间解析配置
移除外部重复的time_type、reserve_time等参数,将时间解析逻辑统一放到<parse>块内,避免参数冲突导致的解析异常。移除冗余配置
删掉key_name和reserve_data:这两个参数会把原始日志塞进指定字段,导致K8s无法识别标准日志结构,移除后Fluentd会直接输出解析后的time、level、message字段,符合kubectl logs的读取要求。补充输出配置(必要)
要让kubectl logs能看到内容,还需要确保Fluentd将解析后的日志输出到标准输出,可添加如下<match>块:<match pythonrestapi> @type stdout format json </match>
内容的提问来源于stack exchange,提问作者khteh
相关产品推荐
相关产品推荐

