监控 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 集成
编辑
  1. 在主菜单中找到 集成,或使用 全局搜索字段
  2. 浏览目录以查找 AWS 集成。
  3. 导航到 设置 选项卡,然后单击 安装 AWS 资源
步骤 2:选择要监控的 CloudWatch 日志组
编辑
CloudWatch log group

在本教程中,您将从基于 AWS Lambda 的应用程序收集应用程序日志并将其转发到 Elastic。

创建 Lambda 函数

如果您已经有 Lambda 函数或任何其他将日志发送到 CloudWatch 日志组的服务或应用程序,则可以跳过此部分。记下您要从中收集日志事件的日志组,然后转到下一部分。

与 AWS 中许多其他服务和平台一样,Lambda 函数原生直接记录到 CloudWatch。

  1. 转到 AWS 控制台 并打开 AWS Lambda 页面。
  2. 单击 创建函数 并选择从头开始创建函数的选项。
  3. 选择 函数名称
  4. 作为 运行时,选择最新版本的 Python。例如,Python 3.11。
  5. arm64x86_64 之间选择您的 架构
  6. 确认并创建 Lambda 函数。

    AWS 完成函数创建后,转到 代码源 部分,并将以下 Python 代码粘贴为函数源代码

    import json
    
    def lambda_handler(event, context):
        print("Received event: " + json.dumps(event))
  7. 单击 部署 将更改部署到源代码。

生成一些示例日志

准备好函数后,您可以调用它几次以生成示例日志。在函数页面上,请按照以下步骤操作:

  1. 选择 测试
  2. 选择创建新测试事件的选项。
  3. 命名测试事件并 保存 更改。
  4. 单击 测试 按钮执行函数。

访问函数的日志组。通常,AWS 控制台提供一个方便的链接,可以直接跳转到为该函数日志创建的日志组。您应该会看到类似以下内容:

CloudWatch log group with sample logs

记下此 Lambda 函数的日志组名称,因为您将在接下来的步骤中需要它。

步骤 3:在 Amazon Data Firehose 中创建流
编辑
Amazon Firehose Stream
  1. 转到 AWS 控制台 并导航到 Amazon Data Firehose。
  2. 单击 创建 Firehose 流 并选择 Firehose 流的源和目标。除非您是从 Kinesis Data Streams 流式传输数据,否则请将源设置为 Direct PUT,将目标设置为 Elastic
  3. 提供一个有意义的 Firehose 流名称,以便您以后能够识别此交付流。

    对于高级用例,可以通过调用自定义 Lambda 函数来转换源记录。使用 Elastic 集成时,这应该不需要。

  4. 目标设置 部分,设置以下参数:es_datastream_name = logs-aws.generic-default

Firehose 流现在已准备好将日志发送到您的 Elastic Cloud 部署。

步骤 4:将 Lambda 函数日志事件发送到 Firehose 流
编辑
CloudWatch subscription filter

要将日志事件从 CloudWatch 发送到 Firehose,请打开 Lambda 服务正在记录日志的日志组并创建一个订阅过滤器。

为 Amazon Data Firehose 创建订阅过滤器

订阅过滤器 允许您从日志组中选择日志事件并将其转发到其他服务,例如 Amazon Kinesis 流、Amazon Data Firehose 流或 AWS Lambda。

  1. 在日志组页面上,选择 订阅过滤器 并单击 创建 Amazon Data Firehose 订阅过滤器 按钮。

在此处,请按照以下步骤操作:

  1. 选择目标。选择您在上一步中创建的 Firehose 流。
  2. 授予 CloudWatch 服务向 Firehose 中的流发送日志事件的权限。

    1. 创建一个具有信任策略的新角色,该策略允许 CloudWatch 服务承担该角色。
    2. 使用允许“将记录放入”Firehose 流的策略为该角色分配策略。
  3. 创建一个新的 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>:*"
                    }
                }
            }
        ]
    }
  4. 使用以下 JSON 文件为 IAM 角色分配策略:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": "firehose:PutRecord",
                "Resource": "arn:aws:firehose:<REGION>:<ACCOUNT_ID>:deliverystream/<YOUR_FIREHOSE_STREAM>"
            }
        ]
    }

准备好新角色后,您可以在订阅过滤器中选择它。

  1. 配置日志格式和过滤器。在 日志格式 选项中选择“其他”。
  2. 设置日志格式和过滤器

    如果您想转发所有日志事件,可以清空过滤器模式。您可以使用 订阅过滤器模式 仅转发与模式匹配的日志事件。同一页面上的 测试模式 工具允许您在创建订阅过滤器之前测试过滤器模式。

  3. 生成其他日志。

    再次打开 AWS Lambda 页面,选择您创建的函数,并执行几次以生成新的日志事件。

检查是否存在目标错误日志

AWS 控制台 上,导航到您的 Firehose 流并检查 目标错误日志 部分中的条目。

如果一切顺利运行,则此列表为空。如果出现错误,您可以检查详细信息。以下示例显示一个由于身份验证设置错误而无法将记录发送到 Elastic stack 的交付流:

Firehose destination errors

Firehose 传输流报告:

  • 失败交付的数量。
  • 失败详情。
步骤 5:在 Kibana 中可视化您的日志
编辑
Vizualize logs in Kibana

日志流式传输到 Elastic stack 后,您现在可以在 Kibana 中将其可视化。

在 Kibana 中,导航到 发现 页面并选择与 Firehose 流名称匹配的索引模式。以下是您转发到 logs-aws.generic-default 数据流的 Lambda 函数的日志示例:

Sample logs in Discover