已弃用:使用 CloudWatch 监控脚本收集指标 - Amazon Elastic Compute Cloud

已弃用:使用 CloudWatch 监控脚本收集指标

重要

CloudWatch 监控脚本已弃用。此页面为仍在使用这些监控脚本的客户提供相关信息,但这些监控脚本已不再可用。

我们强烈建议您使用 CloudWatch 代理收集指标和日志。有关更多信息,请参阅《Amazon CloudWatch 用户指南》中的使用 CloudWatch 代理从 Amazon EC2 实例和本地服务器中收集指标和日志

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

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

支持的系统

已使用以下系统在实例上测试监控脚本。不支持在任何其他操作系统上使用监控脚本。

  • Amazon Linux 2

  • Amazon Linux AMI 2014.09.2 和更高版本

  • Red Hat Enterprise Linux 6.9 和 7.4

  • SUSE Linux Enterprise Server 12

  • Ubuntu Server 14.04 和 16.04

所需权限

确保脚本具有通过将 IAM 角色与您的实例关联来调用以下操作的权限:

  • cloudwatch:PutMetricData

  • cloudwatch:GetMetricStatistics

  • cloudwatch:ListMetrics

  • ec2:DescribeTags

有关更多信息,请参阅使用 IAM 角色

安装所需的程序包

对于 Linux 的某些版本,您必须先安装额外的 Perl 模块,然后才能使用监控脚本。

在 Amazon Linux 2 和 Amazon Linux AMI 上安装所需的程序包
  1. 登录您的实例。有关更多信息,请参阅连接到您的 Linux 实例

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

    sudo yum install -y perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https perl-Digest-SHA.x86_64
在 Ubuntu 上安装所需的程序包
  1. 登录您的实例。有关更多信息,请参阅连接到您的 Linux 实例

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

    sudo apt-get update sudo apt-get install unzip sudo apt-get install libwww-perl libdatetime-perl
在 Red Hat Enterprise Linux 7 上安装所需的程序包
  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
在 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[2]> install LWP::Protocol::https cpan[3]> install Sys::Syslog cpan[4]> install Switch
在 SUSE 上安装所需的程序包
  1. 登录您的实例。有关更多信息,请参阅连接到您的 Linux 实例

  2. 在运行 SUSE Linux Enterprise Server 12 的服务器上,您可能需要下载 perl-Switch 程序包。您可以使用以下命令来下载并安装此程序包:

    wget http://download.opensuse.org/repositories/devel:/languages:/perl/SLE_12_SP3/noarch/perl-Switch-2.17-32.1.noarch.rpm sudo rpm -i perl-Switch-2.17-32.1.noarch.rpm
  3. 安装所需的程序包,如下所示:

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

安装监控脚本

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

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

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

    unzip CloudWatchMonitoringScripts-1.2.2.zip && \ rm CloudWatchMonitoringScripts-1.2.2.zip && \ cd aws-scripts-mon

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

  • 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 – 版权声明。

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 policy 需要具有调用 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

以下示例收集 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

要为向 CloudWatch 报告的指标制定 cron 计划,请使用 crontab -e 命令开始编辑 crontab。添加下列命令,每五分钟将内存和磁盘空间使用率报告到 CloudWatch:

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

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

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

执行脚本的测试运行。该选项还会检查是否已提供凭证。

--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.aws.amazon.com/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