释放 Elastic 和 Amazon Kinesis Data Firehose 的强大功能,增强可观察性和数据分析

AWS 用户现在可以利用新的 Amazon Kinesis Firehose Delivery Stream 实时将日志直接摄取到 Elastic Cloud 中,以便在您的云和本地基础设施中进行集中警报、故障排除和分析。

阅读时间:16分钟
Unleash the power of Elastic and Amazon Kinesis Data Firehose to enhance observability and data analytics

随着越来越多的组织利用 Amazon Web Services (AWS) 云平台和服务来提高运营效率并将其产品推向市场,日志管理已成为维护可见性和保护多账户 AWS 环境的关键组成部分。传统上,日志存储在 Amazon Simple Storage Service (Amazon S3) 中,然后发送到外部监控和分析解决方案以进行进一步处理。

为了简化此过程并减少管理开销,AWS 用户现在可以利用新的 Amazon Kinesis Firehose Delivery Stream 实时将日志摄取到 AWS 中的 Elastic Cloud 中,并在 Elastic Stack 中与其他日志一起查看,以进行集中分析。这消除了耗时且昂贵的过程,例如虚拟机配置或数据发送程序操作。

Elastic 可观察性统一了日志、指标和应用程序性能监控 (APM) 追踪,以便跨您的混合 AWS 环境及其本地数据集获得完整的上下文视图。Elastic 可观察性使您能够跟踪和监控性能 跨各种 AWS 服务,包括 AWS Lambda、Amazon Elastic Compute Cloud (EC2)、Amazon Elastic Container Service (ECS)、Amazon Elastic Kubernetes Service (EKS)、Amazon Simple Storage Service (S3)、Amazon Cloudtrail、Amazon Network Firewall 等。

在本博文中,我们将逐步介绍如何使用 Amazon Kinesis Data Firehose 集成(Elastic 列在 Amazon Kinesis Firehose的下拉列表中)来简化您的架构并将日志发送到 Elastic,以便您可以监控和保护您的多账户 AWS 环境。

宣布 Kinesis Firehose 方法

Elastic 目前提供基于代理和无服务器的机制,我们很高兴地宣布添加 Kinesis Firehose 方法。此新方法使客户能够直接将日志从 AWS 摄取到 Elastic,从而补充我们现有的选项。

  • Elastic Agent 从 CloudWatch 和 S3 中提取指标和日志,其中日志通常从服务(例如,EC2、ELB、WAF、Route53)推送,并将它们摄取到 Elastic Cloud 中。
  • Elastic 的无服务器转发器(运行 Lambda 并在 AWS SAR 中可用)将日志从 Kinesis Data Stream、Amazon S3 和 AWS Cloudwatch 日志组发送到 Elastic。要详细了解此主题,请参阅此 博文
  • Amazon Kinesis Firehose 直接将日志从 AWS 摄取到 Elastic(具体来说,如果您在 AWS 上运行 Elastic Cloud)。

在本博文中,我们将介绍最后一个选项,因为我们最近发布了 Amazon Kinesis Data Firehose 集成。具体来说,我们将回顾

  • Amazon Kinesis Data Firehose 集成的总体概述及其与 AWS 的工作原理
  • 在 AWS 和 Elastic Cloud 上设置 Amazon Kinesis Data Firehose 集成的分步说明

在本博文结束时,您将具备简化 AWS 日志管理(使用 Elastic 可观察性和 Amazon Kinesis Data Firehose)的知识和工具。

先决条件和配置

如果您打算按照本博文中概述的步骤操作,则应事先准备好一些先决条件和配置。

  1. 您需要在 Elastic Cloud 上拥有一个帐户,并在 AWS 上部署一个堆栈。有关在 AWS 上部署堆栈的说明,请参见 此处。这对于 AWS Firehose 日志摄取是必要的。
  2. 您还需要一个 AWS 帐户,并具有从 AWS 中提取数据的必要权限。有关所需权限的详细信息,请参阅我们的 文档
  3. 最后,请务必为部署应用程序的 VPC 打开 VPC 流日志,并将它们发送到 AWS Firehose。

Elastic 的 Amazon Kinesis Data Firehose 集成

