架构图
使用默认参数部署此解决方案会在 AWS 云中构建以下环境。
此解决方案在您的 AWS 云账户中部署 AWS CloudFormation 模板并完成以下设置。
-
Amazon CloudFront 分发托管在 Amazon S3 存储桶中的前端 Web UI 资源。
-
Amazon Cognito 用户池 或 OpenID 连接器 (OIDC) 可提供身份认证。
-
AWS AppSync 提供后端 GraphQL API。
-
Amazon DynamoDB 将解决方案相关信息存储为后端数据库。
-
AWS Lambda 与其它 AWS 服务交互,处理管理日志管道或日志代理的核心逻辑,并获取 DynamoDB 表中更新的信息。
-
AWS Step Functions 按需协调一组预定义堆栈的 AWS CloudFormation 部署用于日志管道管理。日志管道堆栈部署单独的 AWS 资源,用于收集和处理日志,并将它们摄取到 Amazon OpenSearch Service 中以进行进一步分析和可视化。
-
AWS Systems Manager 和 Amazon EventBridge 用于管理从应用服务器收集日志的日志代理,例如为应用服务器安装日志代理(Fluent Bit)和监控代理的健康状态。
-
Amazon EC2 或 Amazon EKS 安装 Fluent Bit 代理,并将日志数据上传到应用日志管道。
-
应用程序日志管道读取、解析、处理应用程序日志并将它们摄取到 Amazon OpenSearch 域或 Light Engine 分析引擎中。
-
服务日志管道读取、解析、处理 AWS 服务日志并将它们摄取到 Amazon OpenSearch 域或 Light Engine 分析引擎中。
此解决方案支持两种类型的日志管道:AWS 服务日志分析管道 和 应用日志分析管道。
AWS 服务日志分析管道
日志通支持 AWS 服务的日志分析,例如 Amazon S3 访问日志和 Application Load Balancer 访问日志。 有关支持的 AWS 服务的完整列表,请参阅 支持的 AWS 服务日志。
AWS 服务将日志输出到不同的目的地,包括 Amazon S3 存储桶、CloudWatch 日志组、Kinesis Data Streams 和 Kinesis Firehose。 该解决方案使用不同的工作流程摄取这些日志。
注意
日志通支持跨账户日志摄取。 如果您想从同一帐户摄取日志,Sources 组中的资源需要与您的日志通帐户位于同一帐户中。 否则,它们将位于另一个 AWS 账户中。
通过 Amazon S3 提取日志
注意
本节适用于: Amazon S3 访问日志,CloudFront 标准日志,CloudTrail 日志 (S3),Application Load Balancing 访问日志,WAF 日志,VPC 流 日志 (S3),AWS Config 日志,Amazon RDS/Aurora 日志,AWS Lambda 日志。
此工作流支持以下两个类别:
-
直接记录到Amazon S3桶的日志(OpenSearch作为日志分析引擎)
该AWS服务可以直接将日志记录到 Amazon S3 桶。
-
通过Kinesis Data Firehose (KDF) 记录到Amazon S3桶的日志(OpenSearch作为日志分析引擎)
该AWS服务不能直接将日志放入 Amazon S3 桶,而是只能记录到 Amazon CloudWatch。 使用KDF 先从CloudWatch 日志组订阅日志,然后放入Amazon S3桶。
日志管道运行以下工作流:
-
AWS 服务将日志存储在 Amazon S3 存储桶(日志桶)中。
-
创建新日志文件时会通过 S3 事件通知 向 Amazon SQS 发送通知。
-
Amazon SQS 触发 Lambda(日志处理器)运行。
-
日志处理器读取并处理日志文件。
-
日志处理器将日志提取到 Amazon OpenSearch 中。
-
处理失败的日志导出到 Amazon S3 存储桶(备份桶)。
对于跨账户的日志摄取,AWS 服务日志将产生并且存放在当前账户的 S3 桶中,其余资源仍然在日志通 的账户中。
-
直接记录到Amazon S3桶的日志(Light Engine作为日志分析引擎)
该AWS服务可以直接将日志记录到 Amazon S3 桶。
日志管道运行以下工作流:
- AWS服务的日志存储在Amazon S3存储桶(Log Bucket)中。
- 创建新日志文件时,将使用 S3 事件通知将事件通知发送到 Amazon SQS。
- Amazon SQS 触发 Amazon Lambda 执行。
- AWS Lambda 从 Amazon S3 日志存储桶获取对象。
- AWS Lambda 将对象放入暂存桶中。
- 日志处理器 AWS Step Functions 批量处理存储在暂存存储桶中的原始日志文件。
- 日志处理器 AWS Step Functions 将日志数据转换为 Apache Parquet 格式,并根据时间和区域等条件自动对所有传入数据进行分区。
通过 Amazon Kinesis Data Streams (KDS) 提取日志
注意
本节适用于:CloudFront 实时日志,CloudTrail 日志 (CloudWatch),VPC 流日志 (CloudWatch).
此工作流支持以下两个类别:
-
直接记录到Amazon KDS 的实时日志
该AWS服务可以直接将日志发送到 Amazon KDS.
-
使用Amazon KDS 订阅的实时流日志
该AWS服务将日志记录到 Amazon CloudWatch。使用KDS 从CloudWatch 日志组订阅实时流日志。
日志管道运行以下工作流:
-
AWS服务日志实时的发送到 to Kinesis Data Stream.
-
Amazon KDS 触发 Lambda(日志处理器)运行。
-
日志处理器读取并处理日志记录并将日志摄取到 Amazon OpenSearch Service 域中。
-
处理失败的日志导出到 Amazon S3 存储桶(备份桶)。
对于跨账户的日志摄取,AWS 服务日志将产生并且存放在当前账户的 CloudWatch 中,其余资源仍然在日志通的账户中。
重要
此解决方案不支持 CloudFront 实时日志的跨账户摄取。
应用日志分析管道
日志通支持对应用程序日志进行日志分析,例如 Nginx/Apache HTTP 服务器日志或自定义应用程序日志。
注意
日志通支持跨账户日志摄取。 如果您想从同一帐户摄取日志,Sources 组中的资源需要与您的日志通 帐户位于同一帐户中。 否则,它们将位于另一个 AWS 账户中。
来自 Amazon EC2 / Amazon EKS 的日志
日志管道运行以下工作流:
-
Fluent Bit 作为底层日志代理,从应用服务器收集日志并发送到可选的 Log Buffer,或直接摄取到 OpenSearch 域中。
-
Log Buffer 触发 Lambda(日志处理器)运行。
-
日志处理器读取并处理日志记录并将日志摄取到 Amazon OpenSearch Service 域中。
-
处理失败的日志导出到 Amazon S3 存储桶(备份桶)。
- 自 Amazon EC2/ Amazon EKS的日志(Light Engine作为日志分析引擎)
日志管道运行以下工作流:
- Fluent Bit 作为底层日志代理,从应用程序服务器收集日志并将其发送到可选的日志缓冲区。
- Log Buffer 触发 Lambda 将日志存储桶中的对象复制到暂存存储桶。
- Amazon SQS 启动 AWS Lambda。
- AWS Lambda 从 Amazon S3 日志存储桶获取对象。
- AWS Lambda 将对象放入暂存桶中。
- 日志处理器 AWS Step Functions 批量处理存储在暂存存储桶中的原始日志文件。
- 日志处理器 AWS Step Functions 将日志数据转换为 Apache Parquet 格式,并根据时间和区域等条件自动对所有传入数据进行分区。
来自 Syslog 客户端的日志
重要
- 请确保您的 Syslog 生成器/发送器的子网已连接到日志通的两个私有子网,以便可以提取日志,您需要使用 VPC Peering Connection 或 Transit Gateway 连接这些 VPC。
- 架构图中的 NLB 和 ECS 容器只会在您创建 Syslog 摄取时提供,并在没有 Syslog 摄取时自动删除。
-
Syslog 代理(如 Rsyslog)将日志发送到日志通私有子网中的网络负载均衡器 (NLB)。NLB 会将日志路由到特定的 Amazon Elastic Container Service (ECS) Fargate 服务。
-
Fluent Bit 作为底层日志代理,从应用服务器收集日志并发送到可选的 Log Buffer,或直接摄取到 OpenSearch 域中。
-
Log Buffer 触发 Lambda(日志处理器)运行。
-
日志处理器读取并处理日志记录并将日志摄取到Amazon OpenSearch Service中。
-
处理失败的日志导出到 Amazon S3 存储桶(备份桶)。