使用 Elastic Agent 监控 Amazon Web Services (AWS)

编辑

使用 Elastic Agent 监控 Amazon Web Services (AWS)

编辑

在本教程中,您将学习如何部署 Elastic Agent 并使用 Elastic 可观测性监控您的 AWS 基础设施。

您将学到什么
编辑

您将学习如何

  • 从 AWS 收集 VPC 流日志和 S3 访问日志。
  • 从 CloudWatch 收集计费和 EC2 指标。
  • 安装和配置 Elastic Agent 以将日志和指标流式传输到 Elasticsearch。
  • 在 Kibana 中可视化您的数据。

有关更多用例,请查看 AWS 集成

首先,您将专注于监控日志,然后在确认您的日志已流式传输到 Elasticsearch 后添加指标。

开始之前
编辑

Elastic Cloud 上使用我们的托管 Elasticsearch 服务创建一个部署。该部署包括一个用于存储和搜索数据的 Elasticsearch 集群,以及一个用于可视化和管理数据的 Kibana。

在本教程中,我们假设

  • 您的 VPC 流日志已导出到 S3 存储桶。要了解如何操作,请参阅 AWS 文档中关于 将流日志发布到 S3 存储桶 的内容。
  • 您在 AWS 账户中拥有 EC2 实例。默认情况下,Amazon EC2 会将指标数据发送到 CloudWatch。如果您在账户中没有 EC2 实例,请参阅 AWS 文档,了解如何启动、连接和使用 Linux 实例。
步骤 1:为 VPC 流日志创建队列和通知
编辑

在此步骤中,您将创建一个 Amazon Simple Queue Service (SQS) 队列,并配置包含 VPC 流日志的 S3 存储桶,以便在 S3 存储桶中出现新日志时向 SQS 队列发送消息。

您应该已经有一个包含已导出 VPC 流日志的 S3 存储桶。如果没有,请立即创建一个。要了解如何操作,请参阅 将流日志发布到 S3 存储桶

创建 SQS 队列
编辑

要创建 SQS 队列

  1. 转到 SQS 控制台 并创建一个 SQS 队列。创建一个使用默认设置的标准 SQS 队列。

    确保您在与 S3 存储桶相同的区域中创建 SQS 队列。

  2. 编辑您创建的队列,并使用 JSON 对象定义高级访问策略。访问策略允许将 S3 ObjectCreated 事件发送到队列。

    {
      "Version": "2012-10-17",
      "Id": "example-ID",
      "Statement": [
        {
          "Sid": "example-statement-ID",
          "Effect": "Allow",
          "Principal": {
            "AWS": "*"
          },
          "Action": "SQS:SendMessage",
          "Resource": "<sqs-arn>", 
          "Condition": {
            "StringEquals": {
              "aws:SourceAccount": "<source-account>" 
            },
            "ArnLike": {
              "aws:SourceArn": "<s3-bucket-arn>" 
            }
          }
        }
      ]
    }

    <sqs-arn> 替换为 SQS 队列的 ARN。

    <source-account> 替换为您的 AWS 账户号码。

    <s3-bucket-arn> 替换为包含 VPC 流日志的 S3 存储桶的 ARN。

    保存您的更改并记下队列 URL。稍后在 Kibana 中配置 AWS 集成时,您将需要它。

启用 S3 存储桶上的事件通知
编辑

现在您的队列已创建,请转到包含 VPC 流日志的 S3 存储桶的属性,并启用事件通知

  1. 点击 创建事件通知
  2. 对于事件类型,选择 所有对象创建事件 以发送每个对象创建事件的通知。
  3. 对于目标,选择您刚刚创建的 SQS 队列。
步骤 2:安装 AWS 集成
编辑

在此步骤中,您将在 Kibana 中安装 AWS 集成。AWS 集成包含用于从 AWS 收集各种日志和指标的输入。您将首先配置集成以收集 VPC 流日志。在完成此操作后,您将学习如何添加 S3 访问日志。

