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

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

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

重要

这些脚本只是示例。他们依原样提供且不受支持。

在使用这些脚本时,将对自定义指标收取相应的标准 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

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

收集和发送 MemoryUsed 指标 (以兆字节报告)。该选项只报告由应用程序和操作系统分配的内存,不包括缓存和缓冲区中的内存。

--mem-used-incl-cache-buff

收集和发送 MemoryUsed 指标 (以兆字节报告)。该选项报告在缓存和缓冲区中,以及由应用程序和操作系统分配的内存中使用。

--mem-avail

收集和发送 MemoryAvailable 指标 (以兆字节报告)。该选项会报告应用程序和操作系统可以使用的内存。

--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-util --mem-used-incl-cache-buff --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