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

上次更新时间:2019 年 8 月 22 日

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

简短描述

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

解决方法

继续操作之前,确保您已安装配置 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.选择指标

3.选择所有指标选项卡。

4.选择自定义

5.选择维度实例

6.按 InstanceId 指标名称选择您的自定义指标。

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(一)。然后,您可以围绕这些参数构建自定义警报,以警告系统的问题情况。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助吗?