Elastic 与 AWS 合作,提供 Amazon Kinesis Data Firehose 与 Elastic 的无缝集成,使数据能够直接从 Amazon Kinesis Data Firehose 摄取到 Elastic,而无需代理或 Beats。您只需将 Amazon Kinesis Data Firehose 传输流配置为将其数据发送到 Elastic 的端点即可。在此配置中,我们将演示如何将 VPC 流日志和防火墙日志摄取到 Elastic 中。您可以按照类似的过程将 AWS 环境中的其他日志摄取到 Elastic 中。

有三种不同的配置可用于将 VPC 流和网络防火墙日志摄取到 Elastic 中。一种配置涉及通过 CloudWatch 发送日志,另一种使用 S3 和 Kinesis Firehose;每种配置都有其独特的设置。使用 Cloudwatch 和 S3,您可以存储和转发,但使用 Kinesis Firehose,您必须立即摄取。但是,在本博文中,我们将重点介绍此新的配置,该配置涉及将 VPC 流日志和网络防火墙日志直接发送到 Elastic。

我们将指导您完成最简单的设置配置,该设置涉及将 VPC 流日志和防火墙日志直接发送到 Amazon Kinesis Data Firehose,然后发送到 Elastic Cloud。

注意:请注意,此设置仅与 AWS 上的 Elastic Cloud 兼容,不能与自管理或本地或其他云提供商的 Elastic 部署一起使用。

全部设置

要开始设置 Amazon Kinesis Data Firehose 和 Elastic 之间的集成,让我们完成必要的步骤。

步骤 0:在 Elastic Cloud 上获取账户

按照提供的说明在 Elastic Cloud 上创建一个账户,以开始使用 Elastic Cloud

步骤 1:在 AWS 上部署 Elastic

您可以通过两种不同的方法在 AWS 上部署 Elastic:通过 UI 或通过 Terraform。我们首先介绍 UI 选项。

登录 Elastic Cloud 后,在 Elastic 上创建一个部署。务必确保部署在 AWS 上的 Elastic Cloud 上,因为 Amazon Kinesis Data Firehose 连接到必须位于 AWS 上的特定端点。

创建部署后,务必复制 Elasticsearch 端点以确保无缝的配置过程。

应复制 Elasticsearch HTTP 端点并将其用于 Amazon Firehose 目标配置,因为它将是必需的。以下是端点应具有的示例

https://elastic-O11y-log.es.us-east-1.aws.found.io

使用 Terraform 的替代方法

在 AWS 上部署 Elastic Cloud 的另一种方法是使用 Terraform。它也是一种有效地自动化和简化部署流程的方法。

首先,只需创建一个 Terraform 配置文件,其中概述了必要的基础设施。此文件应包含 Elastic Cloud 部署的资源以及任何必需的 IAM 角色和策略。通过使用这种方法,您可以简化部署过程并确保跨环境的一致性。

使用 Terraform 创建 Elastic Cloud 部署的一种简单方法是使用此 Github 仓库。此资源允许您为 Elastic Cloud 部署指定区域、版本和部署模板,以及您所需的任何其他设置。

步骤 2:要开启 Elastic 的 AWS 集成,请导航到部署中的 Elastic 集成部分

要安装部署的 Elastic 集成部分中的 AWS 资源,请按照以下步骤操作

  1. 登录到您的 Elastic Cloud 部署并打开Kibana
  2. 首先,转到 Kibana 的管理部分,然后点击“集成”。
  3. 导航到AWS集成,然后点击设置中的“安装 AWS 资源”按钮。此步骤非常重要,因为它会安装必要的资源(例如仪表板摄取管道),以启用从 AWS 服务到 Elastic 的数据摄取。

步骤 3:在 AWS 控制台上设置 Amazon Kinesis Data Firehose 传输流

您可以通过两种不同的方法设置 Kinesis Data Firehose 传输流:通过 AWS 管理控制台或通过 Terraform。我们首先介绍控制台选项。

要在 AWS 上设置 Kinesis Data Firehose 传输流,请按照以下步骤操作

  1. 转到 AWS 管理控制台并选择 Amazon Kinesis Data Firehose。

  2. 点击创建传输流。

  3. 选择传输流名称,并选择 Direct PUT 或其他来源作为源。

  1. 选择 Elastic 作为目标。

  2. 在 Elastic 目标部分,输入从 Elastic Cloud 部署复制的 Elastic 端点 URL。

  1. 选择如上所示的内容编码和重试持续时间。

  2. 输入 AWS 日志类型的相应参数值。例如,对于 VPC 流日志,您需要指定 es_datastream_namelogs-aws.vpc flow-default

  3. 将 Amazon S3 存储桶配置为 Amazon Kinesis Data Firehose 传输流失败数据或所有数据的源备份,并为传输流配置任何所需的标签。

  4. 查看设置,然后点击创建传输流。

