Amazon Elastic Compute Cloud
Linux 实例用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

为 Amazon EC2 Linux 实例监控内存和磁盘指标

新的可用 CloudWatch 代理

提供了一个新的多平台 CloudWatch 代理。您可以使用单个代理收集来自 Amazon EC2 实例和本地服务器的系统指标与日志文件。新代理支持 Windows Server 和 Linux 并让您能够选择要收集的指标,包括子资源指标 (如每 CPU 内核)。建议您使用新代理 (而不是较旧的监控脚本) 收集指标和日志。有关 CloudWatch 代理的更多信息,请参阅 Amazon CloudWatch 用户指南 中的使用 CloudWatch 代理收集来自 Amazon EC2 实例和本地服务器的指标

本节的其余部分供仍在使用较旧的 Perl 脚本进行监控的客户参考。您可从 AWS 示例代码库下载这些用于 Linux 的 Amazon CloudWatch 监控脚本

CloudWatch 监控脚本

Amazon CloudWatch 监控脚本 (用于基于 Amazon Elastic Compute Cloud (Amazon EC2) Linux 的实例) 演示如何生成和使用 Amazon CloudWatch 自定义指标。这些示例 Perl 脚本包含一个功能完备的示例,用于报告 Linux 实例的内存、交换文件和磁盘空间使用率指标。

在使用这些脚本时,将对自定义指标收取相应的标准 Amazon CloudWatch 使用费。有关更多信息,请参阅 Amazon CloudWatch 定价页。

支持的系统

这些监控脚本专门用于运行 Linux 的 Amazon EC2 实例。这些脚本均使用下列 Amazon 系统映像 (AMI) 在实例上进行过测试 (包括 32 位和 64 位版本):

  • Amazon Linux 2014.09.2

  • Red Hat Enterprise Linux 7.4 和 6.9

  • SUSE Linux Enterprise Server 12

  • Ubuntu Server 16.04 和 14.04

您还可以通过将此数据发送给 CloudWatch Logs,在运行 Windows 的 Amazon EC2 实例上监控内存和磁盘指标。有关更多信息,请参阅 Amazon EC2 用户指南(适用于 Windows 实例) 中的向 Amazon CloudWatch 发送日志、事件和性能计数器

程序包内容

监控脚本的程序包中包含以下文件:

  • CloudWatchClient.pm – 共享 Perl 模块,以简化从其他脚本调用 Amazon CloudWatch 的过程。

  • mon-put-instance-data.pl – 收集 Amazon EC2 实例中的系统指标 (内存、交换、磁盘空间利用率) 并将其发送到 Amazon CloudWatch。

  • mon-get-instance-stats.pl – 查询 Amazon CloudWatch 并显示在其上执行此脚本的 EC2 实例的最近利用率统计数据。

  • awscreds.template – AWS 凭证的文件模板,其中存储您的访问密钥 ID 和私有访问密钥。

  • LICENSE.txt – 包含 Apache 2.0 许可证的文本文件。

  • NOTICE.txt – 版权声明。

先决条件

对于 Linux 的某些版本,您必须安装额外的模块,监控脚本才能正常运行。

Amazon Linux AMI

如果您在运行 Amazon Linux AMI 版本 2014.03 或更高版本,必须安装额外的 Perl 模块。

安装所需的程序包

  1. 登录您的实例。有关更多信息,请参阅 连接到您的 Linux 实例

  2. 在命令提示符下,按如下方式安装程序包:

    sudo yum install perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https -y

    注意

    如果您运行的是 Amazon Linux 2,可能还需要安装 perl-Digest-SHA.x86_64

Red Hat Enterprise Linux

您必须安装额外的 Perl 模块。

在 Red Hat Enterprise Linux 6.9 上安装所需的程序包

  1. 登录您的实例。有关更多信息,请参阅 连接到您的 Linux 实例

  2. 在命令提示符下,按如下方式安装程序包:

    sudo yum install perl-DateTime perl-CPAN perl-Net-SSLeay perl-IO-Socket-SSL perl-Digest-SHA gcc -y sudo yum install zip unzip
  3. 以权限经过提升的用户身份运行 CPAN:

    sudo cpan

    出现提示时始终按 Enter,直到您看到以下提示:

    cpan[1]>
  4. 在 CPAN 提示下,运行以下的每个命令:运行一个命令,该命令将进行安装,然后在您返回到 CPAN 提示时运行下一个命令。在系统提示继续完成该过程时像之前一样按 Enter:

    cpan[1]> install YAML cpan[1]> install LWP::Protocol::https cpan[1]> install Sys::Syslog cpan[1]> install Switch

