工程

使用 Metricbeat 监测 AWS EC2

从 7.0 开始,我们在 Metricbeat 中引入了新的模块来监测 Amazon Web Services。在 7.0.0-beta1 初始发布时,这一 AWS 模块提供了使用 Metricbeat 从 Cloudwatch 收集 AWS EC2 监测指标的能力,并将所收集指标存储在名为 ec2 的指标集中。通过这些指标可洞悉各个区域的所有 EC2 实例,而无需直接在这些实例上安装 Metricbeat。

背景

Amazon Elastic Compute Cloud (EC2) 实例是在 AWS 平台上创建的虚拟服务器,用于在公共云中向用户提供安全且可调的计算能力。EC2 可以说是 AWS 提供的数百种服务中最关键的一个 -- 几乎每个人都需要访问原始计算资源。

集中监测 EC2 实例来帮助用户检测问题并对问题进行故障排查是极具挑战性的任务。尽管 Metricbeat 已经可以使用 system 模块收集详细资源指标,但这需要在每个 EC2 实例上安装 Metricbeat 实例。它收集的指标非常详细和细致,而有时您只想用一种快速的方法总体查看一下所有 EC2 实例的资源使用情况。

这就是 AWS Cloudwatch 的用武之地了。Cloudwatch 能够自动从所有 EC2 实例中收集并集中存储基本资源利用指标。默认情况下,它会以 5 分钟粒度收集这些数据,您可以注册详细监测,以获得更高的粒度和更高级的指标。

配置 Metricbeat AWS

在开始使用 Metricbeat 之前,您需要一个运行中的 Elastic Stack,其中包括用于存储和索引数据的 Elasticsearch 和用于数据探索的 Kibana。为此,您可以在 Elastic Cloud 上的 Elasticsearch 服务中创建一个集群,或者在本地计算机上设置 Elastic Stack

在加载 Kibana 后,便可从主屏幕导航到 Add Data(添加数据)UI,并按照其中的 AWS 模块设置说明进行操作。

为 AWS EC2 部署 Metricbeat

本篇博客将在下面内容中详细介绍它们。

启用 AWS 模块

在 Metricbeat 的开箱即用配置中,仅默认启用 system 模块,因此,您需要显式启用 AWS 模块。以下命令可启用 MacOS 和 Linux 系统中 modules.d 目录下的 AWS 配置:

./metricbeat modules enable aws

在 config 文件中设置 AWS 凭据

有两种不同的 AWS 凭据可供使用:访问密钥临时安全凭据。访问密钥 ID 和加密访问密钥是访问密钥的两个部分。它们是 IAM 用户或 AWS 帐户根用户在进行 AWS API 调用时进行身份验证的长期凭据。临时安全凭据由访问密钥 ID、加密访问密钥和安全令牌组成,其使用期限是有限的。

由于临时安全凭据是短期的,因此,在它们过期后,您需要生成新凭据,并使用新凭据修改 modules.d/aws.yml config 文件。除非针对 Metricbeat 启用了实时重新加载功能,否则您需要在更新 config 文件后手动重新启动 Metricbeat。如果 config 文件在旧凭据过期之前未使用新凭据进行更新,则会导致数据收集停止。 因此,对于 Metricbeat 来说,建议在 config 文件中使用访问密钥,这样可使 AWS 模块进行 AWS API 调用,而无需频繁地生成新临时凭据并更新 config 文件。

创建 IAM 策略

IAM 策略是一个实体,定义对象在您的 AWS 环境中的权限。需要为 Metricbeat 创建具有特定权限的定制 IAM 策略。有关详细信息,请参阅创建 IAM 策略。创建 Metricbeat IAM 策略后,您需要将此策略添加到在上一步中提供凭据的 IAM 用户。

使用 EC2 指标集时,需要将四个权限添加到 Metricbeat IAM 策略:

  • ec2:DescribeRegions
  • ec2:DescribeInstances
  • cloudwatch:ListMetrics
  • cloudwatch:GetMetricData

启动 Metricbeat

以在 Mac 和 Linux 系统上运行的用法为例:

./metricbeat -E setup.dashboards.enabled=true -e

注意: 如果从云实例(如 GCP、AWS 或 Azure)上的虚拟机运行 Metricbeat,则需要删除或注释掉 metricbeat.yml 中的 add_cloud_metadata 条目。

使用正确的 AWS 凭据在 Metricbeat 中启用 EC2 指标集后,Metricbeat 将定期提取有关每个实例的信息,并从 AWS Cloudwatch 收集 EC2 监测指标。EC2 指标集的默认收集期限为 300 秒。如果对实例启用了详细监测,则 EC2 指标集收集期限应改为 60 秒,这是因为付费层将提供更高粒度的指标收集。收集期限是在 modules.d/aws.yml 文件中设置的,例如:

- module: aws
  period:60s
  metricsets:
    - "ec2"
  access_key_id: '${AWS_ACCESS_KEY_ID:""}'
  secret_access_key: '${AWS_SECRET_ACCESS_KEY:""}'
  session_token: '${AWS_SESSION_TOKEN:""}'
  default_region: '${AWS_REGION:us-west-1}'

EC2 指标集将自动发现新实例,并开始从中收集指标。如果 EC2 实例停止或终止,EC2 指标集将在下一收集循环中发现该实例状态更改,并将新状态指标发送给 Elasticsearch。

使用 Kibana AWS 模块仪表板

EC2 指标集包含一个名为 [Metricbeat AWS] EC2 概述的预定义仪表板。通过在启动 Metricbeat 时运行设置命令,您可以在 Kibana 中自动设置这些仪表板。有关详细信息,请参阅设置 Kibana 仪表板

此仪表板是 AWS EC2 实例的概述。它会显示实例的状态和状况检查,以及 CPU 利用率、网络和磁盘 I/O 数据。此外,您还可以应用筛选器,将数据限定在特定区域、可用性区域或计算机类型。

AWS EC2 的 Kibana 仪表板

使用这个仪表板,您可以检测问题,确保每个实例均已针对使用情况进行了优化。例如,如果您看到同一实例的 CPU 利用率持续高企并有各种性能问题,这可能表明 CPU 出现瓶颈,并且这个实例需要更多的 CPU 能力。此外,如果您看到一个实例的 CPU 利用率长期较低,这意味着该实例的 CPU 容量过大,或许可以缩小或与其他实例合并。

后续操作

通过在一个集中位置可视化来自不同 AWS 服务和区域的监测指标,让您能够优化资源使用情况,更快地检测和修复问题。试用一下,然后在 Beats 论坛上说出您的想法,给我们反馈,告诉我们您的使用方法。

AWS 模块中的 EC2 指标集只是一个开始!我们已经在努力添加更多的指标集来监测其他常用服务,例如 Amazon S3、SQS、RDS 等。如果您对我们下一步应解决的问题有什么建议或者希望有所贡献,请立即加入 Beats Github 存储库