news 2026/5/12 23:06:53

AWS For Fluent Bit:高效日志收集与传输的Docker镜像

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AWS For Fluent Bit:高效日志收集与传输的Docker镜像

AWS for Fluent Bit

项目描述

AWS for Fluent Bit 是由亚马逊官方维护的Docker镜像项目。它基于开源的 Fluent Bit 日志处理器,并预集成了针对亚马逊云服务(Amazon CloudWatch Logs、Amazon Kinesis Data Streams、Amazon Kinesis Data Firehose)优化的高性能输出插件。该项目旨在为运行在 Amazon ECS、EKS 或任何 Docker 环境中的应用程序提供开箱即用、生产就绪的日志收集、处理和转发解决方案。镜像内置了便捷的初始化进程,支持从S3加载多配置文件,并提供了用于集成测试、负载测试以及调试的丰富工具链。

功能特性

  • 预集成AWS插件:镜像已包含并自动加载针对 CloudWatch、Kinesis Streams 和 Kinesis Firehose 的核心输出插件(.so文件)。
  • 多配置支持:提供带有init标签的镜像变体,内含初始化进程,支持从S3桶或本地文件系统动态加载和合并多个 Fluent Bit 配置文件,极大简化了复杂配置的管理。
  • 多平台与架构支持:提供适用于linux/amd64linux/arm64架构的镜像,并包含Windows容器版本,支持 Windows Server 2019 (LTSC 2019) 和 2022 (LTSC 2022)。
  • 默认配置模板:为Windows容器在Amazon ECS守护进程模式下运行提供了开箱即用的默认配置文件,支持转发到 CloudWatch、S3、Kinesis 和 Firehose。
  • 丰富的工具与指南:项目包含用于验证集成测试的独立工具镜像(S3/CloudWatch Validator)、负载测试框架、详细的调试指南(包括如何获取和分析核心转储)以及多种使用场景示例。
  • 持续更新与安全合规:遵循语义化版本控制,定期更新底层 Fluent Bit 版本和插件,合并 Amazon Linux 基础镜像的CVE修复补丁,并提供详细的变更日志和版本元数据(通过Docker标签标识)。

安装指南

AWS for Fluent Bit 作为Docker镜像提供,无需传统安装。您可以直接从公共容器仓库拉取使用。

获取镜像

您可以从以下任一仓库拉取镜像:

Amazon ECR Public Gallery:

docker pull public.ecr.aws/aws-observability/aws-for-fluent-bit:latest docker pull public.ecr.aws/aws-observability/aws-for-fluent-bit:init-latest# 带初始化进程的版本

Docker Hub:

docker pull amazon/aws-for-fluent-bit:latest docker pull amazon/aws-for-fluent-bit:init-latest

使用SSM参数查找可用版本

在AWS环境中,您可以使用AWS Systems Manager (SSM) 参数来动态获取特定区域可用的最新镜像URI,这有助于在CloudFormation模板等场景中实现不可变部署。
参数路径格式为:/aws/service/aws-for-fluent-bit/<版本标签>

平台注意事项

  • ARM64架构:使用arm64-<version>init-arm64-<version>标签。
  • Windows容器:使用带有windowsservercoreltsc2019ltsc2022后缀的标签,例如amazon/aws-for-fluent-bit:<version>-windowsservercore
  • 调试镜像:如需调试,可以构建或获取带有debug标签的镜像,其中包含了调试符号和工具。

使用说明

基础运行

运行容器的最简单方式是使用默认配置。容器启动时会执行/fluent-bit/etc/fluent-bit.conf中的配置。

docker run -it public.ecr.aws/aws-observability/aws-for-fluent-bit:latest

这将启动 Fluent Bit 并加载内置的AWS插件。

使用自定义配置

您可以通过挂载卷的方式使用自己的配置文件。

docker run -it -v /path/to/your/conf:/fluent-bit/etc/ public.ecr.aws/aws-observability/aws-for-fluent-bit:latest

或者,在任务定义(如ECS)中指定command来覆盖默认配置文件路径。

使用Init进程实现多配置(ECS FireLens示例)

