EC2 Linux インスタンスから CloudWatch にカスタムメトリクスをプッシュするにはどうすればよいですか ?

最終更新日: 2019 年 8 月 22 日

Amazon Elastic Compute Cloud (EC2) の Linux インスタンスで、OS メトリクスとパフォーマンスカウンターをモニタリングしたいと考えています。Amazon CloudWatch を使用してこれを行う方法を教えてください。

簡単な説明

EC2 Linux インスタンスの統計に関する CloudWatch メトリクスの作成は、AWS コマンドラインインターフェイス (AWS CLI) でスクリプトを記述することで行えます。その後、そのメトリクスを 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 分ごとに実行させます。

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

3.保存して終了します。

crontab を保存すると、 crontab: installing new crontabと表示されます。

EC2 インスタンスのモニタリング

CloudWatch コンソールでカスタムメトリクスを見つけるには次のようにします。

1.CloudWatch コンソールを開きます。

2.[Metrics] をクリックします。

3.[All Metrics] タブを選択します。

4.[Custom] をクリックします。

5.[Instance] ディメンションを選択します。

6.[InstanceId] と [Metric Name] を指定してカスタムメトリクスを選択します。

7.メトリクスのグラフを表示します。

その他の使用法

このサンプルを独自のロジックと組み合わせることで、さまざまなディメンションを処理し、そのメトリクスデータを CloudWatch にプッシュするようにできます。

たとえば、アプリケーションのベンチマークを測ることを考えてみます。こういった場合、I/O 待機時間とメモリ使用量の割合が特定のしきい値に達し、システムが正常に機能しなくなることがあります。この問題には、これら 2 つの値をスクリプトで同時にモニタリングすることで対処できます。CloudWatch にプッシュする 3 番目の変数に論理 AND を使い値を追加します。

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(ゼロ)です。2 つの値について条件が満たされた場合、値は 1 に設定されます。これらのパラメータに対応するカスタムアラームを記述することで、問題となり得るシステムの状況に関する警告を発せられます。


この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合