news 2026/7/1 15:53:46

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/7/1 13:52:26

前端开发:提示词驱动的全链路

2025 前端开发大变局&#xff1a;从“手写代码”到“提示词驱动”的全链路革命 引言&#xff1a;前端开发的新常态 在 2025 年&#xff0c;如果你还在逐行敲入 <div> 和 handleOnClick&#xff0c;那么你可能正在掉队。前端领域已经进入了**“提示词即开发” (Prompt-a…

作者头像 李华
网站建设 2026/7/1 13:52:27

影刀RPA实战:3步搞定希音客户行为数据提取,效率飙升[特殊字符]

影刀RPA实战&#xff1a;3步搞定希音客户行为数据提取&#xff0c;效率飙升&#x1f680;每天手动整理希音数据浪费3小时&#xff1f;别让低效重复工作偷走你的创作时间&#xff01;今天分享如何用影刀RPA打造智能数据提取机器人&#xff0c;原需半天的任务现在3分钟自动完成—…

作者头像 李华
网站建设 2026/7/1 14:39:11

CTF中Web题目的常见题型及解题姿势,零基础入门到精通,收藏这篇就够了

一、基础知识类题目 考察基本的查看网页源代码、HTTP请求、修改页面元素等。 这些题很简单&#xff0c;比较难的比赛应该不会单独出&#xff0c;就算有应该也是Web的签到题。 实际做题的时候基本都是和其他更复杂的知识结合起来出现。 姿势&#xff1a;恶补基础知识就行 查…

作者头像 李华
网站建设 2026/7/1 13:52:29

测试驱动开发(TDD)的实践与思考

在敏捷开发与DevOps浪潮席卷软件工程的今天&#xff0c;测试驱动开发&#xff08;Test-Driven Development&#xff09;作为一项经典而充满争议的实践&#xff0c;始终占据着质量保障体系的核心位置。对于专业测试人员而言&#xff0c;TDD不仅是开发方法的变革&#xff0c;更是…

作者头像 李华
网站建设 2026/7/1 16:10:26

PySpark实战 - 2.2 利用Spark SQL计算总分与平均分

文章目录1. 实战概述2. 实战步骤3. 实战总结1. 实战概述 本次实战基于 Spark SQL 对 HDFS 上的学生成绩文本文件进行分析&#xff0c;通过 split 函数拆分姓名与各科成绩&#xff0c;利用嵌套查询和聚合计算&#xff0c;实现每位学生的总分与保留一位小数的平均分统计&#xf…

作者头像 李华
网站建设 2026/7/1 1:54:59

未来之窗昭和仙君(五十六)页面_预览模式——东方仙盟筑基期

未来之窗昭和仙君 - 一、功能概述此页面_预览模式功能用于将页面中的特定输入框转换为只读状态&#xff0c;呈现出预览模式。该功能支持对多种输入框类型进行处理&#xff0c;默认处理文本框、日期框和数字框&#xff0c;也可以自定义输入框类型。在处理时&#xff0c;会将输入…

作者头像 李华