在 Red Hat Enterprise Linux 7.4 上安装所需的程序包

  1. 登录您的实例。有关更多信息,请参阅 连接到您的 Linux 实例

  2. 在命令提示符下,按如下方式安装程序包:

    sudo yum install perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https perl-Digest-SHA --enablerepo="rhui-REGION-rhel-server-optional" -y sudo yum install zip unzip

SUSE Linux Enterprise Server

您必须安装额外的 Perl 模块。

在 SUSE 上安装所需的程序包

  1. 登录您的实例。有关更多信息,请参阅 连接到您的 Linux 实例

  2. 在命令提示符下,按如下方式安装程序包:

    sudo zypper install perl-Switch perl-DateTime sudo zypper install –y "perl(LWP::Protocol::https)"

Ubuntu Server

您必须通过如下方式配置您的服务器。

在 Ubuntu 上安装所需的程序包

  1. 登录您的实例。有关更多信息,请参阅 连接到您的 Linux 实例

  2. 在命令提示符下,按如下方式安装程序包:

    sudo apt-get update sudo apt-get install unzip sudo apt-get install libwww-perl libdatetime-perl

入门

下列步骤介绍如何在 EC2 Linux 实例上下载、解压缩和配置 CloudWatch 监控脚本。

要下载、安装和配置监控脚本

  1. 在命令提示符下,移至希望存储监控脚本的文件夹,并运行以下命令下载监控脚本:

    curl http://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.1.zip -O
  2. 运行以下命令安装您下载的监控脚本:

    unzip CloudWatchMonitoringScripts-1.2.1.zip rm CloudWatchMonitoringScripts-1.2.1.zip cd aws-scripts-mon
  3. 请确保脚本有权限使用以下选项之一执行 CloudWatch 操作:

    • 如果将一个 IAM 角色 (实例配置文件) 与您的实例相关联,请确认该角色授予了执行以下操作的权限:

      • cloudwatch:PutMetricData

      • cloudwatch:GetMetricStatistics

      • cloudwatch:ListMetrics

      • ec2:DescribeTags

    • 在证书文件中指定您的 AWS 凭证。首先,请将监控脚本中包含的 awscreds.template 文件复制到 awscreds.conf,如下所示:

      cp awscreds.template awscreds.conf

      在这个文件中添加以下内容:

      AWSAccessKeyId=my-access-key-id AWSSecretKey=my-secret-access-key

      有关如何查看您的 AWS 凭证的信息,请参阅 Amazon Web Services 一般参考 中的了解并获取您的安全凭证

mon-put-instance-data.pl

此脚本会收集当前系统的内存、交换和磁盘空间使用率数据。然后远程调用 Amazon CloudWatch,以自定义指标的形式报告收集到的数据。

选项

名称 描述

--mem-util

以百分比收集和发送 MemoryUtilization 指标。此指标计算应用程序分配和操作系统使用的内存,如果您指定 --mem-used-incl-cache-buff 选项,则还将缓存和缓冲区内存包括在已用内存中。

--mem-used

收集和发送 MemoryUsed 指标 (以兆字节报告)。此指标计算应用程序分配和操作系统使用的内存,如果您指定 --mem-used-incl-cache-buff 选项,则还将缓存和缓冲区内存包括在已用内存中。

--mem-used-incl-cache-buff

如果包括此选项,则在报告 --mem-util--mem-used--mem-avail 的指标时,当前用于缓存和缓冲区的内存将计为“已用”。

--mem-avail

收集和发送 MemoryAvailable 指标 (以兆字节报告)。此指标计算应用程序分配和操作系统使用的内存,如果您指定 --mem-used-incl-cache-buff 选项,则还将缓存和缓冲区内存包括在已用内存中。

--swap-util

收集和发送 SwapUtilization 指标 (以百分比报告)。

--swap-used

收集和发送 SwapUsed 指标 (以兆字节报告)。

