Elastic 可观测性通过支持应用程序和基础设施的指标、跟踪和日志,提供全栈可观测性解决方案。在之前的博客中,我向您展示了一个运行三层应用程序的 AWS 监控基础设施。具体来说,我们回顾了 Elastic 可观测性上针对 EC2、VPC、ELB 和 RDS 的指标摄取和分析。在本博客中,我们将介绍如何从 AWS 摄取日志,更具体地说,我们将回顾如何将 VPC 流日志导入 Elastic,以及如何使用此数据。
日志记录是可观测性的重要组成部分,我们通常将其视为指标和/或跟踪。但是,应用程序或底层基础设施输出的日志量可能会非常庞大。
使用 Elastic 可观测性,有三种主要的日志摄取机制
- 新的 Elastic Agent 从 CloudWatch 和 S3 中提取指标和日志,这些日志通常是从服务(例如,EC2、ELB、WAF、Route53 等)推送的。我们在本博客中回顾了针对 EC2、RDS (Aurora)、ELB 和 NAT 指标的 Elastic Agent 指标配置。
- 使用 Elastic 的无服务器转发器(在 Lambda 上运行,并且在 AWS SAR 中可用) 将来自 Firehose、S3、CloudWatch 和其他 AWS 服务的日志发送到 Elastic。
- 测试版功能(请联系您的 Elastic 客户团队):使用 AWS Firehose 将来自 AWS 的日志直接插入 Elastic 中 — 特别是如果您在 AWS 基础设施上运行 Elastic Stack。
在本博客中,我们将概述第二个选项,即 Elastic 的无服务器转发器从部署在 EC2 实例上的应用程序收集 VPC 流日志。以下是我们将介绍的内容
- 有关如何使用 Elastic 的 Discover、仪表板和 ML 分析来分析 VPC 流日志信息的演练。
- 有关如何在 AWS 上设置 Elastic 无服务器转发器作为将 VPC 流日志传输到 Elastic Cloud 的管道的详细分步概述和设置。
AWS Lambda 上的 Elastic 无服务器转发器
AWS 用户可以使用 Elastic 无服务器转发器(一个 AWS Lambda 应用程序)快速摄取存储在 Amazon S3、CloudWatch 或 Kinesis 中的日志,并在 Elastic Stack 中查看它们以及其他日志和指标,以进行集中分析。从 AWS 部署并配置 AWS 无服务器转发器后,将摄取来自无服务器应用程序注册表 (SAR) 的日志,并在 Elastic 中进行分析。有关进一步的配置指导,请参阅以下链接
在我们的配置中,我们将把 VPC 流日志摄取到 Elastic 中,用于在之前的 博客中部署的三层应用程序。
Elastic 无服务器转发器有三种不同的配置
日志可以直接从以下位置摄取
- Amazon CloudWatch: Elastic 无服务器转发器可以直接从 Amazon CloudWatch 日志组中提取 VPC 流日志,这是一个常用的端点,用于在 AWS 中存储 VPC 流日志。
- Amazon Kinesis: Elastic 无服务器转发器可以直接从 Kinesis 中提取 VPC 流日志,这是 发布 VPC 流日志的另一个位置。
- Amazon S3: Elastic 无服务器转发器可以通过 SQS 事件通知从 Amazon S3 中提取 VPC 流日志,这是一个在 AWS 中发布 VPC 流日志的常用端点。
我们将在本博客的后半部分回顾如何利用常用配置,即将 VPC 流日志发送到 Amazon S3 并发送到 Elastic Cloud。
但首先,让我们回顾一下如何在 Elastic 上分析 VPC 流日志。
在 Elastic 中分析 VPC 流日志
现在您已经在 Elastic Cloud 中有了 VPC 流日志,您如何分析它们?
您可以对 VPC 流日志数据执行以下几种分析
- 使用 Elastic 的 Analytics Discover 功能手动分析数据。
- 使用 Elastic 可观测性的异常功能来识别日志中的异常情况。
- 使用现成的 (OOTB) 仪表板来进一步分析数据。
使用 Elastic Discover
在 Elastic Analytics 中,您可以搜索和筛选您的数据,获取有关字段结构的信息,并在可视化中显示您的发现。您还可以自定义和保存您的搜索,并将它们放在仪表板上。使用 Discover,您可以
- 在特定时间范围内批量查看日志
- 查看每个条目(文档)的各个详细信息
- 筛选特定值
- 分析字段
- 创建并保存搜索
- 构建可视化
要全面了解 Discover 和 Elastic 的所有分析功能,请查看 Elastic 文档。
对于 VPC 流日志,一个重要的统计数据是要了解
- 有多少日志被接受/拒绝
- 哪里发生潜在的安全违规(例如,来自 VPC 外部的源 IP)
- 通常查询哪个端口
我已按以下条件筛选日志
- Amazon S3:bshettisartest
- VPC 流日志操作:拒绝
- VPC 网络接口:Webserver 1
我们想查看哪些 IP 地址正在尝试访问我们的 Web 服务器。
由此,我们想了解哪些 IP 地址向我们发送的 REJECT 请求最多,我们只需找到 source.ip 字段。然后,我们可以快速获取一份明细,显示在过去 3 个多小时(我们已启用 VPC 流日志)内,185.242.53.156 的拒绝次数最多。
此外,我可以通过选择“可视化”按钮来查看可视化效果。我们可以得到以下内容,可以将其添加到仪表板中。
除了 IP 地址,我们还想了解我们的 Web 服务器上正在被访问的端口。
我们选择目标端口字段,快速弹出窗口会显示一个正在被访问的端口列表。我们可以看到端口 23 正在被访问(此端口通常用于 telnet),端口 445 正在被访问(用于 Microsoft Active Directory),端口 433 正在被访问(用于 https ssl)。我们还看到这些都是 REJECT。
Elastic Observability 日志中的异常检测
除了 Discover,Elastic Observability 还提供了检测日志异常的功能。在 Elastic Observability -> 日志 -> 异常中,您可以为以下项启用机器学习:
- 日志速率:自动检测异常的日志条目速率
- 分类:自动对日志消息进行分类
对于我们的 VPC 流日志,我们都启用了这两个功能。当我们查看检测到的异常日志条目速率时,我们看到:
当我们为应用程序启用 VPC 流日志时,Elastic 立即检测到日志激增。之所以检测到速率变化,是因为我们在本博客添加该应用程序之前,也从另一个应用程序中摄取了 VPC 流日志几天。
我们可以通过机器学习进一步深入研究此异常并进行进一步分析。
您可以使用日志进行更多机器学习分析 - 请查看 Elastic 机器学习文档。
既然我们知道存在峰值,我们还可以使用机器学习中的 Elastic AIOps Labs “解释日志速率峰值”功能。此外,我们已将它们分组,以查看导致某些峰值的原因。
正如我们所看到的,特定的网络接口发送的 VPC 日志流比其他网络接口多。我们可以在 Discover 中进一步深入研究此问题。
Elastic Observability 上的 VPC 流日志仪表板
最后,Elastic 还提供了一个开箱即用的仪表板,显示访问您的 VPC 的最常见 IP 地址、它们的地理位置、流的时间序列以及时间范围内的 VPC 流日志拒绝摘要。
这是一个基准仪表板,可以使用您在 Discover 中找到的可视化效果进行增强,正如我们在上面的选项 1(使用 Elastic 的 Analytics Discover 功能)中所回顾的那样。
全部设置
让我们逐步了解配置 Amazon Kinesis Data Firehose 和 Elastic Observability 以摄取数据的详细信息。
先决条件和配置
如果您计划按照步骤操作,以下是我们用来设置此演示的一些组件和详细信息:
- 确保您在 Elastic Cloud 上拥有一个帐户,并且在 AWS 上部署了一个堆栈(请在此处查看说明)。在 AWS 上部署是 Elastic 无服务器转发器所必需的。
- 确保您拥有一个 AWS 帐户,其中具有从 AWS 拉取必要数据的权限。特别是,请确保您可以配置代理以根据需要从 AWS 拉取数据。请查看文档了解详细信息。
- 我们使用了 AWS 的三层应用程序,并按照 GitHub 中的说明进行了安装。(请参阅有关从支持此应用程序的 AWS 服务中摄取指标的博客。)
- 配置并安装 Elastic 的无服务器转发器。
- 确保为部署应用程序的 VPC 启用 VPC 流日志,并将日志发送到 AWS Firehose。
步骤 0:获取 Elastic Cloud 帐户
按照说明开始使用 Elastic Cloud。
步骤 1:在 AWS 上部署 Elastic
登录到 Elastic Cloud 后,在 AWS 上创建一个部署。务必确保部署在 AWS 上。Amazon Kinesis Data Firehose 专门连接到需要位于 AWS 上的端点。
创建部署后,请确保复制 Elasticsearch 端点。
该端点应该是 AWS 端点,例如:
https://aws-logs.es.us-east-1.aws.found.io
步骤 2:在 AWS 上启用 Elastic 的 AWS 集成
在部署的 Elastic 集成部分中,转到 AWS 集成并选择“安装 AWS 资产”。
步骤 3:部署您的应用程序
按照 AWS 的三层应用程序中列出的说明和 GitHub 上研讨会链接中的说明进行操作。研讨会在此处列出:此处。
安装该应用程序后,从 AWS 获取凭证。这将是 Elastic 的 AWS 集成所必需的。
凭证有多种选项:
- 直接使用访问密钥
- 使用临时安全凭证
- 使用共享凭证文件
- 使用 IAM 角色 Amazon 资源名称 (ARN)
步骤 4:将 VPC 流日志发送到 Amazon S3 并设置 Amazon SQS
在步骤 3 中部署的应用程序的 VPC 中,您需要配置 VPC 流日志,并将它们指向 Amazon S3 存储桶。具体来说,您需要将其保留为 AWS 默认格式。
创建 VPC 流日志。
接下来
步骤 5:在 AWS 上设置 Elastic 无服务器转发器
按照 Elastic 的文档中列出的说明进行操作,并参考提供概述的之前的博客。在 Lambda 的应用程序存储库中的配置期间,重要的是确保:
- 在 ElasticServerlessForwarderS3Buckets 中指定 VPC 流日志发送到的 S3 存储桶。该值是您在步骤 4 中创建的 S3 存储桶的 ARN。
- 在 ElasticServerlessForwarderS3ConfigFile 中指定配置文件路径。该值是格式为“s3://bucket-name/config-file-name”的 S3 URL,指向配置文件 (sarconfig.yaml)。
- 在 ElasticServerlessForwarderS3SQSEvents 中指定用作 Lambda 函数触发器的 S3 SQS 通知队列。该值是您在步骤 4 中设置的 SQS 队列的 ARN。
Amazon CloudFormation 完成 Elastic 无服务器转发器的设置后,您应该会看到两个 Amazon Lambda 函数:
为了检查日志是否正在传入,请转到名称中带有“ ApplicationElasticServer ”的函数,然后转到“监控”并查看 日志。您应该会看到从 S3 拉取的日志。
步骤 6:检查并确保您在 Elastic 中有日志
既然步骤 1-4 已完成,您可以转到 Elastic 的 Discover 功能,您应该会看到 VPC 流日志正在传入。在下面的图像中,我们已按 Amazon S3 存储桶 bshettisartest 进行了筛选。
结论:Elastic Observability 可轻松与 VPC 流日志集成,以进行分析、警报和洞察
希望您已经了解了 Elastic Observability 如何帮助您管理 AWS VPC 流日志。以下是对课程和您所学内容的快速回顾:
- 关于 Elastic Observability 如何为 VPC 流日志提供增强分析的演练
- 使用 Elastic 的 Analytics Discover 功能手动分析数据
- 利用 Elastic Observability 的异常功能来:
- 识别 VPC 流日志中的异常
- 检测异常日志条目速率
- 自动对日志消息进行分类
- 使用开箱即用的仪表板来进一步分析数据
- 关于如何设置 Elastic 无服务器转发器的更详细的演练
通过在 AWS Marketplace 上注册,开始您的 7 天免费试用,并在几分钟内在世界各地 AWS 上的任何 Elastic Cloud 区域中快速启动部署。您在 AWS Marketplace 上购买的 Elastic 将包含在您的每月综合账单中,并将从您在 AWS 上的承诺支出中扣除。
其他日志记录资源
- 开始在 Elastic 上进行日志记录(快速入门)
- 通过集成摄取常见的已知日志(计算节点示例)
- 集成列表
- 将自定义应用程序日志摄取到 Elastic 中
- 丰富 Elastic 中的日志
- 使用 异常检测 (ML) 和 AIOps 分析日志