如何配置AWS EKS Fargate按namespace-pod-name命名CloudWatch日志流
EKS Fargate的内置托管Fluent Bit日志组件默认会给CloudWatch日志流加随机后缀,不需要自行部署日志采集组件,直接通过配置调整命名规则即可,具体操作如下:
前置检查
- 确认Fargate集群平台版本不低于1.3.0,低版本不支持日志流模板变量注入
- 确认已经完成基础的Fargate日志IAM权限配置,Fargate执行角色已关联CloudWatch日志写入的对应权限策略
配置方式
可根据需求选择全局生效或者单工作负载生效两种模式:
方式1:全局所有Fargate Pod生效
修改kube-system命名空间下名为aws-logging的ConfigMap(即初始配置Fargate日志时创建的Fluent Bit配置文件),在[OUTPUT]段(CloudWatch输出部分)添加/修改stream_name参数,同时删除或注释掉原有的log_stream_prefix配置(该配置优先级更高会覆盖自定义流名规则):
[OUTPUT] Name cloudwatch_logs Match * region <你的集群所在区域> log_group_name /aws/eks/<你的集群名>/fargate # log_stream_prefix 注释或删除原有前缀配置 stream_name ${kubernetes.namespace_name}-${kubernetes.pod_name} auto_create_group true
保存ConfigMap后,所有新启动的Fargate Pod都会自动应用这个命名规则,已经在运行的Pod需要重建才会生效。
方式2:仅指定工作负载生效
如果不想全局修改,只需要给特定工作负载的Pod模板添加annotations即可,不需要调整全局ConfigMap:
apiVersion: apps/v1 kind: Deployment metadata: name: your-app spec: replicas: 1 selector: matchLabels: app: your-app template: metadata: labels: app: your-app annotations: # 新增注解指定日志流命名模板 eks.amazonaws.com/log-stream-name: "$(kubernetes.namespace_name)-$(kubernetes.pod_name)" spec: containers: - name: your-app image: your-app-image:latest
应用更新后的工作负载YAML,等待Pod滚动重建完成即可生效。
注意事项
- CloudWatch不允许同一日志组下同名活跃日志流并发写入,如果Pod重建后和旧Pod同名,旧日志流未完全进入归档状态时,可能出现1-2分钟的日志写入失败,对日志连续性要求高的场景可以在模板末尾追加容器ID或者重启次数变量
- 不要尝试在Fargate集群上部署Fluent Bit/Fluentd DaemonSet做日志采集,Fargate不支持特权DaemonSet,托管日志组件已经内置在Fargate运行环境中,自行部署的采集组件无法正常获取节点上其他容器的日志
- 配置生效后可直接到CloudWatch控制台对应日志组下验证,日志流会直接以
namespace-pod-name格式展示,不会带默认的随机后缀
内容的提问来源于stack exchange,提问作者Akshay Gopani
相关产品推荐
相关产品推荐

