我如何将自定义指标从 EC2 Linux 实例推送到 CloudWatch?

上次更新时间:2020 年 11 月 18 日

我想要监控 Amazon Elastic Compute Cloud (EC2) Linux 实例的 OS 指标和性能计数器。如何使用 Amazon CloudWatch 实现此目的?

简短描述

您可以通过 AWS 命令行界面 (AWS CLI) 创建脚本,以此为您的 EC2 Linux 实例统计创建自定义 CloudWatch 指标。然后,您可以将该指标推送到 CloudWatch 对其进行监控。

解决方法

注意:如果在运行 AWS CLI 命令时遇到错误,请确保您使用的是最新版本的 AWS CLI

在继续操作之前,请确保配置 AWS CLI 以用于要监控的实例。

创建自定义 CloudWatch 指标

创建自定义指标:

1.    通过 AWS CLI 登录到实例。

2.    复制以下 Bash 脚本,然后将它保存到您的实例(例如,mem.sh)。

此示例脚本显示您可以在 CloudWatch 中发布的值。在此示例中,使用 put-metric-data API 调用将下面的值推送到 CloudWatch 中:

  • 已用内存百分比 (USEDMEMORY)
  • 总连接数 (TCP_CONN)
  • 端口 80 上的 TCP 连接数量 (TCP_CONN_PORT_80)
  • 当前登录的用户数量 (USERS)
  • I/O 等待时间百分比 (IO_WAIT)
========Sample script======
#!/bin/bash
USEDMEMORY=$(free -m | awk 'NR==2{printf "%.2f\t", $3*100/$2 }')
TCP_CONN=$(netstat -an | wc -l)
TCP_CONN_PORT_80=$(netstat -an | grep 80 | wc -l)
USERS=$(uptime |awk '{ print $6 }')
IO_WAIT=$(iostat | awk 'NR==4 {print $5}')
 
aws cloudwatch put-metric-data --metric-name memory-usage --dimensions Instance=i-0c51f9f1213e63159  --namespace "Custom" --value $USEDMEMORY
aws cloudwatch put-metric-data --metric-name Tcp_connections --dimensions Instance=i-0c51f9f1213e63159  --namespace "Custom" --value $TCP_CONN
aws cloudwatch put-metric-data --metric-name TCP_connection_on_port_80 --dimensions Instance=i-0c51f9f1213e63159  --namespace "Custom" --value $TCP_CONN_PORT_80
aws cloudwatch put-metric-data --metric-name No_of_users --dimensions Instance=i-0c51f9f1213e63159  --namespace "Custom" --value $USERS
aws cloudwatch put-metric-data --metric-name IO_WAIT --dimensions Instance=i-0c51f9f1213e63159  --namespace "Custom" --value $IO_WAIT
===============================================

3.    创建 Bash 脚本后,为文件授予执行权限。

$ chmod +x mem.sh

4.    运行 Bash 脚本,以检查其是否正常工作。

将您的指标推送至 CloudWatch

1.    创建 cron 任务:

$ crontab -e

2.    添加以下行以每分钟执行一次您的脚本:

*/1 * * * * /home/ec2-user/mem.sh

3.    保存并退出。

保存时 crontab,系统会显示 crontab:安装新 crontab

监控 EC2 实例

在 CloudWatch 控制台中查找您的自定义指标:

1.    打开 CloudWatch 控制台

2.    选择 Metrics(指标)。

3.    选择 All Metrics(所有指标)选项卡。

4.    选择 Custom(自定义)。

5.    选择维度实例

6.    按实例 ID指标名称选择您的自定义指标。

7.    查看您的指标的图表。

其他使用情况

您可以使用本示例构建自己的逻辑,以处理多个维度,然后将该指标数据推送到 CloudWatch。

例如,假设您对您的应用程序进行基准测试。然后,您发现当 I/O 等待时间和内存使用百分比达到特定阈值时,系统会停止正常运行。要解决此问题,您可以同时监视脚本中的这两个值。将值的逻辑 AND 存储到您推送至 CloudWatch 的第三个变量中。

c=0
if [[  $IO_WAIT > 70 && $USEDMEMORY > 80 ]]
then
  c=1
fi
aws cloudwatch put-metric-data --metric-name danger --dimensions Instance=i-0c51f9f1213e63159  --namespace "Custom" --value $c

正常条件下,此变量为 0(零)。在满足这两个条件的情况下,此值设置为 1(一)。然后,您可以根据这些参数构建自定义警报以警告您的系统状况有问题。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?