监控 CloudWatch 日志
编辑监控 CloudWatch 日志
编辑在本节中,您将学习如何使用 Amazon Data Firehose 将 CloudWatch 日志事件导出到 Elastic 集群。
您将执行以下步骤
- 在 Kibana 中安装 AWS 集成
- 选择要监控的 CloudWatch 日志组
- 在 Amazon Data Firehose 中创建交付流
- 设置订阅过滤器以使用 Firehose 流转发日志
- 在 Kibana 中可视化您的日志
开始之前
编辑我们假设您已经拥有:
- 一个拥有从 AWS 拉取必要数据的权限的 AWS 账户。
- 在 Elastic Cloud 上使用我们的托管 Elasticsearch 服务的部署。该部署包括一个用于存储和搜索数据的 Elasticsearch 集群,以及一个用于可视化和管理数据的 Kibana。AWS Data Firehose 仅适用于在 Elastic Cloud 上运行的 7.17 或更高版本的 Elastic Stack。
不支持 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 中,导航到 发现 页面并选择与 Firehose 流名称匹配的索引模式。以下是您转发到 logs-aws.generic-default
数据流的 Lambda 函数的日志示例: