- CloudWatch によるインスタンスのモニタリング
- 自分なりにはこちらに纏めた
- 今更ウンチクを語る必要も無い
AWSではポピュラーツール - と言いつつ、今更気付いたけど
Java版とPython版がある
- CloudWatch の CLI ツールについて理解を深める
- カスタムメトリクスを投げる方法について理解を深める
- カスタムメトリクスを使って一般的(
Load Averageor メモリ使用量、ディスク使用量)なサーバーリソースの監視が出来るようになる - 同じくカスタムメトリクスを使ってサーバープロセスの監視が出来るようになる
やっていることは同じであろう...という前提で、勝手に対応表を作ってみた。
| Java 版 | Python 版 | やれること | 備考(触っていて気づいたら書く) |
|---|---|---|---|
| mon-cmd | mon-* コマンドの詳細を表示する | ||
| mon-delete-alarms | delete-alarms | 指定されたアラームを削除する | |
| mon-describe-alarm-history | describe-alarm-history | 指定されたアラームの履歴を表示する | 過去 2 週間分に限る |
| mon-describe-alarms | describe-alarms | 設定されているアラームの一覧を表示する | |
| mon-describe-alarms-for-metric | describe-alarms-for-metric | 指定されたメトリックに関連付けられたアラームの情報を表示する | |
| mon-disable-alarm-actions | disable-alarm-actions | 指定したアラームのアクションを無効にする | |
| mon-enable-alarm-actions | enable-alarm-actions | 指定したアラームのアクションを有効にする | |
| mon-get-stats | get-metric-statistics | 指定したメトリクスの時系列データを表示する | |
| mon-list-metrics | list-metrics | AWSアカウントに関連付けられたメトリックのリストを表示する | |
| mon-put-data | put-metric-data | メトリクスデータを追加する | Java 版詳細 / Python 版詳細 |
| mon-put-metric-alarm | put-metric-alarm | 指定されたアラームをメトリクスに設定、更新する | |
| mon-set-alarm-state | set-alarm-state | 一時的にアラーム状態を変更する | 次の監視タイミングまでそのアラームは真の状態に設定される |
| mon-version | バージョン情報を表示 | Amazon CloudWatch CLI version w.x.y.z (API 2010-08-01) と表示された |
ちなみに Amazon Linux の場合にはどちらのバージョンもインストールされていた。
メトリクスデータを追加する mon-put-data と put-metric-data に関して詳しく触れてみる。
- オプション
| Name | 詳細 | デフォルト |
|---|---|---|
| -d, --dimensions "key1=value1,key2=value2..." | 直訳すると dimensions は「大きさ」とかになるけど Instance ID 毎にメトリクス指定したい場合には必要 |
-- |
| -m, --metric-name VALUE1,VALUE2,VALUE3... | メトリクス名を指定 | 必須 |
| -n, --namespace VALUE | メトリクス内に Namespece を含める(AWS Namespaces) |
必須 |
| -s, --statistic Values "key1=value1,key2=value2..." | メトリクスの値を指定する(--value オプションと排他で使用する) |
必須 |
| -t, --timestamp VALUE | メトリックのタイムスタンプを指定(The current UTC time.) |
-- |
| -u, --unit VALUE | 記録されるメトリクスの単位を指定 | -- |
| -v, --value VALUE | メトリクスの値を指定する(--statistic Values オプションと排他で使用する) |
必須 |
--statistic Values は登録するメトリクス内に最高値を含めたい場合に利用出来そう。ただ、基本的には --value で良いのではないかと思っている。
- やってみる
mon-put-data --metric-name RequestCount \
--namespace "MyService" \
--dimensions "Instanceid=`curl -s http://169.254.169.254/latest/meta-data/instance-id`" \
--value `echo $RANDOM`
- 定期的に実行させると...
以下のような Cron を仕込んでおく。(事前にこちらを参考にクライアントツールをダウンロードしておく)
#!/usr/bin/env bash
export JAVA_HOME=/usr/lib/jvm/jre
export PATH=$PATH:$JAVA_HOME/bin
export AWS_CREDENTIAL_FILE=/path/to/key
export AWS_CLOUDWATCH_URL=http://monitoring.us-east-1.amazonaws.com/
export AWS_CLOUDWATCH_HOME=/opt/aws/CloudWatch
Instance_id=`curl -s http://169.254.169.254/latest/meta-data/instance-id`
${AWS_CLOUDWATCH_HOME}/bin/mon-put-data --metric-name RequestCount \
--namespace "MyService" \
--dimensions "Instanceid=${Instance_id}" \
--value `echo $RANDOM`以下のようにグラフが表示される。
- 注意点
When you create a new metric using the mon-put-data command, it can take up to two minutes before you can retrieve statistics on the new metric using the mon-get-stats command. However, it can take up to fifteen minutes before the new metric appears in the list of metrics retrieved using the mon-list-metrics command.
上記のように初めて mon-put-data で登録したデータは mon-get-stats で確認出来るまでに 2 分掛かるようだ。また、mon-list-metrics で確認出来るようになるには 15 分掛かるとのこと。
- オプション
| Name | 詳細 | デフォルト |
|---|---|---|
| --namespace | Namespace を指定する | 要確認 |
| --metric-data | メトリクスを指定する(JSON 形式で登録する) |
要確認 |
| --metric-name | メトリクス名を指定する | 要確認 |
| --timestamp | メトリックのタイムスタンプを指定(The current UTC time.) |
要確認 |
| --unit | 記録されるメトリクスの単位を指定 | 要確認 |
| --value | メトリクスの値を指定する | 要確認 |
| --dimensions | Instance ID 毎にメトリクス指定したい場合には必要 |
要確認 |
| --statistic-values | メトリクスの値を指定する(--value オプションと排他で使用する) |
要確認 |
- やってみる
--metric-data オプションに JSON で書かれたメトリクス情報を登録してみたいので以下のように JSON ファイルを用意する。
[
{
"MetricName": "New Posts",
"Value": 123456789,
"Unit": "Count",
"Dimensions": [
{
"Name": "Instanceid",
"Value": "xxxxxx"
}
]
}
]この JSON ファイルを test.json というファイル名で保存して、以下のように aws コマンドを実行する。
aws --region us-east-1 cloudwatch put-metric-data --namespace "Usage Metrics" --metric-data file://test.json
- 定期的に実行させると...
以下のように JSON を適当に生成させるようなロジックを入れてスクリプト と cron でボチボチ回してみる。
cat << EOT > ${HOME}/cloudwatch/test.json
[
{
"MetricName": "New Posts",
"Value": `echo $RANDOM`,
"Unit": "Count",
"Dimensions": [
{
"Name": "Instanceid",
"Value": "`curl -s http://169.254.169.254/latest/meta-data/instance-id`"
}
]
}
]
EOT
aws --region us-east-1 cloudwatch put-metric-data --namespace "Usage Metrics" --metric-data file://${HOME}/cloudwatch/test.json- コマンドラインから Load Average を取得する方法
uptime |awk '{print $10}' | cut -d ',' -f 1
- コマンドラインからメモリ使用量をメガで取得する方法
free -mt | grep Total | awk '{print $4}'
- ディスク使用量をメガで取得する方法
df -m / | tail -n+2 | while read fs size used rest ; do if [[ $used ]] ; then echo $fs $used; fi; done
以下のような結果が返ってくる。
/dev/xvda1 1488
- 後で調べる
- 後で調べる
CloudWatch を使う上で知っておくと良いと思ったネタをメモ。
インスタンス内から API で取得出来る。
curl http://169.254.169.254/latest/meta-data/
以下のような情報が返ってくる。
ami-id
ami-launch-index
ami-manifest-path
block-device-mapping/
hostname
instance-action
instance-id
instance-type
kernel-id
local-hostname
local-ipv4
mac
metrics/
network/
placement/
profile
public-hostname
public-ipv4
public-keys/
reservation-id
security-groups
インスタンス ID は以下のように取得する。
curl -s http://169.254.169.254/latest/meta-data/instance-id
インスタンスのホスト名は以下のように取得する。
curl -s http://169.254.169.254/latest/meta-data/hostname
以下、イメージ。
簡単や。



CPU 使用率、メモリ使用率、/ パーティションのディスク使用率を取得する bash
ネタ元はこちら。