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

最終更新日: 2020 年 11 月 18 日

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

簡単な説明

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

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

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

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

EC2 インスタンスをモニタリングする

CloudWatch コンソールで、作成したカスタムメトリクスを見つけます。

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

2.    [メトリクス] を選択します。

3.    [すべてのメトリクス] タブを選択します。

4.    [カスタム] を選択します。

5.    ディメンションの [インスタンス] を選択します。

6.    InstanceIdメトリクス名を使用してカスタムメトリクスを選択します。

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(ゼロ)です。両方の条件が満たされた場合、値は 1 に設定されます。次に、これらのパラメータに関するカスタムアラームを構築し、システムで問題のある状況を警告できます。


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


請求に関するサポートまたは技術サポートが必要ですか?