要添加集成

  1. 在主菜单中找到 集成,或使用 全局搜索字段
  2. 在查询栏中,搜索 AWS 并选择 AWS 集成以查看有关它的更多详细信息。
  3. 点击 添加 AWS
  4. 配置集成名称,并可选地添加描述。

    如果您没有看到配置集成的选项,则您可能处于为新部署设计的流程中。按照步骤操作,然后在准备好配置集成时返回本教程。

  5. 指定连接到 AWS 和读取日志文件所需的 AWS 凭证。在本教程中,我们使用 AWS 访问密钥 ID 和密钥,但还有其他几种方法可以提供 AWS 凭证。要了解更多信息,请参阅 AWS 集成 文档。您指定的账户必须至少具有以下权限

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                  "s3:GetObject",
                  "sqs:ReceiveMessage",
                  "sqs:ChangeMessageVisibility",
                  "sqs:DeleteMessage"
                ],
                "Effect": "Allow",
                "Resource": "*"
            }
        ]
    }
  6. 关闭所有数据收集选择器,除了 从 S3 收集 VPC 流日志
  7. 更改默认值,并在 队列 URL 字段中指定您之前创建的 SQS 队列的 URL。
  8. 点击 保存并继续。此步骤需要一到两分钟才能完成。完成后,您将拥有一个包含您刚刚指定的 AWS 配置的代理策略。

应该会出现一个弹出窗口,提示您 将 Elastic Agent 添加到您的主机

步骤 3:在您的机器上安装并运行 Elastic Agent
编辑

您可以将 Elastic Agent 安装在任何可以访问 AWS 账户并将事件转发到 Elasticsearch 的主机上。

  1. 在弹出窗口中,点击 将 Elastic Agent 添加到您的主机 以打开 添加代理 侧边栏。

    如果您意外关闭了弹出窗口,请转到 舰队 → 代理,然后点击 添加代理 以访问安装说明。

    添加代理 侧边栏有两个选项:加入舰队独立运行。默认情况下是将代理加入舰队,因为这可以通过在 Kibana 中提供集中式管理工具来减少管理主机的用户的工作量。

  2. 您需要的注册令牌应该已经选中。

    注册令牌特定于您刚刚创建的 Elastic Agent 策略。当您运行将代理注册到舰队的命令时,您将传入注册令牌。

  3. 要下载、安装和注册 Elastic Agent,请选择您的主机操作系统并复制说明中显示的安装命令。
  4. 在您要安装 Elastic Agent 的主机上运行该命令。

Elastic Agent 需要几分钟才能注册到舰队、下载策略中指定的配置并开始收集数据。您可以等待确认传入数据,或关闭窗口。

您到目前为止取得了什么成就?

VPC 流日志发送到 S3 存储桶,后者向 SQS 队列发送通知。当 Elastic Agent 在队列中检测到新消息时,它将使用消息中的信息从 S3 存储桶中检索流日志。Elastic Agent 处理每条消息,将其解析成字段,然后将数据发送到 Elasticsearch。

Diagram of the current logging architecture for VPC flow logs
步骤 4:收集 S3 访问日志
编辑

接下来,您将收集包含 VPC 流日志的存储桶生成的 S3 访问日志。您可以使用任何 S3 存储桶来生成 S3 访问日志,但为了避免在 AWS 中创建额外的存储桶,您将使用一个已存在的存储桶。

您为访问日志创建一个新的 S3 存储桶和队列,然后配置旧的 S3 存储桶以生成访问日志。

完成后,您的监控架构将如下所示

Diagram of the logging architecture with access logging enabled
为 S3 访问日志创建存储桶和队列
编辑

要为 S3 访问日志创建新的存储桶和队列

  1. AWS S3 控制台 中,点击 创建存储桶。为存储桶指定一个 名称 并指定您希望它部署到的 区域

    确保您在与包含 VPC 流日志的存储桶相同的区域中创建 S3 存储桶和 SQS 队列(下一步)。

  2. 按照您之前学习的步骤创建 SQS 队列并编辑访问策略(使用新的 S3 存储桶和队列的 ARN)。记下队列 URL,因为您稍后在配置 S3 访问日志收集时将需要它。
  3. 配置新的 S3 存储桶,以便在创建对象时向新队列发送通知(按照您之前学习的步骤操作)。
  4. 返回旧的 S3 存储桶(包含 VPC 流日志的那个),并在 属性 下编辑 服务器访问日志记录 属性。启用服务器访问日志记录,并选择您创建的新存储桶作为目标存储桶。