在上面的示例中,我们使用 es_datastream_name 参数通过 logs-aws.vpcflow-default 数据流提取 VPC 流日志。根据您的用例,此参数可以配置为以下类型的日志之一

  • logs-aws.cloudfront_logs-default(AWS CloudFront 日志)
  • logs-aws.ec2_logs-default(AWS CloudWatch 中的 EC2 日志)
  • logs-aws.elb_logs-default(Amazon Elastic Load Balancing 日志)
  • logs-aws.firewall_logs-default(AWS 网络防火墙日志)
  • logs-aws.route53_public_logs-default(Amazon Route 53 公共 DNS 查询日志)
  • logs-aws.route53_resolver_logs-default(Amazon Route 53 DNS 查询和响应日志)
  • logs-aws.s3access-default(Amazon S3 服务器访问日志)
  • logs-aws.vpcflow-default(AWS VPC 流日志)
  • logs-aws.waf-default(AWS WAF 日志)

使用 Terraform 的替代方法

Terraform 中使用“aws_kinesis_firehose_delivery_stream”资源是创建 Kinesis Firehose 传输流的另一种方法,它允许您指定传输流名称、数据源和目标(在本例中为 Elasticsearch HTTP 端点)。为了进行身份验证,您需要提供端点 URL 和 API 密钥。利用此 Terraform 资源是自动化和简化部署流程的绝佳方式,从而实现更高的一致性和效率。

以下是一个示例代码,向您展示如何使用 Terraform 创建一个将数据发送到 Elasticsearch HTTP 端点的 Kinesis Firehose 传输流

resource "aws_kinesis_firehose_delivery_stream" “Elasticcloud_stream" {
  name        = "terraform-kinesis-firehose-ElasticCloud-stream"
  destination = "http_endpoint”
  s3_configuration {
    role_arn           = aws_iam_role.firehose.arn
    bucket_arn         = aws_s3_bucket.bucket.arn
    buffer_size        = 5
    buffer_interval    = 300
    compression_format = "GZIP"
  }
  http_endpoint_configuration {
    url        = "https://cloud.elastic.co/"
    name       = “ElasticCloudEndpoint"
    access_key = “ElasticApi-key"
    buffering_hints {
      size_in_mb = 5
      interval_in_seconds = 300
    }

   role_arn       = "arn:Elastic_role"
   s3_backup_mode = "FailedDataOnly"
  }
}

步骤 4:配置 VPC 流日志以发送到 Amazon Kinesis Data Firehose

要完成设置,您需要在部署应用程序的 VPC 中配置 VPC 流日志,并将它们发送到您在步骤 3 中设置的 Amazon Kinesis Data Firehose 传输流。

在 AWS 中启用 VPC 流日志是一个简单的过程,它涉及几个步骤。以下是有关如何在您的 AWS 账户中启用 VPC 流日志的分步详细信息

  1. 选择要为其启用流日志的 VPC。

  2. 在 VPC 仪表板中,点击“日志”部分下的“流日志”。

  3. 点击“创建流日志”按钮以创建一个新的流日志。

  4. 在“创建流日志”向导中,提供以下信息

选择流日志的目标:在本例中,为同一 AWS 账户中的 Amazon Kinesis Data Firehose。

  • 为流日志提供一个名称。
  • 选择要为其启用流日志的 VPC 和网络接口。
  • 选择流日志格式:AWS 默认格式或自定义格式。
  1. 配置流日志的 IAM 角色。如果您有现有的 IAM 角色,请选择它。否则,创建一个新的 IAM 角色,该角色授予流日志所需的权限。

  2. 查看流日志配置,然后点击“创建”。

创建 VPC 流日志。

步骤 5:几分钟后,检查流是否正在进入 Elastic

要确认 VPC 流日志是否正在摄取到 Elastic,您可以在 Kibana 中检查日志。您可以通过在 Kibana Discover 选项卡中搜索索引并根据相应的索引和时间范围过滤结果来执行此操作。如果 VPC 流日志正在流入,您应该会看到一个表示 VPC 流日志的文档列表。

