等等……Elastic 可观测性在几分钟内就能监测 AWS 服务的指标?

blog-charts-packages.png

向分布式应用程序的过渡正如火如荼地进行着,这主要是由于我们作为快速消费品公司需要“时刻在线”。这种需求促使部署满足更复杂的要求,同时具有全球多样化和快速创新的能力。

云正在成为当下应用程序的实际部署选项。许多云部署选择在 AWS 上托管其应用程序,以满足其覆盖的全球不同区域和无数可用服务的需求(以加快开发和创新速度),并降低运营和资本成本。在 AWS 上,开发团队在迁移到 Amazon EKS 上的 Kubernetes、测试最新的无服务器选项以及用更好的服务改进传统的分层应用程序方面发现了额外的价值。

Elastic 可观测性针对 AWS 服务提供了 30 种开箱即用的集成,未来还会有更多。

先快速回顾一下之前有一篇文章中重点介绍的一些集成和功能:

其他关于 Elastic 上重要 AWS 服务集成的文章包括:

有关 AWS 集成的完整列表,请参阅 Elastic 的在线文档:

除了我们的原生 AWS 集成之外,Elastic 可观测性不仅可以聚合日志,还可以聚合 AWS 服务和在 AWS 计算服务(EC2、Lambda、EKS/ECS/Fargate)上运行的应用程序的指标。所有这些数据都可以利用 Elastic 先进的 Machine Learning 功能进行可视化和更直观的分析,这有助于在最终用户受到影响之前检测到性能问题并找出根本原因。

下面两篇文章详细介绍了 Elastic 可观测性如何提供应用程序性能监测 (APM) 功能(如服务映射、跟踪、依赖关系和基于 ML 的指标关联性):

没错,Elastic 为 AWS 服务和在 AWS 计算服务(EC2、Lambda、EKS/ECS/Fargate)上运行的应用程序提供指标采集、聚合和分析功能。Elastic 不仅仅负责日志,它为 AWS 环境提供了一体化的可观测性解决方案。

在这篇博文中,我将回顾 Elastic 可观测性如何监测在 AWS 服务上运行的简单 AWS 应用程序的指标,这些服务包括:

  • AWS EC2
  • AWS ELB
  • AWS RDS (AuroraDB)
  • AWS NAT Gateway

如您所见,安装了集成后,就会立即采集指标,您可以马上开始查看指标。

准备工作和配置

如果您打算跟着本博文照做,下面是我们用来设置这个演示的一些组件和细节:

  • 确保您拥有一个 Elastic Cloud 账号,且已部署一个堆栈(在此处查看相关说明)。
  • 确保您有一个 AWS 账户,且该账户具有从 AWS 提取必要数据的权限。详情请参阅我们的文档
  • 我们使用的是 AWS 的三层应用,并按照 Git 中的指示进行了安装。
  • 我们将详细介绍如何安装通用的 Elastic AWS 集成,其中涵盖了我们收集指标所需的四种服务。
    Elastic AWS 集成支持的服务的完整列表
  • 鉴于其他博文已经介绍了 AWS 上的应用程序监测(指标、日志和跟踪),我们将再赘述。我们将重点关注如何轻松地监测 AWS 服务。
  • 为了查看指标,您需要加载应用程序。我们还创建了一个 Playwright 脚本,来为应用程序带来流量。

三层应用程序概述

在详细讲解 Elastic 配置之前,我们回顾一下正在监测的内容。如果您遵循 aws-three-tier-web-architecture-workshop 的说明,以下内容将部署完成。

已部署的内容:

  • 1 个 VPC,包含 6 个子网
  • 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 Resource Name (ARN)

有关必要的凭据权限的详细信息。

第 1 步:在 Elastic Cloud 上注册一个账号

第 2 步:安装 Elastic AWS 集成

导航到 Elastic 上的 AWS 集成。

选择 Add AWS(添加 AWS)集成。

您将在这里添加凭据,凭据将作为策略存储在 Elastic 中。在下一步的代理安装过程中会用到该策略。

可以看到,通用的 Elastic AWS 集成将从 30 个 AWS 服务中收集大量数据。如果您不想安装这个通用的 Elastic AWS 集成,可以选择要安装的单个集成。

第 3 步:安装包含 AWS 集成的 Elastic Agent

现在您已经创建了一个集成策略,在 Elastic 中导航到Management(管理)下的 Fleet 部分。

选择在上一步中创建的策略的名称。

按照添加代理窗口中说明的第 3 步进行操作。您需要完成以下操作:

1:启动一个 EC2 实例

  • 至少是 t2.medium
  • Linux - 您选择的选项
  • 确保在启动 EC2 实例时允许在该实例上进行 Open 预定

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

第 4 步:针对应用程序运行流量

让应用程序运行起来相当容易,没有什么要做的

下面是一个简单的脚本,您也可以使用 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 文件中将此加载限制为一个浏览器。

在这个练习中,我们在测试网站时以 5 分钟的间隔运行了大约 5 个小时的流量。

第 5 步:前往 AWS 仪表板

现在您的 Elastic Agent 正在运行,您可以前往相关的 AWS 仪表板查看正在采集的内容。