现在,您已准备好编辑代理策略并配置 S3 访问日志收集。

配置集成以收集 S3 访问日志
编辑

您已部署的 Elastic Agent 正在运行并收集 VPC 流日志。现在,您需要编辑代理策略并配置集成以收集 S3 访问日志。

  1. 在 Kibana 中,在主菜单中找到 舰队,或使用 全局搜索字段
  2. 代理 选项卡上,点击您的代理正在使用的策略。
  3. 编辑 AWS 集成策略并打开 从 S3 收集 S3 访问日志 选择器。
  4. 队列 URL 字段中,输入您为 S3 访问日志通知创建的 SQS 队列的 URL,然后保存并部署您的更改。

Elastic Agent 需要几分钟才能更新其配置并开始收集数据。

步骤 5:可视化 AWS 日志
编辑

现在日志已经流入 Elasticsearch,您可以在 Kibana 中对其进行可视化。要查看原始日志,请在主菜单中找到发现,或使用全局搜索字段

请注意,您可以根据特定的数据流进行过滤。例如,设置data_stream.dataset : "aws.s3access"以显示 S3 访问日志。

AWS 集成还附带了预构建的仪表板,您可以使用它们来可视化数据。在 Kibana 中,打开主菜单并点击仪表板。搜索VPC Flow并选择名为[Logs AWS] VPC 流日志概述的仪表板。

Screenshot of the VPC Flow Log Overview dashboard

接下来,打开名为[Logs AWS] S3 服务器访问日志概述的仪表板。

Screenshot of the S3 Server Access Log Overview dashboard
步骤 6:收集 AWS 指标
编辑

在此步骤中,您将配置 AWS 集成以使用GetMetricData API 定期从 AWS CloudWatch 获取监控指标,用于 AWS 服务。具体来说,您将学习如何流式传输和处理计费和 EC2 指标。

如果您配置 AWS 集成以收集指标,可能会产生 CloudWatch API 请求的额外 AWS 费用。要了解更多信息,请参阅Amazon CloudWatch 定价页面。

  1. 确保用于从 CloudWatch 收集指标的 AWS 账户至少具有以下权限

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "ec2:DescribeInstances",
                    "ec2:DescribeRegions",
                    "cloudwatch:GetMetricData",
                    "cloudwatch:ListMetrics",
                    "sts:GetCallerIdentity",
                    "iam:ListAccountAliases",
                    "tag:getResources",
                    "ce:GetCostAndUsage"
                ],
                "Effect": "Allow",
                "Resource": "*"
            }
        ]
    }
  2. 在 Kibana 中,在主菜单中找到 舰队,或使用 全局搜索字段
  3. 代理 选项卡上,点击您的代理正在使用的策略。
  4. 编辑 AWS 集成策略并打开收集计费指标选择器。您可以接受默认值。
  5. 同时打开收集 EC2 指标选择器。可以选择更改默认值,然后保存并部署您的更改。

Elastic Agent 需要几分钟才能更新其配置并开始收集数据。

步骤 7:可视化 AWS 指标
编辑

现在指标已经流入 Elasticsearch,您可以在 Kibana 中对其进行可视化。在主菜单中找到发现,或使用全局搜索字段。选择metrics-*数据视图,然后过滤data_stream.dataset: "aws.ec2_metrics"

Screenshot of the Discover app showing EC2 metrics

AWS 集成还附带了预构建的仪表板,您可以使用它们来可视化数据。在主菜单中找到仪表板,或使用全局搜索字段

搜索 EC2 并选择名为[Metrics AWS] EC2 概述的仪表板。

Screenshot of the EC2 Overview dashboard

要跟踪您的 AWS 账单,请打开[Metrics AWS] 账单概述仪表板。

Screenshot of the Billing Overview dashboard

恭喜!您已完成本教程。