此功能对于在ECS上使用FireLens时动态组合多个配置片段非常有用。

  1. 选择带有init标签的镜像,例如aws-for-fluent-bit:init-latest
  2. 在ECS任务定义中,为 Fluent Bit 容器设置环境变量来指定额外的配置文件位置(支持s3://file://协议)。
    {"name":"log_router","image":"public.ecr.aws/aws-observability/aws-for-fluent-bit:init-latest","essential":true,"firelensConfiguration":{"type":"fluentbit"},"environment":[{"name":"AWS_FOR_FLUENT_BIT_INIT_S3_CONFIG_FILE_1","value":"s3://your-bucket/path/to/parser.conf"},{"name":"AWS_FOR_FLUENT_BIT_INIT_FILE_CONFIG_FILE_2","value":"file:///extra/config/output.conf"}]}
  3. Init进程会自动下载S3文件,并将所有配置片段通过@INCLUDE指令合并到主配置中。

Windows容器在ECS上的默认配置

对于Windows容器,镜像内置了针对转发输入插件(forward)的默认输出配置。您可以通过覆盖容器的入口点来使用它们。
在ECS任务定义中:

{"entryPoint":["cmd","/C","C:\\fluent-bit\\bin\\fluent-bit.exe -c C:\\fluent-bit\\conf\\cloudwatch.conf"]}

同时,确保您的应用容器使用了fluentd日志驱动,并设置了必要的ECS元数据标签。

核心代码

1. 容器启动入口点脚本 (entrypoint.sh)

此脚本是容器启动时执行的命令,它打印版本信息并启动Fluent Bit进程,加载所有预置的AWS插件。

#!/bin/bashecho-n"AWS for Fluent Bit Container Image Version "cat/AWS_FOR_FLUENT_BIT_VERSIONexec/fluent-bit/bin/fluent-bit -e /fluent-bit/firehose.so -e /fluent-bit/cloudwatch.so -e /fluent-bit/kinesis.so -c /fluent-bit/etc/fluent-bit.conf

代码注释:

  • cat /AWS_FOR_FLUENT_BIT_VERSION:输出当前镜像的版本号。
  • exec /fluent-bit/bin/fluent-bit ...:使用exec命令替换当前shell进程,启动 Fluent Bit 主程序。
  • -e参数:动态加载外部的输出插件共享库文件。
  • -c参数:指定主配置文件路径。

2. Init进程主启动脚本 (init-entrypoint.sh)

该脚本是带有init标签镜像的入口点,它首先运行Go语言编写的初始化进程来准备配置,然后执行生成的启动脚本。

#!/bin/bash# Run the init Go application first, that sets up the fluent bit configs and the invoke script as needed./init/fluent_bit_init_process# Source the invoke script from the appropriate locationif[-f /init/invoke_fluent_bit.sh];thensource/init/invoke_fluent_bit.shelif[-f /tmp/init/invoke_fluent_bit.sh];thensource/tmp/init/invoke_fluent_bit.shelseecho"Error: invoke_fluent_bit.sh not found in /init or /tmp/init"exit1fi

代码注释:

  • ./init/fluent_bit_init_process:执行Go编写的初始化程序,根据环境变量处理S3或本地配置文件,生成最终的Fluent Bit命令和配置。
  • source /init/invoke_fluent_bit.sh:执行初始化进程生成的脚本,该脚本最终会调用原始的fluent-bit命令。

3. 集成测试 - S3验证器主逻辑 (s3_validator.go片段)

此Go程序用于在集成测试中验证发送到S3的日志数据是否正确。

funcmain(){region:=os.Getenv(envAWSRegion)bucket:=os.Getenv(envS3Bucket)prefix:=os.Getenv(envS3Prefix)testFile:=os.Getenv(envTestFile)expectedEventsLen:=os.Getenv(envExpectedLogsLen)// ... 参数验证 ...s3Client,err:=getS3Client(region)// ... 错误处理 ...s3Action:=os.Getenv(envS3Action)ifs3Action=="validate"{// Validate the data on the s3 bucketfori:=0;i<=retries;i++{ifvalidateS3Data(s3Client,bucket,prefix,testFile,numEvents){os.Exit(0)// 验证成功}time.Sleep(retrySleep*time.Second)}exitErrorf("[TEST FAILURE] Validation failed after retries")}elseifs3Action=="clean"{// Clean up test data from the s3 bucketcleanupS3Data(s3Client,bucket,prefix)}else{exitErrorf("[TEST FAILURE] Unknown S3_ACTION: %s",s3Action)}}

代码注释:

  • 程序通过环境变量接收测试参数(区域、桶、前缀、预期事件数等)。
  • 根据S3_ACTION环境变量决定执行验证(validate)还是清理(clean)操作。
  • validateS3Data函数会列出S3对象,读取内容,并解析JSON格式的日志记录,核对数量与内容。
  • 包含重试逻辑,以应对S3最终一致性。

4. 镜像构建脚本 (build.sh片段)

这是构建Linux版本镜像的核心脚本,展示了如何获取版本配置并执行多架构构建。

#!/bin/bashset-e# Validate BUILD_VERSION variable is setif["$BUILD_VERSION"!="2"]&&["$BUILD_VERSION"!="3"];thenecho"Unsupported BUILD_VERSION:$BUILD_VERSION"exit1fi# Get version-specific configuration using linux.version getter scriptAL_TAG=$(./scripts/get_linux_version.sh"$BUILD_VERSION""al-tag")FLB_VERSION=$(./scripts/get_linux_version.sh"$BUILD_VERSION""fluent-bit")AWS_FOR_FLUENT_BIT_VERSION=$(./scripts/get_linux_version.sh"$BUILD_VERSION""version")KINESIS_PLUGIN_TAG=$(./scripts/get_linux_version.sh"$BUILD_VERSION""kinesis-plugin")# ... 获取其他插件版本 ...IMAGE_TAG_SUFFIX=al"$AL_TAG"echo"Using AL_TAG:$AL_TAG"echo"Using FLB_VERSION:$FLB_VERSION"echo"Using AWS_FOR_FLUENT_BIT_VERSION:$AWS_FOR_FLUENT_BIT_VERSION"# 使用 Docker Buildx 进行多平台构建docker buildx build\--platform linux/amd64,linux/arm64\--build-argAL_TAG=$AL_TAG\--build-argFLB_VERSION=$FLB_VERSION\--build-argAWS_FOR_FLUENT_BIT_VERSION=$AWS_FOR_FLUENT_BIT_VERSION\--build-argKINESIS_PLUGIN_TAG=$KINESIS_PLUGIN_TAG\--build-argFIREHOSE_PLUGIN_TAG=$FIREHOSE_PLUGIN_TAG\--build-argCLOUDWATCH_PLUGIN_TAG=$CLOUDWATCH_PLUGIN_TAG\-t"$REPOSITORY_URI:$AWS_FOR_FLUENT_BIT_VERSION"\-t"$REPOSITORY_URI:$AWS_FOR_FLUENT_BIT_VERSION-$IMAGE_TAG_SUFFIX"\--push.

代码注释:

  • 脚本首先验证BUILD_VERSION(例如,代表主要版本线2或3)。
  • 通过辅助脚本get_linux_version.shlinux.versionJSON配置文件中动态读取特定版本线的构建参数(基础镜像标签、Fluent Bit版本、插件版本等)。
  • 使用docker buildx build命令同时构建amd64arm64架构的镜像。
  • --build-arg传递构建参数给Dockerfile。
  • --push选项将构建好的多架构镜像清单直接推送到容器仓库。
    更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
    对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/6 1:33:39

RPA黑科技:3步自动优化希音商品页,效率飙升500%[特殊字符]

RPA黑科技&#xff1a;3步自动优化希音商品页&#xff0c;效率飙升500%&#x1f680;每天手动优化50个商品详情页到深夜&#xff1f;别让低效重复工作偷走你的爆款机会&#xff01;今天分享如何用影刀RPA打造智能优化机器人&#xff0c;原需8小时的任务现在5分钟自动完成——这…

作者头像 李华
网站建设 2026/5/12 9:35:40

震惊!选错云服务器代理商,你的业务将面临巨大风险!

震惊&#xff01;选错云服务器代理商&#xff0c;你的业务将面临巨大风险&#xff01;在数字化转型的浪潮中&#xff0c;云服务器已成为企业业务运行的基石。然而&#xff0c;许多企业在选择服务商时&#xff0c;往往只关注价格或品牌&#xff0c;却忽略了代理商这一关键环节。…

作者头像 李华
网站建设 2026/5/7 12:58:07

软件安装与卸载测试标准化流程指南

1 引言 安装与卸载作为用户接触软件的首末环节&#xff0c;其体验质量直接影响产品形象与用户留存。规范的安装/卸载测试流程是保障软件交付质量、提升用户满意度的关键环节。本规范旨在建立标准化测试框架&#xff0c;明确各阶段测试要点&#xff0c;为测试团队提供完整、可追…

作者头像 李华
网站建设 2026/5/12 0:33:01

书籍-《维特根斯坦文集》

《维特根斯坦文集》详细介绍 书籍基本信息 书名&#xff1a;维特根斯坦文集 作者&#xff1a;路德维希维特根斯坦&#xff08;Ludwig Wittgenstein&#xff0c;1889-1951年&#xff09; 成书时间&#xff1a;1953年&#xff08;遗作首次出版&#xff09;至现代完整版本 卷数&am…

作者头像 李华
网站建设 2026/5/11 13:49:50

20个渗透CTF练习平台资源(2025)

持续学习和实践&#xff0c;是每位安全从业者&#xff0c;尤其是红队成员&#xff0c;保持竞争力的关键。CTF (Capture The Flag&#xff0c;夺旗赛) 和渗透测试练习平台&#xff0c;为我们提供了磨练技能的绝佳环境。 紧接上次的30天渗透测试练习计划&#xff08;2025 第一部…

作者头像 李华
网站建设 2026/5/12 6:17:24

AI营销技术强的机构

AI营销技术强的机构&#xff1a;如何选择并利用优质AI营销服务随着人工智能技术的快速发展&#xff0c;越来越多的企业开始利用AI营销来提升品牌影响力和市场竞争力。然而&#xff0c;在众多提供AI营销技术的机构中&#xff0c;如何选择一家真正具备强大技术和专业能力的机构&a…

作者头像 李华