要搜索 AWS 集成仪表板,只需在 Elastic 搜索栏中搜索即可。与本博文相关的仪表板如下:

  • [指标 AWS] EC2 概述
  • [指标 AWS] ELB 概述
  • [指标 AWS] RDS 概述
  • [指标 AWS] NAT Gateway

我们来看看会发生什么!

所有这些仪表板都是开箱即用的,对于以下所有图像,我们已经将视图缩小到仅显示我们应用的相关项。

在所有的仪表板上,我们已将时间范围限制在运行流量生成器的时候。

Elastic 可观测性 EC2 概述仪表板
Elastic 可观测性 EC2 概述仪表板

筛选出 4 个 EC2 实例(2 个 Web 服务器和 2 个应用程序服务器)后,可以看到以下内容:

1:所有 4 个实例都已启动并运行,状态检查没有失败。

2:我们可以看到整个时间范围内的平均 CPU 利用率,没有任何异常。

3:我们可以看到网络字节流进和流出,在一段时间内随着数据库行的加载而聚合。

这个练习只显示了可以查看的指标的一小部分,您可以从 AWS EC2 中查看更多的指标。AWS 文档中列出的指标都是可用的,其中包括有助于缩小特定实例搜索范围的维度等。

Elastic 可观测性 ELB 概述仪表板
Elastic 可观测性 ELB 概述仪表板

在 ELB 仪表板中,我们筛选了 2 个负载均衡器(外部 Web 负载均衡器和内部应用程序负载均衡器)。

使用开箱即用的仪表板,您可以看到应用程序特定于 ELB 的指标。AWS 文档中列出的大部分应用程序 ELB 特定指标都可以添加图表。

对于我们的两个负载均衡器,可以看到:

1:两额主机(连接到 ELB 的 EC2 实例)都正常运行。

2:在流量生成时间段内,负载均衡器容量单位(正在使用的量)和请求计数都按预期增长。

3:我们选择了显示 4XX 和 2XX 计数。4XX 有助于识别应用程序的问题或与应用程序服务器的连接问题。

Elastic 可观测性 RDS 概述仪表板
Elastic 可观测性 RDS 概述仪表板

对于部署在 RDS 中的 AuroraDB,我们只在仪表板上筛选了 Aurora 的主实例和辅助实例。

与 EC2、ELB 一样,Cloudwatch 中的大多数 RDS 指标也可用于创建新的图表和图形。在这个仪表板中,我们已将范围缩小到显示以下内容:

1:插入吞吐量并选择吞吐量

2:写入延迟

3:CPU 使用率

4:该时间段内的一般连接数

Elastic 可观测性 AWS NAT 仪表板
Elastic 可观测性 AWS NAT 仪表板

我们进行了筛选,只查看位于应用服务器前端的 2 个 NAT 实例。与其他仪表板一样,可以根据需要使用其他指标来构建图形和/或图表。

在 NAT 仪表板中,我们可以看到以下内容:

1:由于没有数据包丢失,NAT Gateway 运行良好

2:来自 Web 服务器的预期活动连接数

3:相当正常的字节输入和输出指标集

大功告成!您现在已经开始为应用程序监测主要 AWS 服务的指标了。

接下来在 AWS 上监测些什么?

添加来自 AWS 服务的日志

现在已经对指标进行监测,您还可以添加日志记录。对于采集日志,有几个选项。

1.Elastic Agent 中的 AWS 集成具有日志设置。只要确保已启用想要收到的内容即可。例如,我们从 RDS 采集 Aurora 日志。在 Elastic 代理策略中,我们只需打开“Collect logs from CloudWatch”(从 CloudWatch 收集日志)(见下图)。接下来,通过 Fleet 管理 UI 更新代理。

2.您可以安装 Lambda 日志转发器。这个选项将从多个位置提取日志。请参阅下面的架构图。

您也可以通过这篇博文回顾这个选项。

使用 Elastic Machine Learning 分析数据

指标和/或日志进入 Elastic 后,您可以通过 Elastic 的 ML 功能开始分析数据。您可以通过以下文章好好回顾这些功能:

而且在 Elastic 博客中还有更多的视频和博文。

结论:使用 Elastic 可观测性来监测 AWS 服务指标相当简单!

希望您已经了解了 Elastic 可观测性如何帮助您监测 AWS 服务指标。下面我们快速回顾一下所学内容:

  • Elastic 可观测性支持对 AWS 服务指标进行采集和分析
  • 通过 Elastic Agent 可以很容易地从 AWS 服务中设置采集
  • Elastic 可观测性有多个开箱即用型 (OOTB) AWS 服务仪表板,您可以使用这些仪表板初步查看信息,然后根据需要进行修改
  • 作为 Elastic 可观测性上 AWS 集成的一部分,现在支持 30 多个 AWS 服务,以后还会定期添加更多服务
  • 如相关博文所述,您可以使用 Elastic 的 Machine Learning 功能分析 AWS 服务指标

通过 AWS Marketplace 注册,开始您自己的 7 天免费试用,分分钟即可在全球 AWS 上的任何 Elastic Cloud 区域快速完成部署。您在 AWS Marketplace 中购买的 Elastic 将包含在您的每月整合式账单中,并将从您在 AWS 上的承诺支出中支取。

本博文所描述的任何特性或功能的发布及上市时间均由 Elastic 自行决定。当前尚未发布的任何特性或功能可能无法按时提供或根本不会提供。