如何过滤Fluentd日志,仅保留日志内容并移除所有元数据
修改Fluentd配置以移除冗余元数据
针对你的需求,提供两种修改方案,你可以根据实际场景选择:
方案1:仅保留{"log": "ACTUAL LOG CONTENT"}格式(保留JSON结构,仅留核心日志字段)
修改步骤:
- 移除冗余元数据来源:如果你不需要Kubernetes/Docker的额外元数据,可以直接删除
kubernetes_metadata过滤器(它是添加docker、kubernetes等冗余元数据的核心)。 - 清理日志字段:调整
record_transformer过滤器,只保留log和日志流命名所需的stream_name字段(避免CloudWatch日志流命名失败)。
修改后的containers.conf中@containers标签部分配置如下:
<label @containers> # 若不需要Kubernetes元数据,直接删除以下filter块 # <filter **> # @type kubernetes_metadata # @id filter_kube_metadata # </filter> <filter **> @type record_transformer @id filter_cleanup_logs # 仅保留log和stream_name字段,移除所有其他冗余字段 keep_keys log,stream_name </filter> <match **> @type cloudwatch_logs @id out_cloudwatch_logs_containers region "#{ENV.fetch('AWS_REGION')}" log_group_name "/EKS-LOGS/#{ENV.fetch('AWS_EKS_CLUSTER_NAME')}/containers" log_stream_name_key stream_name remove_log_stream_name_key true auto_create_stream true <buffer> flush_interval 5 chunk_limit_size 2m queued_chunks_limit_size 32 retry_forever true </buffer> </match> </label>
方案2:直接输出纯文本日志(仅保留ACTUAL LOG CONTENT字符串)
修改步骤:
- 移除冗余元数据来源:同样可删除
kubernetes_metadata过滤器(若无需元数据)。 - 提取原始日志内容:通过
record_transformer将整个日志记录替换为log字段的原始内容,并在输出时配置纯文本格式。
修改后的containers.conf中@containers标签部分配置如下:
<label @containers> # 若不需要Kubernetes元数据,直接删除以下filter块 # <filter **> # @type kubernetes_metadata # @id filter_kube_metadata # </filter> <filter **> @type record_transformer @id filter_extract_raw_log # 移除所有冗余字段,仅保留log的内容 remove_keys * <record> raw_log ${record["log"]} </record> </filter> <match **> @type cloudwatch_logs @id out_cloudwatch_logs_containers region "#{ENV.fetch('AWS_REGION')}" log_group_name "/EKS-LOGS/#{ENV.fetch('AWS_EKS_CLUSTER_NAME')}/containers" log_stream_name_key stream_name remove_log_stream_name_key true auto_create_stream true # 配置输出格式为纯文本,直接打印raw_log字段内容 format ${raw_log} <buffer> flush_interval 5 chunk_limit_size 2m queued_chunks_limit_size 32 retry_forever true </buffer> </match> </label>
关键说明:
keep_keys:指定保留的字段,其余字段会被自动移除。remove_keys *:移除所有现有字段,再通过<record>块重新定义需要保留的内容。format ${raw_log}:在输出到CloudWatch时,直接以纯文本格式打印日志内容,而非JSON结构。
内容的提问来源于stack exchange,提问作者Vijay_Yadav
相关产品推荐
相关产品推荐