步骤 6:导航到 Kibana 以查看 [Logs AWS] VPC 流日志概述仪表板中已解析和可视化的日志

最后,有一个 Elastic 开箱即用 (OOTB) VPC 流日志仪表板,它显示了访问您的 VPC 的顶级 IP 地址、其地理位置、流的时间序列以及所选时间范围内 VPC 流日志拒绝的摘要。此仪表板可以提供有关您的网络流量和潜在安全威胁的有价值的见解。

注意:有关其他 VPC 流日志分析功能,请参阅此博客

步骤 7:配置 AWS 网络防火墙日志以发送到 Kinesis Firehose

要为 AWS 网络防火墙日志创建 Kinesis Data Firehose 传输流,首先登录到 AWS 管理控制台,导航到 Kinesis 服务,选择“Data Firehose”,然后按照步骤 3 中所示的分步说明进行操作。指定 Elasticsearch 端点、API 密钥,添加参数(es_datastream_name=logs-aws.firewall_logs-default),然后创建传输流。

其次,要设置一个将日志发送到 Kinesis Firehose 的网络防火墙规则组,请转到控制台的网络防火墙部分,创建一个规则组,添加一个规则以允许流量到 Kinesis 端点,并将规则组附加到您的网络防火墙配置。最后,通过将流量发送到 Kinesis Firehose 端点的网络防火墙来测试配置,并验证日志是否正在传递到您的 S3 存储桶。

请按照以下说明设置防火墙规则和日志记录。

  1. 设置一个将日志发送到 Amazon Kinesis Data Firehose 的网络防火墙规则组
  • 转到 AWS 管理控制台并选择网络防火墙。
  • 点击左侧菜单中的“规则组”,然后点击“创建规则组”。
  • 根据您的需求选择“无状态”或“有状态”,并为规则组命名。点击“创建规则组”。
  • 向规则组添加一个规则以允许流量到 Kinesis Firehose 端点。例如,如果您使用的是 us-east-1 区域,则会添加如下规则:json
{
  "RuleDefinition": {
    "Actions": [
      {
        "Type": "AWS::KinesisFirehose::DeliveryStream",
        "Options": {
          "DeliveryStreamArn": "arn:aws:firehose:us-east-1:12387389012:deliverystream/my-delivery-stream"
        }
      }
    ],
    "MatchAttributes": {
      "Destination": {
        "Addresses": ["api.firehose.us-east-1.amazonaws.com"]
      },
      "Protocol": {
        "Numeric": 6,
        "Type": "TCP"
      },
      "PortRanges": [
        {
          "From": 443,
          "To": 443
        }
      ]
    }
  },
  "RuleOptions": {
    "CustomTCPStarter": {
      "Enabled": true,
      "PortNumber": 443
    }
  }
}
  • 保存规则组。
  1. 将规则组附加到您的网络防火墙配置
  • 转到 AWS 管理控制台并选择网络防火墙。
  • 点击左侧菜单中的“防火墙配置”,然后选择要将规则组附加到的配置。
  • 向下滚动到“关联”,然后点击“编辑”。
  • 选择您在步骤 2 中创建的规则组,然后点击“保存”。
  1. 测试配置
  • 将流量发送到 Kinesis Firehose 端点的网络防火墙,并验证日志是否正在传递到您的 S3 存储桶。

步骤 8:导航到 Kibana 以查看 [Logs AWS] 防火墙日志仪表板中已解析和可视化的日志

总结

我们很高兴为您带来 AWS Cloud 和 Kinesis Data Firehose 的最新集成到生产环境中。能够整合日志和指标以获取跨云和本地环境的可见性,对于当今的分布式环境和应用程序至关重要。

从 EC2、Cloudwatch、Lambda、ECS 和 SAR 开始,Elastic 集成 允许您快速轻松地开始摄取遥测数据以进行监控、分析和可观察性。Elastic 不断提供无摩擦的客户体验,允许随时随地访问所有遥测数据——此与 AWS 的简化原生集成是我们承诺的最新例证。

立即开始免费试用

您可以在 AWS Marketplace 中开始7 天免费试用 Elastic Cloud,立即开始监控和改善用户的体验!

本文中描述的任何功能或功能的发布和时间安排完全由 Elastic 自行决定。任何当前不可用的功能或功能可能无法按时或根本无法交付。