监控 CloudWatch 日志
编辑监控 CloudWatch 日志
编辑在本节中,您将学习如何使用 Amazon Data Firehose 将 CloudWatch 日志中的日志事件导出到 Elastic 集群。
您将执行以下步骤
- 在 Kibana 中安装 AWS 集成
- 选择要监控的 CloudWatch 日志组
- 在 Amazon Data Firehose 中创建交付流
- 设置订阅筛选器以使用 Firehose 流转发日志
- 在 Kibana 中可视化您的日志
开始之前
编辑我们假设您已经拥有
- 一个具有从 AWS 拉取必要数据的权限的 AWS 账户。
- 在 Elastic Cloud 上使用我们托管的 Elasticsearch Service 进行部署。该部署包括一个用于存储和搜索数据的 Elasticsearch 集群,以及一个用于可视化和管理数据的 Kibana。AWS Data Firehose 仅适用于 Elastic Cloud 上运行的 Elastic Stack 7.17 或更高版本。
不支持 AWS PrivateLink。请确保部署在 AWS 上,因为 Amazon Data Firehose 交付流专门连接到需要位于 AWS 上的端点。
步骤 1:在 Kibana 中安装 AWS 集成
编辑- 在主菜单中找到 集成,或使用 全局搜索字段。
- 浏览目录以找到 AWS 集成。
- 导航到 设置 选项卡,然后单击 安装 AWS 资产。
步骤 2:选择要监控的 CloudWatch 日志组
编辑在本教程中,您将从基于 AWS Lambda 的应用程序收集应用程序日志,并将其转发到 Elastic。
创建 Lambda 函数
如果您已经有一个 Lambda 函数,或者任何其他将日志发送到 CloudWatch 日志组的服务或应用程序,则可以跳过此部分。记下要从中收集日志事件的日志组,然后转到下一部分。
与 AWS 中的许多其他服务和平台一样,Lambda 函数默认情况下直接将日志记录到 CloudWatch。
- 转到 AWS 控制台 并打开 AWS Lambda 页面。
- 单击 创建函数,然后选择从头开始创建函数的选项。
- 选择一个 函数名称。
- 作为 运行时,选择最近的 Python 版本。例如,Python 3.11。
- 在
arm64
和x86_64
之间选择您想要的 架构。 -
确认并创建 Lambda 函数。
当 AWS 完成创建函数时,转到 代码源 部分,然后将以下 Python 代码粘贴为函数源代码
import json def lambda_handler(event, context): print("Received event: " + json.dumps(event))
- 单击 部署 以将更改部署到源代码。
生成一些示例日志
函数准备就绪后,您可以调用它几次以生成示例日志。在函数页面上,请按照以下步骤操作
- 选择 测试。
- 选择创建新测试事件的选项。
- 命名测试事件,然后 保存 更改。
- 单击 测试 按钮以执行该函数。
访问该函数的日志组。通常,AWS 控制台会提供一个方便的链接,可以直接跳转到它为此函数的日志创建的日志组。您应该获得类似于以下内容的信息
记下此 Lambda 函数的日志组名称,因为在后续步骤中将需要它。
步骤 3:在 Amazon Data Firehose 中创建流
编辑- 转到 AWS 控制台,然后导航到 Amazon Data Firehose。
- 单击 创建 Firehose 流,然后选择您的 Firehose 流的源和目标。除非您正在从 Kinesis Data Streams 流式传输数据,否则将源设置为
Direct PUT
,并将目标设置为Elastic
。 -
提供一个有意义的 Firehose 流名称,这将使您以后能够识别此交付流。
对于高级用例,可以通过调用自定义 Lambda 函数来转换源记录。使用 Elastic 集成时,不应需要此操作。
- 在 目标设置 部分中,设置以下参数:
es_datastream_name
=logs-aws.generic-default
Firehose 流现在已准备好将日志发送到您的 Elastic Cloud 部署。
步骤 4:将 Lambda 函数日志事件发送到 Firehose 流
编辑要将日志事件从 CloudWatch 发送到 Firehose,请打开 Lambda 服务正在记录的日志组,并创建订阅筛选器。
为 Amazon Data Firehose 创建订阅筛选器
订阅筛选器允许您从日志组中选取日志事件,并将其转发到其他服务,例如 Amazon Kinesis 流、Amazon Data Firehose 流或 AWS Lambda。
- 在日志组页面上,选择 订阅筛选器,然后单击 创建 Amazon Data Firehose 订阅筛选器 按钮。
从这里开始,请按照以下步骤操作
- 选择目标。选择您在上一步中创建的 Firehose 流。
-
授予 CloudWatch 服务将日志事件发送到 Firehose 中的流的权限
- 创建一个新角色,该角色具有允许 CloudWatch 服务承担该角色的信任策略。
- 向该角色分配一个策略,该策略允许“将记录放入” Firehose 流。
-
创建一个新的 IAM 角色,并使用以下 JSON 作为信任策略
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.<REGION>.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringLike": { "aws:SourceArn": "arn:aws:logs:<REGION>:<ACCOUNT_ID>:*" } } } ] }
-
使用以下 JSON 文件向 IAM 角色分配策略
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "firehose:PutRecord", "Resource": "arn:aws:firehose:<REGION>:<ACCOUNT_ID>:deliverystream/<YOUR_FIREHOSE_STREAM>" } ] }
当新角色准备就绪时,您可以在订阅筛选器中选择它。
- 配置日志格式和筛选器。在 日志格式 选项中选择“其他”。
-
设置日志格式和筛选器
如果要转发所有日志事件,可以清空筛选器模式。您可以使用 订阅筛选器模式 仅转发与该模式匹配的日志事件。同一页面上的 测试模式 工具允许您在创建订阅筛选器之前测试筛选器模式。
-
生成其他日志。
再次打开 AWS Lambda 页面,选择您创建的函数,然后执行几次以生成新的日志事件。
检查是否存在目标错误日志
在 AWS 控制台上,导航到您的 Firehose 流,然后在 目标错误日志 部分中检查条目。
如果一切运行顺利,则此列表为空。如果有错误,您可以检查详细信息。以下示例显示了一个由于身份验证设置错误而无法将记录发送到 Elastic Stack 的交付流
Firehose 交付流报告
- 失败交付的数量。
- 失败详细信息。
步骤 5:在 Kibana 中可视化您的日志
编辑随着日志流式传输到 Elastic Stack,您现在可以在 Kibana 中可视化它们。
在 Kibana 中,导航到 Discover 页面,然后选择与 Firehose 流名称匹配的索引模式。以下是将 Lambda 函数转发到 logs-aws.generic-default
数据流的日志示例