如何在EKS Fargate中配置Fluent Bit实现自定义日志采集?
EKS Fargate 自定义Fluent Bit多服务日志采集到CloudWatch实现方案
核心思路
通过为不同服务配置独立的Fluent Bit日志采集输入规则,匹配对应服务的日志路径,再通过过滤规则给对应日志打上服务名标识,最终输出到CloudWatch时自动添加服务名前缀的日志流,实现不同服务日志的隔离与区分。
前置准备
- 已启用EKS Fargate的日志采集能力
- Fargate执行角色已配置CloudWatch日志写入权限(允许创建日志组、日志流、写入日志数据)
- 所有服务的Pod统一添加
app.kubernetes.io/name标签标识服务名,方便后续元数据关联
步骤1:创建自定义Fluent Bit ConfigMap
将以下配置保存为fluent-bit-config.yaml,部署到集群的aws-observability命名空间下:
apiVersion: v1 kind: ConfigMap metadata: name: aws-observability-fluent-bit-config namespace: aws-observability labels: k8s-app: fluent-bit data: fluent-bit.conf: | [SERVICE] Flush 1 Log_Level info Daemon off Parsers_File parsers.conf HTTP_Server On HTTP_Listen 0.0.0.0 HTTP_Port 2020 storage.path /var/fluent-bit/state/flb-storage/ storage.sync normal storage.checksum off storage.backlog.mem_limit 5M # 服务1:nginx服务日志采集配置 [INPUT] Name tail Tag nginx-service.* Path /var/log/nginx/*,/usr01/app/product/logs/* DB /var/fluent-bit/state/flb_nginx.db Mem_Buf_Limit 5MB Skip_Long_Lines On Refresh_Interval 10 # 服务2:birt服务日志采集配置 [INPUT] Name tail Tag birt-service.* Path /jboss/product/logs/*,/birt/1.0.0/deploy/birt.war/logs,/birt/1.0.0/logs/* DB /var/fluent-bit/state/flb_birt.db Mem_Buf_Limit 5MB Skip_Long_Lines On Refresh_Interval 10 # 过滤规则:拉取Kubernetes Pod元数据 [FILTER] Name kubernetes Match * Kube_URL https://kubernetes.default.svc:443 Kube_CA_File /var/run/secrets/kubernetes.io/serviceaccount/ca.crt Kube_Token_File /var/run/secrets/kubernetes.io/serviceaccount/token Merge_Log On Keep_Log Off K8S-Logging.Parser On K8S-Logging.Exclude On # 过滤规则:给对应服务日志添加服务名字段 [FILTER] Name modify Match nginx-service.* Add service_name nginx-service [FILTER] Name modify Match birt-service.* Add service_name birt-service # 输出规则:日志写入CloudWatch [OUTPUT] Name cloudwatch_logs Match * region <替换为你的集群所在AWS区域> log_group_name /eks/fargate/service-all-logs log_stream_prefix ${service_name}- auto_create_group true log_key log parsers.conf: | # 可根据业务需求添加自定义日志解析器,示例为nginx解析器 [PARSER] Name nginx Format regex Regex ^(?<remote>[^ ]*) (?<host>[^ ]*) (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\"]*?)(?: +\S*)?)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")?$ Time_Key time Time_Format %d/%b/%Y:%H:%M:%S %z
部署命令:kubectl apply -f fluent-bit-config.yaml
步骤2:关联Fargate日志配置到自定义ConfigMap
执行AWS CLI命令更新集群Fargate日志配置,指定使用你创建的自定义ConfigMap:aws eks update-fargate-profile --cluster-name <替换为你的EKS集群名> --fargate-profile-name <替换为你的Fargate配置文件名> --logging '{"logConfiguration": {"fluentBitConfig": {"configMapName": "aws-observability-fluent-bit-config", "namespace": "aws-observability"}}}'
步骤3:新增其他服务的适配方法
后续新增服务只需在fluent-bit.conf中添加对应配置即可:
- 新增
[INPUT]段,填写对应服务的日志路径,设置独立的TAG标识 - 新增对应的
[FILTER]modify段,给该TAG的日志添加service_name字段 - 无需修改输出配置,服务日志会自动写入对应前缀的CloudWatch日志流
验证效果
- 进入AWS CloudWatch控制台,找到日志组
/eks/fargate/service-all-logs - 可看到以
nginx-service-、birt-service-为前缀的独立日志流 - 所有日志条目自带
service_name字段,支持直接按服务名过滤查询
内容的提问来源于stack exchange,提问作者Nitin G
相关产品推荐
相关产品推荐

