highlight.io 接入 AWS 日志:ECS FireLens、Kinesis Firehose 与 Fluent Forward 完整配置指南
发布时间:2026/9/26 10:18:20 作者:尧图编辑部 阅读量:1,286

可观测性后端【免费下载链接】highlighthighlight.io: The open source, full-stack monitoring platform. Error monitoring, session replay, logging, distributed tracing, and more.项目地址https://gitcode.com/gh_mirrors/hi/highlight点击查看免费下载导读本指南基于 highlight.io 官方文档与仓库源码讲解如何在 AWS 环境中把日志统一汇聚到 highlight.io 平台。你将掌握三种主流接入方式——ECS Fargate 容器通过 FireLens/Fluent Forward 直连、基础设施RDS、MSK、CloudWatch 等日志通过 Kinesis Firehose 走 HTTP 端点导入以及 Firelens Fluent Bit 结构化 JSON 日志导出并了解 highlight.io 服务端backend/http/logging.go、backend/http/firehose.go对这些数据的实际解析逻辑。在 AWS 上部署应用或基础设施后最省心的做法是把日志直接流式传输到 highlight.io让错误监控、会话回放、日志检索在一个平台内完成。绝大多数 AWS 服务都支持通过 Fluent Forward 协议流式输出日志只是具体配置方式略有差异。本文围绕官方文档 docs-content/getting-started/4_server/6_hosting/aws.md 展开并辅以仓库源码佐证其接入原理。接入方案总览场景推荐方案数据通道落地端点ECS Fargate 容器日志FireLens Fluent Bit sidecarFluent Forward 协议otel.highlight.io:24224基础设施 / 其他服务日志RDS、MSK 等Kinesis Data Stream Kinesis Data FirehoseHTTP 端点支持 GZIPhttps://pub.highlight.io/v1/logs/firehoseECS 结构化 JSON 日志Firelens Fluent Bit 解析后写入 KinesisKinesis Data Stream → Firehose → HTTP同上AWS ECS 容器日志FireLens Fluent Forward对 ECS Fargate 容器而言官方推荐在业务容器旁部署一个aws-for-fluent-bit日志路由代理sidecar由它把容器日志以Fluent Forward协议转发到 highlight.io。highlight.io 的 OpenTelemetry Collector 默认在0.0.0.0:24224端口监听 Fluent Forward 流量见 deploy/otel-collector.yaml 中的fluentforwardreceiver 配置因此无需额外搭建日志网关。以下是一份可用的 ECS 任务定义示例包含一个 dummy 应用容器和并排运行的 Fluent Bit 代理{ family: firelens-example-highlight, taskRoleArn: arn:aws:iam::XXXXXXXXXXXX:role/ecs_task_iam_role, executionRoleArn: arn:aws:iam::XXXXXXXXXXXX:role/ecs_task_execution_role, containerDefinitions: [ { essential: true, image: 906394416424.dkr.ecr.us-east-1.amazonaws.com/aws-for-fluent-bit:stable, name: log_router, firelensConfiguration: { type: fluentbit } }, { essential: true, image: my-app:latest, name: app, logConfiguration: { logDriver: awsfirelens, options: { Name: Forward, Host: otel.highlight.io, Tag: highlight.project_idYOUR_PROJECT_ID } } } ] }关键参数说明firelensConfiguration.type固定为fluentbit表示由 ECS 自动注入 FireLens 配置并启动 Fluent Bit 代理。logDriver应用容器使用awsfirelens驱动把日志交给同任务内的log_router容器。options.Name设置为Forward启用 Fluent Forward 输出插件。options.Hosthighlight.io 的 OpenTelemetry Collector 地址otel.highlight.ioFluent Forward 监听端口 24224见 deploy/otel-collector.yaml。options.Tag以highlight.project_idYOUR_PROJECT_ID形式携带项目标识。highlight.io 的 OTel Collector 通过attributesprocessor 将highlight.project_id写入日志资源属性再经batchprocessor 按x-highlight-project元数据键路由到对应项目见 deploy/otel-collector.yaml 的processors.attributes与processors.batch.metadata_keys。在本地复现该链路时可参考仓库中的 e2e/opentelemetry/fluentbit/fluent.conf其 INPUT 段以forward插件监听并将${HIGHLIGHT_PROJECT_ID}作为 tagOUTPUT 段同样指向otel.highlight.io:24224[INPUT] Name forward tag ${HIGHLIGHT_PROJECT_ID} Buffer_Chunk_Size 1M Buffer_Max_Size 6M [OUTPUT] Name forward Match * Host otel.highlight.io Port 24224AWS Kinesis Firehose基础设施日志的 HTTP 导出对于不跑在 ECS 里的核心基础设施日志例如 RDS Postgres、MSK Kafka最直接的方式是通过AWS Kinesis Firehose 把日志投递到 highlight.io 的 HTTP 日志端点。这种方式不依赖容器运行时任何能写入 Kinesis 的日志源CloudWatch Logs、直接 PutRecord 等都可以接入。第一步创建 Kinesis Data Stream首先在 AWS 控制台创建一个Kinesis Data Stream作为日志的中转缓冲队列。CloudWatch Logs 或 ECS 服务把日志写入该流再由 Firehose 消费。第二步创建 Kinesis Data FirehoseHTTP 目的地创建Kinesis Data Firehose传输流目的地选择HTTP endpoint并按下表配置配置项取值HTTP 端点 URLhttps://pub.highlight.io/v1/logs/firehoseContent encoding启用GZIP请求参数x-highlight-project 你的 highlight 项目 ID为什么必须开 GZIP、传x-highlight-project这直接对应 highlight.io 服务端 backend/http/firehose.go 的ExtractFirehoseMetadata实现Firehose 请求体中的每条记录数据是 Base64 编码的服务端先尝试按 GZIP 解压gzip.NewReader解压失败才当作明文处理同时它会解析 HTTP 头X-Amz-Firehose-Common-Attributes中的commonAttributes.x-highlight-project经model2.FromVerboseID转换为内部项目 ID。因此x-highlight-project必须作为 Firehose 的common attributes通用属性下发而不是普通请求参数日志才能路由到正确的项目。服务端最终由 backend/http/logging.go 的HandleFirehoseLog处理每一条 Base64 GZIP 解码后的记录会依次尝试按以下格式解析见 backend/http/payload.goCloudFrontJsonPayloadCloudFront 访问日志FireLensFluentBitPayload带timestamp的 Fluent Bit JSONFireLensPinoPayloadPino 结构化日志level数字映射到 trace/debug/info/warn/error/fatalFireLensPayload普通 FireLens JSONstderr来源映射为 error 级别CloudWatchPayloadCloudWatch Logs 订阅事件自动附加log_group、log_stream、owner等属性JsonPayload通用 JSON自动提取level/severity与time/timestamp/ts字段解析成功的记录会被转换为 highlight 日志模型写入 ClickHouse。仓库中的 backend/http/logging_test.go如TestHandleFirehoseCloudwatch、TestHandleFirehoseFireLens、TestHandleKinesisFirehoseCloudFrontJson、TestHandleKinesisFirehoseJson用各类真实 Firehose 载荷验证了这条链路包括 GZIP 压缩、X-Amz-Firehose-Common-Attributes头解析与最终服务名断言firehose.cloudfront、firehose.json等。第三步连接 CloudWatch Log Stream如果你的日志目前汇聚在CloudWatch Logs最后一步是为 CloudWatch Log Group 添加Kinesis Subscription Filter将其关联到第一步创建的 Kinesis Data Stream。此后CloudWatch 中的每条新日志都会自动流向 Kinesis → Firehose → highlight.io。至此日志会持续流入 highlight.io 的 OpenTelemetry Collector 并被摄入到你的项目可直接在 highlight.io 日志检索界面中搜索与浏览。说明原文档提示这是一份手动配置指南自动化 CloudFormation 模板集成正在开发中配置过程中如有问题可向 highlight.io 社区求助。Firelens Fluent Bit JSON 结构化日志导出到 Kinesis如果你的 ECS 服务产出的是结构化 JSON 日志例如使用sikwan/random-json-logger之类的示例应用可以通过Firelens 把 JSON 日志解析后写入 Kinesis Data Stream再经由上文建好的 Firehose 送达 highlight.io。Kinesis Data Stream 与 Kinesis Data Firehose 的创建步骤与上一节相同这里只需额外把 ECS 服务接到 Kinesis Data Stream 上。一份典型的 ECS 任务定义如下主服务容器example-json-logger使用awsfirelens驱动日志路由 sidecarlog_router运行aws-for-fluent-bit镜像并按parse-json.conf配置解析 JSON 后转发到 Kinesis Data Stream{ containerDefinitions: [ { name: example-json-logger, image: sikwan/random-json-logger, logConfiguration: { logDriver: awsfirelens, options: { region: us-east-2, stream: YOUR-AWS-KINESIS-DATA-STREAM, Name: kinesis_streams } } }, { name: log_router, image: public.ecr.aws/aws-observability/aws-for-fluent-bit:stable, firelensConfiguration: { type: fluentbit, options: { config-file-type: file, config-file-value: /fluent-bit/configs/parse-json.conf, enable-ecs-log-metadata: true } } } ] }配置要点options.Name为kinesis_streams这是 Fluent Bit 的 Kinesis 输出插件名配合region与stream指定目标流。config-file-value指向parse-json.conf即 Fluent Bit 解析 JSON 的配置文件确保结构化字段level、timestamp、自定义字段等被保留下来。这些字段到达 highlight.io 后由 backend/http/payload.go 中的解析器提取level用于映射日志级别timestamp/time用于时间戳其余字段自动进入日志属性最终container_name会成为服务名service.name。IAM 权限授予 kinesis:PutRecordsFireLens 的 Fluent Bit 代理需要向 Kinesis Data Stream 写入记录因此你可能需要更新ECS 任务执行角色添加kinesis:PutRecords权限{ Version: 2012-10-17, Statement: [ { Effect: Allow, Action: kinesis:PutRecords, Resource: arn:aws:kinesis:us-east-2:XXXXXXXXXX:stream/your-kinesis-data-stream } ] }完成后ECR 中的容器日志就会以 JSON 形式流入 Kinesis → Firehose → highlight.io并能在 highlight.io 中按结构化字段检索。验证与排错要点确认端点可达Fluent Forward 场景检查otel.highlight.io:24224是否可达Firehose 场景确认 HTTP 目的地 URL 为https://pub.highlight.io/v1/logs/firehose且开启了 GZIP。确认项目 ID 传对Fluent Forward 场景看 tag 中的highlight.project_idFirehose 场景看 common attributes 中的x-highlight-project。两者都会在服务端被解析为内部项目 IDbackend/http/firehose.go 使用FromVerboseID。IAM 权限Firelens → Kinesis 链路必须授予任务执行角色kinesis:PutRecords且 Resource ARN 与实际流一致。日志格式兜底highlight.io 服务端对 Firehose 记录支持多种格式自动识别CloudWatch、FireLens、Pino、CloudFront、通用 JSON见 backend/http/payload.go即使来源格式不标准也会按通用 JSON 兜底解析日志不会丢失。本地复现可借助 e2e/opentelemetry/fluentbit/fluent.conf 与 e2e/opentelemetry/fluentbit/compose.yml 在本地启动 Fluent Bit 验证 Forward 链路再对照 backend/http/logging_test.go 中的 Firehose 载荷样例理解服务端解析行为。小结无论你的日志来自 ECS 容器、RDS/MSK 等基础设施还是 CloudWatch Logs都可以通过本文的三种方式接入 highlight.io容器内 FireLens Fluent Forward 直连最轻量Kinesis Firehose HTTP 端点最适合非容器基础设施Firelens Fluent Bit JSON 解析则兼顾了结构化字段的完整保留。三者最终都汇聚到 highlight.io 的 OpenTelemetry Collector 并落入统一日志检索配合 highlight.io 全栈监控能力即可在一个平台内完成日志、错误与追踪的统一观测。赞分享可观测性后端【免费下载链接】highlighthighlight.io: The open source, full-stack monitoring platform. Error monitoring, session replay, logging, distributed tracing, and more.项目地址https://gitcode.com/gh_mirrors/hi/highlight点击查看免费下载相关推荐highlight.io 日志接入指南使用 Fluent Forwardfluentd / Fluent Bit将服务器日志导入 highlight.iohighlight.io 日志接入指南使用 Fluent Forwardfluentd / Fluent Bit将服务器日志导入 highlight.io可观测性后端Fleet 日志输出目的地配置实战使用 AWS Kinesis 与 Firehose 对接 Sumo Logic 和 SplunkFleet 日志输出目的地配置实战使用 AWS Kinesis 与 Firehose 对接 Sumo Logic 和 Splunk 在设备规模扩大后把 os后端前端企业应用运维网络安全highlight.io 接入 Systemd Journald 日志基于 OpenTelemetry Collector 的完整配置指南highlight.io 接入 Systemd Journald 日志基于 OpenTelemetry Collector 的完整配置指南 本文介绍如何将运行可观测性后端上一篇红米AX3000 SSH解锁完整攻略5分钟轻松获取root权限下一篇5步精通红米AX3000解锁SSH root权限全攻略创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考