--disk-path=PATH

选择要报告的磁盘。

PATH 可以为需要报告的文件系统指定装入点或装入点上的任何文件。如需选择多个磁盘,请为每个磁盘分别指定 --disk-path=PATH

要为装载于 //home 位置的文件系统选择磁盘,请使用下列参数:

--disk-path=/ --disk-path=/home

--disk-space-util

收集和发送选定磁盘的 DiskSpaceUtilization 指标。指标以百分比报告。

请注意,此脚本计算的磁盘使用率指标与 df -k -l 命令计算的值不同。如果您认为 df -k -l 计算的值更有用,则可以在脚本中更改计算结果。

--disk-space-used

收集和发送选定磁盘的 DiskSpaceUsed 指标。指标默认以千兆字节报告。

受限于 Linux 操作系统中的保留磁盘空间,已用磁盘空间和可用磁盘空间可能无法准确相加得到磁盘空间总量。

--disk-space-avail

收集和发送选定磁盘的 DiskSpaceAvailable 指标。指标以千兆字节报告。

受限于 Linux 操作系统中的保留磁盘空间,已用磁盘空间和可用磁盘空间可能无法准确相加得到磁盘空间总量。

--memory-units=UNITS

指定报告内存使用率所采用的单位。如果不指定,则内存以兆字节报告。单位可以是以下一种:字节、千字节、兆字节、千兆字节。

--disk-space-units=UNITS

指定报告磁盘空间使用率所采用的单位。如果不指定,则磁盘空间以千兆字节报告。单位可以是以下一种:字节、千字节、兆字节、千兆字节。

--aws-credential- file=PATH

提供包含 AWS 凭证的文件的位置。

此参数不能与 --aws-access-key-id 和 --aws-secret-key 参数一起使用。

--aws-access-key-id=VALUE

指定用于识别发起人的 AWS 访问密钥 ID。必须与 --aws-secret-key 选项一起使用。不要将该选项与 --aws-credential-file 参数一起使用。

--aws-secret-key=VALUE

指定用于签署 CloudWatch 请求的 AWS 秘密访问密钥。必须与 --aws-access-key-id 选项一起使用。不要将该选项与 --aws-credential-file 参数一起使用。

--aws-iam-role=VALUE

指定用于提供 AWS 凭证的 IAM 角色。必须提供 =VALUE 值。如果不指定凭证,则会应用与 EC2 实例关联的默认 IAM 角色。只能使用一个 IAM 角色。如果未找到任何 IAM 角色,或者找到多个 IAM 角色,则脚本会返回一条错误信息。

请勿将该选项与 --aws-credential-file--aws-access-key-id--aws-secret-key 参数一起使用。

--aggregated[=only]

为实例类型、AMI ID 及区域整体情况添加聚合指数。=only 值是可选的,如果指定,则脚本只报告聚合指标。

--auto-scaling[=only]

为 Auto Scaling 组添加聚合指标。=only 值为可选,如果指定,则脚本只会报告 Auto Scaling 指标。使用脚本与 IAM 账户或角色关联的 IAM 策略必须有权调用 EC2 操作 DescribeTags

--verify

会对收集指标的脚本执行一次试运行,准备完整 HTTP 请求,但是不会调用 CloudWatch 以报告数据。该选项还会检查是否已提供凭证。在详细模式中运行时,该选项输出的指标会发送到 CloudWatch。

--from-cron

从 cron 调用脚本时,请使用该选项。使用该选项时,会阻止所有诊断输出,但错误消息会发送到用户账户的本地系统日志。

--verbose

显示脚本正在处理的内容的详细信息。

--help

显示使用率信息。

--version

显示脚本的版本号。

示例

以下示例假设您提供了一个 IAM 角色或 awscreds.conf 文件。否则,您必须使用 --aws-access-key-id--aws-secret-key 参数为这些命令提供凭证。

执行简单试运行而不将数据发布到 CloudWatch

./mon-put-instance-data.pl --mem-util --verify --verbose

收集所有可用内存指标并将其发送到 CloudWatch,将缓存和缓冲区内存计为“已用”

./mon-put-instance-data.pl --mem-used-incl-cache-buff --mem-util --mem-used --mem-avail

