使用AWS EKS with Fargate将应用日志发送至Logstash的方案咨询
EKS Fargate环境采集应用日志到Logstash可行方案
方案1:使用Fargate内置日志路由(无额外Sidecar开销)
这是AWS官方原生支持的方案,不需要手动部署额外的日志采集组件,没有Sidecar资源开销,适配轻量采集需求:
- 首先为Fargate Pod执行角色添加必要的基础权限,确保内置Fluent Bit组件可以正常运行
- 确认Fargate Pod所在子网的路由规则、安全组策略允许访问你的Logstash服务,默认Logstash接收Fluent Bit日志的端口为5044
- 给需要采集日志的Fargate Pod添加annotation来自定义输出规则,示例配置如下:
annotations: eks.amazonaws.com/fargate-log-configuration: | { "logConfigurationName": "logstash-output", "logDriver": "fluentbit", "options": { "Name": "logstash", "Host": "替换为你的Logstash服务地址", "Port": "5044", "tls": "on", "tls.verify": "off" } }
- 批量配置场景可以部署Kubernetes突变准入控制器,自动给所有调度到Fargate的Pod注入上述annotation,不需要逐个修改应用部署配置。
方案2:Fluent Bit Sidecar注入模式
适合需要复杂日志处理(自定义过滤、字段改写、多目标分发)的场景,灵活性更高:
- 在每个业务Pod中加入Fluent Bit Sidecar容器,通过共享存储卷采集同Pod内业务容器的日志,示例Pod配置片段如下:
spec: volumes: - name: app-log-dir emptyDir: {} - name: fluentbit-config configMap: name: fluentbit-logstash-config containers: # 业务应用容器 - name: business-app image: 替换为你的业务镜像地址 volumeMounts: - name: app-log-dir mountPath: /var/log/your-app # Fluent Bit采集Sidecar - name: fluentbit-sidecar image: cr.fluentbit.io/fluent/fluent-bit:2.2.0 volumeMounts: - name: app-log-dir mountPath: /var/log/your-app - name: fluentbit-config mountPath: /fluent-bit/etc/
- 提前创建存储Fluent Bit配置的ConfigMap,配置输入采集共享目录下的日志文件、输出指向Logstash服务即可
- 批量部署场景同样可以通过突变准入控制器自动注入Sidecar,无需修改现有应用的部署清单。
注意:两种方案都需要确保Fargate Pod与Logstash之间的网络连通性,如果Logstash部署在集群外,需要配置对应VPC对等连接、公网路由或专线;如果部署在同一集群内,需要放通集群内部网络访问策略。
内容的提问来源于stack exchange,提问作者Felipe Pereira
相关产品推荐
相关产品推荐

