在消费者和快节奏业务中,“始终在线”的需求推动了向分布式应用程序的转型。这种需求促使部署具有更复杂的要求,以及在全球范围内实现多样化和快速创新的能力。
云正在成为当今应用程序的事实部署选项。许多云部署选择将应用程序托管在 AWS 上,因为它覆盖了全球多样化的区域,并提供了大量服务(用于更快的开发和创新),同时还降低了运营和资本成本。在 AWS 上,开发团队发现迁移到 Amazon EKS 上的 Kubernetes、测试最新的无服务器选项以及通过更好的服务改进传统的、分层的应用程序具有额外价值。
Elastic Observability 为 AWS 服务提供了 30 个开箱即用的集成,并且未来还将推出更多集成。
上一篇文章中可以找到对一些集成和功能的快速回顾
以下是一些关于 Elastic 上主要 AWS 服务集成的其他文章
- 使用 Elastic 在 AWS Lambda 上进行无服务器函数的 APM(指标、跟踪和日志)
- 通过 Lambda 上的无服务器转发器将 AWS 服务的日志提取到 Elastic 中
- Elastic 的 Amazon S3 Storage Lens 集成:简化管理、控制成本并降低风险
- 使用 AWS FireLens 将容器日志提取到 Elastic Cloud 中
您可以在 Elastic 的在线文档中找到 AWS 集成的完整列表
除了我们的原生 AWS 集成之外,Elastic Observability 不仅聚合了日志,还聚合了 AWS 服务和在 AWS 计算服务(EC2、Lambda、EKS/ECS/Fargate)上运行的应用程序的指标。所有这些数据都可以使用 Elastic 的高级机器学习功能以可视化和更直观的方式进行分析,这有助于在最终用户受到影响之前检测性能问题并找出根本原因。
有关 Elastic Observability 如何提供应用程序性能监控 (APM) 功能(例如服务地图、跟踪、依赖项和基于 ML 的指标相关性)的更多详细信息
没错,Elastic 为 AWS 服务和 AWS 计算服务(EC2、Lambda、EKS/ECS/Fargate)上的应用程序提供指标提取、聚合和分析。Elastic 不仅仅是日志——它为 AWS 环境提供统一的可观测性解决方案。
在这篇博客中,我将回顾 Elastic Observability 如何监控在 AWS 服务上运行的简单 AWS 应用程序的指标,其中包括
- AWS EC2
- AWS ELB
- AWS RDS (AuroraDB)
- AWS NAT 网关
您将看到,一旦安装了集成,指标将立即到达,您可以立即开始查看指标。
先决条件和配置
如果您打算按照这篇博客进行操作,以下是我们用于设置此演示的一些组件和详细信息
- 确保您在 Elastic Cloud 上有一个帐户,并且已部署堆栈(请参阅此处的说明)。
- 确保您拥有一个 AWS 帐户,并具有从 AWS 中提取必要数据的权限。请参阅我们文档中的详细信息。
- 我们使用了 AWS 的三层应用程序,并按照 git 中的说明进行了安装。
- 我们将逐步介绍如何安装通用的 Elastic AWS 集成,该集成涵盖我们要收集指标的四项服务。
(Elastic AWS 集成支持的服务的完整列表) - 鉴于其他博客涵盖了应用程序 AWS 监控(指标、日志和跟踪),我们将不介绍应用程序监控。相反,我们将重点介绍如何轻松监控 AWS 服务。
- 为了查看指标,您需要加载应用程序。我们还创建了一个 Playwright 脚本来驱动应用程序的流量。
三层应用程序概述
在我们深入研究 Elastic 配置之前,让我们回顾一下我们正在监控的内容。如果您按照 aws-three-tier-web-architecture-workshop 的说明进行操作,您将部署以下内容。
已部署的内容
- 1 个包含 6 个子网的 VPC
- 2 个可用区
- 每个可用区 2 个 Web 服务器
- 每个可用区 2 个应用程序服务器
- 1 个面向外部的应用程序负载均衡器
- 1 个面向内部的应用程序负载均衡器
- 2 个用于管理到应用程序层的流量的 NAT 网关
- 1 个 Internet 网关
- 1 个带有读取副本的 RDS Aurora DB
在博客结尾,我们还将提供一个 Playwright 脚本,以便您加载此应用程序。这将有助于驱动指标以“点亮”仪表板。
全部设置
让我们逐步介绍如何获取应用程序、Elastic 上的 AWS 集成以及提取的内容的详细信息。
步骤 0:加载 AWS 三层应用程序并获取您的凭据
请按照 AWS 三层应用程序中列出的说明和 git 上研讨会链接中的说明进行操作。研讨会此处列出。
安装应用程序后,从 AWS 获取凭据。这将是 Elastic 的 AWS 集成所必需的。
有几种凭据选项
- 直接使用访问密钥
- 使用临时安全凭据
- 使用共享凭据文件
- 使用 IAM 角色 Amazon 资源名称 (ARN)
步骤 1:在 Elastic Cloud 上获取一个帐户
按照说明开始使用 Elastic Cloud。
第二步:安装 Elastic AWS 集成
导航到 Elastic 上的 AWS 集成。
选择“添加 AWS 集成”。
您将在此处添加您的凭据,它将作为策略存储在 Elastic 中。此策略将在下一步中用作代理安装的一部分。
如您所见,通用的 Elastic AWS 集成将从 30 个 AWS 服务中收集大量数据。如果您不想安装此通用的 Elastic AWS 集成,可以选择安装单独的集成。
第三步:安装带有 AWS 集成的 Elastic Agent
创建集成策略后,导航到 Elastic 中“管理”下的“Fleet”部分。
选择您在上一步中创建的策略的名称。
按照添加代理窗口中的说明执行步骤 3。这将需要您执行以下操作:
1:启动一个 EC2 实例
- t2.medium 是最低配置
- Linux - 您可以选择任何版本
- 在启动 EC2 实例时,请确保允许开放预留
2:登录到实例并运行“Linux Tar”选项卡下的命令(以下是一个示例)
curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.5.0-linux-x86_64.tar.gz
tar xzvf elastic-agent-8.5.0-linux-x86_64.tar.gz
cd elastic-agent-8.5.0-linux-x86_64
sudo ./elastic-agent install --url=https://37845638732625692c8ee914d88951dd96.fleet.us-central1.gcp.cloud.es.io:443 --enrollment-token=jkhfglkuwyvrquevuytqoeiyri
第四步:对应用程序运行流量
虽然让应用程序运行起来相当容易,但除非您在应用程序上增加负载,否则无法使用 Elastic 进行监控或观察。
这里有一个简单的脚本,您也可以使用 Playwright 来为 AWS 三层应用程序的网站增加流量
import { test, expect } from "@playwright/test";
test("homepage for AWS Threetierapp", async ({ page }) => {
await page.goto(
"http://web-tier-external-lb-1897463036.us-west-1.elb.amazonaws.com/#/db"
);
await page.fill(
"#transactions > tbody > tr > td:nth-child(2) > input",
(Math.random() * 100).toString()
);
await page.fill(
"#transactions > tbody > tr > td:nth-child(3) > input",
(Math.random() * 100).toString()
);
await page.waitForTimeout(1000);
await page.click(
"#transactions > tbody > tr:nth-child(2) > td:nth-child(1) > input[type=button]"
);
await page.waitForTimeout(4000);
});
此脚本将启动三个浏览器,但您可以在 playwright.config.ts 文件中将此负载限制为一个浏览器。
在本练习中,我们在测试网站时,以五分钟的间隔运行了大约五个小时的流量。
第五步:转到 AWS 仪表板
现在您的 Elastic Agent 正在运行,您可以转到相关的 AWS 仪表板以查看正在摄取的内容。
要搜索 AWS 集成仪表板,只需在 Elastic 搜索栏中搜索它们。此博客的相关仪表板是:
- [指标 AWS] EC2 概览
- [指标 AWS] ELB 概览
- [指标 AWS] RDS 概览
- [指标 AWS] NAT 网关
让我们看看会出现什么!
所有这些仪表板都是开箱即用的,对于以下所有图像,我们将视图缩小到仅显示来自我们应用程序的相关项目。
在所有仪表板中,我们将时间范围限制为运行流量生成器的时间。
在筛选了我们的 4 个 EC2 实例(2 个 Web 服务器和 2 个应用程序服务器)之后,我们可以看到以下内容:
1:所有 4 个实例都在运行,并且状态检查没有失败。
2:我们看到整个时间范围内的平均 CPU 利用率,没有任何异常。
3:我们看到网络字节的流入和流出,随着数据库加载行数,随着时间的推移而聚合。
虽然本练习仅显示了可以查看的指标的一小部分,但 AWS EC2 提供了更多指标。 AWS 文档上列出的指标都可用,包括用于缩小搜索范围以查找特定实例等的维度。
对于 ELB 仪表板,我们筛选了我们的 2 个负载均衡器(外部 Web 负载均衡器和内部应用程序负载均衡器)。
借助开箱即用的仪表板,您可以查看应用程序 ELB 特定的指标。 AWS 文档中列出的应用程序 ELB 特定指标的很大一部分可以用来添加图表。
对于我们的两个负载均衡器,我们可以看到:
1:两个主机(连接到 ELB 的 EC2 实例)都运行状况良好。
2:负载均衡器容量单位(您正在使用的数量)和请求计数在流量生成时间范围内都如预期的那样上升。
3:我们选择显示 4XX 和 2XX 计数。 4XX 将有助于识别应用程序或与应用程序服务器的连接问题。
对于部署在 RDS 中的 AuroraDB,我们在仪表板上只筛选了 Aurora 的主要和辅助实例。
就像 EC2 和 ELB 一样,Cloudwatch 中的大多数 RDS 指标也可用于创建新的图表和图形。 在此仪表板中,我们将其缩小到显示:
1:插入吞吐量和选择吞吐量
2:写入延迟
3:CPU 使用率
4:时间范围内的连接总数
我们筛选以仅查看位于应用程序服务器前面的 2 个 NAT 实例。 与其他仪表板一样,还可以根据需要使用其他指标来构建图形和图表。
对于 NAT 仪表板,我们可以看到以下内容:
1:由于没有数据包丢弃,NAT 网关运行良好
2:来自 Web 服务器的预期数量的活动连接
3:字节流入和流出的相当正常的指标集
恭喜,您现在已经开始监控应用程序的关键 AWS 服务的指标!
接下来在 AWS 上监控什么?
添加来自 AWS 服务的日志
现在正在监控指标,您现在还可以添加日志记录。 有几种用于提取日志的选项。
- Elastic Agent 中的 AWS 集成具有日志设置。 只需确保打开您希望接收的内容即可。 让我们从 RDS 中提取 Aurora 日志。 在 Elastic agent 策略中,我们只需打开“从 CloudWatch 收集日志”(见下文)。 接下来,通过 Fleet 管理 UI 更新代理。
- 您可以安装Lambda 日志转发器。 此选项将从多个位置提取日志。 请参见下面的架构图。
在以下博客中也找到了对此选项的审查。
使用 Elastic 机器学习分析您的数据
一旦指标和日志(或其中任何一个)进入 Elastic,请开始通过 Elastic 的 ML 功能分析您的数据。 可以在此处找到对这些功能的精彩回顾:
还有更多关于Elastic 的博客的视频和博客。
结论:使用 Elastic Observability 监控 AWS 服务指标非常简单!
我希望您已经了解了 Elastic Observability 如何帮助您监控 AWS 服务指标,以下是关于课程和您所学内容的快速回顾:
- Elastic Observability 支持 AWS 服务指标的提取和分析
- 通过 Elastic Agent 从 AWS 服务设置提取很容易
- Elastic Observability 具有多个开箱即用 (OOTB) AWS 服务仪表板,您可以使用这些仪表板初步查看信息,然后根据您的需要进行修改
- Elastic Observability 上的 AWS 集成支持 30 多个 AWS 服务,并且定期添加更多服务
- 正如相关博客中所述,您可以使用 Elastic 的机器学习功能分析您的 AWS 服务指标
通过AWS Marketplace注册即可开始您自己的7 天免费试用,并在几分钟内在世界各地 AWS 上的 Elastic Cloud 区域中快速启动部署。 您在 AWS Marketplace 上购买的 Elastic 将包含在您的每月综合账单中,并将从您在 AWS 的承诺支出中扣除。
本文中描述的任何特性或功能的发布和时间安排均由 Elastic 自行决定。 任何当前不可用的特性或功能可能无法按时交付或根本无法交付。