为报告到 CloudWatch 的指标制定 cron 计划

  1. 使用下列命令开始编辑 crontab:

    crontab -e
  2. 添加下列命令,每五分钟将内存和磁盘空间使用率报告到 CloudWatch:

    */5 * * * * ~/aws-scripts-mon/mon-put-instance-data.pl --mem-used-incl-cache-buff --mem-util --disk-space-util --disk-path=/ --from-cron

    如果脚本遇到错误,则会在系统日志中写下错误消息。

收集 Auto Scaling 组的聚合指标并将其发送到 Amazon CloudWatch,但不报告单独的实例指标

./mon-put-instance-data.pl --mem-util --mem-used --mem-avail --auto-scaling=only

收集实例类型、AMI ID 和区域的聚合指标并将其发送到 Amazon CloudWatch,但不报告单独的实例指标

./mon-put-instance-data.pl --mem-util --mem-used --mem-avail --aggregated=only

mon-get-instance-stats.pl

此脚本可在使用最近小时数提供的时间间隔内查询 CloudWatch 中有关内存、交换和磁盘空间指标的统计数据。将为对其执行此脚本的 Amazon EC2 实例提供该数据。

选项

名称 描述

--recent-hours=N

指定报告依据的最近小时数,由 N 表示,其中 N 是一个整数。

--aws-credential-file=PATH

提供包含 AWS 凭证的文件的位置。

--aws-access-key-id=VALUE

指定用于识别发起人的 AWS 访问密钥 ID。必须与 --aws-secret-key 选项一起使用。不要将该选项与 --aws-credential-file 选项一起使用。

--aws-secret-key=VALUE

指定用于签署 CloudWatch 请求的 AWS 秘密访问密钥。必须与 --aws-access-key-id 选项一起使用。不要将该选项与 --aws-credential-file 选项一起使用。

--aws-iam-role=VALUE

指定用于提供 AWS 凭证的 IAM 角色。必须提供 =VALUE 值。如果不指定凭证,则会应用与 EC2 实例关联的默认 IAM 角色。只能使用一个 IAM 角色。如果未找到任何 IAM 角色,或者找到多个 IAM 角色,则脚本会返回一条错误信息。

请勿将该选项与 --aws-credential-file--aws-access-key-id--aws-secret-key 参数一起使用。

--verify

会对收集指标的脚本执行一次试运行,准备完整 HTTP 请求,但是不会调用 CloudWatch 以报告数据。该选项还会检查是否已提供凭证。在详细模式中运行时,该选项输出的指标会发送到 CloudWatch。

--verbose

显示脚本正在处理的内容的详细信息。

--help

显示使用率信息。

--version

显示脚本的版本号。

示例

要获得最近 12 小时的使用率统计数据,请运行以下命令:

./mon-get-instance-stats.pl --recent-hours=12

以下为响应示例:

Instance metric statistics for the last 12 hours. CPU Utilization Average: 1.06%, Minimum: 0.00%, Maximum: 15.22% Memory Utilization Average: 6.84%, Minimum: 6.82%, Maximum: 6.89% Swap Utilization Average: N/A, Minimum: N/A, Maximum: N/A Disk Space Utilization on /dev/xvda1 mounted as / Average: 9.69%, Minimum: 9.69%, Maximum: 9.69%

在控制台中查看自定义指标

在成功运行 mon-put-instance-data.pl 脚本后,您可以在 Amazon CloudWatch 控制台中查看自定义指标。

要查看自定义指标

  1. 如前所述运行 mon-put-instance-data.pl

  2. 通过以下网址打开 CloudWatch 控制台:https://console.amazonaws.cn/cloudwatch/

  3. 选择 View Metrics

  4. 对于 Viewing,由脚本发布的自定义指标带有前缀 System/Linux

故障排除

CloudWatchClient.pm 模块在本地缓存实例元数据。如果您从运行监控脚本的实例中创建 AMI,在缓存 TTL (默认值:6 小时;对于 Auto Scaling 组为 24 小时) 内从此 AMI 启动的任何实例都将使用原始实例的实例 ID 发送指标。缓存 TTL 时间段过后,脚本会检索新数据,监控脚本将使用当前实例的实例 ID。要立即更正此问题,请使用以下命令删除缓存数据:

rm /var/tmp/aws-mon/instance-id