AWS CLIを利用してCloudWatchのメトリックを見てみます。
今回は、SNSを例として使います。
前提条件
CloudWatchへの権限
SNSに対して読み取り権限があること。
SNSへの権限
SNSに対してフル権限があること。
AWS CLIのバージョン
以下のバージョンで動作確認済
- AWS CLI 1.10.26
aws --version
aws-cli/1.10.26 Python/2.7.11 Darwin/15.4.0 botocore/1.4.17
バージョンが古い場合は最新版に上げることをオススメします。
sudo -H /opt/local/bin/pip install -U awscli
- 準備
=======
0.1. リージョンの決定
利用するリージョンを決めます。 (カレントユーザが利用するカレントリージ
ョンも切り変わります。)
export AWS_DEFAULT_REGION='ap-northeast-1'
0.2. 変数の確認
プロファイルが想定のものになっていることを確認します。
aws configure list
Name Value Type Location
---- ----- ---- --------
profile admin-prjz-mbp13 env AWS_DEFAULT_PROFILE
access_key ****************XXXX shared-credentials-file
secret_key ****************XXXX shared-credentials-file
region ap-northeast-1 env AWS_DEFAULT_REGION
- 事前作業
===========
1.1. トピックの指定
対象となるトピックを指定します。
SNS_TOPIC_NAME="$(date +%Y%m%d)-handson-topic" \
&& echo ${SNS_TOPIC_NAME}
そのリージョンでユニークである必要があります。
すでに同じ名前のトピックが存在しないことを確認します。
aws sns list-topics |\
grep ${SNS_TOPIC_NAME}
(戻り値なし)
1.2. トピックの作成
以下の手順でトピックを作成してください。
- トピックの作成 http://qiita.com/tcsh/items/e05e21e7338668cbf3b8
- 通知先の登録 (e-mail) http://qiita.com/tcsh/items/ca81576b0018bfa32cbe
- 対象の指定
=============
2.1. 名前空間の指定
CloudWatchの名前空間を指定します。
CWATCH_NAMESPACE='AWS/SNS'
2.2. ディメンションの指定
CloudWatchのディメンションを指定します。
ここでは、トピック名をディメンションとして利用します。
CWATCH_DIMENSIONS="Name=TopicName,Value=${SNS_TOPIC_NAME}"
- メトリックの一覧
===================
指定した名前空間の指定したディメンションで利用できるメトリックの一覧を表示してみましょう。
aws cloudwatch list-metrics \
--namespace ${CWATCH_NAMESPACE} \
--dimensions ${CWATCH_DIMENSIONS}
SNSトピックの作成後、一覧表示されるまで5-10分ほど必要になるようです。
{
"Metrics": [
{
"Namespace": "AWS/SNS",
"Dimensions": [
{
"Name": "TopicName",
"Value": "example-topic"
}
],
"MetricName": "PublishSize"
},
{
"Namespace": "AWS/SNS",
"Dimensions": [
{
"Name": "TopicName",
"Value": "example-topic"
}
],
"MetricName": "NumberOfNotificationsDelivered"
},
{
"Namespace": "AWS/SNS",
"Dimensions": [
{
"Name": "TopicName",
"Value": "example-topic"
}
],
"MetricName": "NumberOfMessagesPublished"
},
{
"Namespace": "AWS/SNS",
"Dimensions": [
{
"Name": "TopicName",
"Value": "example-topic"
}
],
"MetricName": "NumberOfNotificationsFailed"
}
]
}
SNSトピックの作成直後だと、PublishSizeは無いかもしれません。
- 統計情報の範囲、周期の決定
=============================
4.1. 統計周期の決定
統計情報の取得単位(周期)を秒単位で指定します。
ここでは5分(300秒)周期にしてみます。
CWATCH_STAT_PERIOD='300'
4.2. 統計期間の決定
統計情報の対象期間を指定します。
ここでは、24時間(1440分)前から現在を対象にしてみます。
CWATCH_END_TIME=`date -u '+%FT%TZ'` \
&& echo ${CWATCH_END_TIME}
TIME_BEFORE_MIN='1440'
CWATCH_START_TIME=`date -u -v-${TIME_BEFORE_MIN}M '+%FT%TZ'` \
&& echo ${CWATCH_START_TIME}
CWATCH_START_TIME=`date -u -d "${TIME_BEFORE_MIN} mins ago" '+%FT%TZ'` \
&& echo ${CWATCH_START_TIME}
- 統計情報の確認
=========================================
利用できるメトリックから、実際に値を取ってみましょう。
SNSトピック作成直後であれば、残念ながら全て空になっているはずです。
以下の値は、固定のまま利用し、CWATCH_METRIC_NAMEとCWATCH_STATISTICSの値を適宜切り変えていきます。
cat << ETX
CWATCH_NAMESPACE: ${CWATCH_NAMESPACE}
CWATCH_START_TIME: ${CWATCH_START_TIME}
CWATCH_END_TIME: ${CWATCH_END_TIME}
CWATCH_STAT_PERIOD: ${CWATCH_STAT_PERIOD}
CWATCH_DIMENSIONS: ${CWATCH_DIMENSIONS}
ETX
5.1. NumberOfMessagesPublished
metric名と集計方法を決定します。
CWATCH_METRIC_NAME='NumberOfMessagesPublished'
CWATCH_STATISTICS='Sum'
aws cloudwatch get-metric-statistics \
--namespace ${CWATCH_NAMESPACE} \
--metric-name ${CWATCH_METRIC_NAME} \
--start-time ${CWATCH_START_TIME} \
--end-time ${CWATCH_END_TIME} \
--period ${CWATCH_STAT_PERIOD} \
--statistics ${CWATCH_STATISTICS} \
--dimensions ${CWATCH_DIMENSIONS}
{
"Datapoints": [
{
"Timestamp": "2015-01-05T00:02:00Z",
"Sum": 0.0,
"Unit": "Count"
}
],
"Label": "NumberOfMessagesPublished"
}
{
"Datapoints": [],
"Label": "NumberOfMessagesPublished"
}
5.2. PublishSize
metric名を決定します。
CWATCH_METRIC_NAME='PublishSize'
集計方法を決定します。
PublishSizeは、以下の4種類の集計方法を選択できます。
CWATCH_STATISTICS='Minimum'
CWATCH_STATISTICS='Maximum'
CWATCH_STATISTICS='Average'
CWATCH_STATISTICS='SampleCount'
aws cloudwatch get-metric-statistics \
--namespace ${CWATCH_NAMESPACE} \
--metric-name ${CWATCH_METRIC_NAME} \
--start-time ${CWATCH_START_TIME} \
--end-time ${CWATCH_END_TIME} \
--period ${CWATCH_STAT_PERIOD} \
--statistics ${CWATCH_STATISTICS} \
--dimensions ${CWATCH_DIMENSIONS}
{
"Datapoints": [],
"Label": "PublishSize"
}
5.3. NumberOfNotificationsDelivered
metric名と集計方法を決定します。
CWATCH_METRIC_NAME='NumberOfNotificationsDelivered'
CWATCH_STATISTICS='Sum'
aws cloudwatch get-metric-statistics \
--namespace ${CWATCH_NAMESPACE} \
--metric-name ${CWATCH_METRIC_NAME} \
--start-time ${CWATCH_START_TIME} \
--end-time ${CWATCH_END_TIME} \
--period ${CWATCH_STAT_PERIOD} \
--statistics ${CWATCH_STATISTICS} \
--dimensions ${CWATCH_DIMENSIONS}
{
"Datapoints": [
{
"Timestamp": "2016-05-09T05:19:00Z",
"Sum": 1.0,
"Unit": "Count"
}
],
"Label": "NumberOfNotificationsDelivered"
}
{
"Datapoints": [],
"Label": "NumberOfNotificationsDelivered"
}
5.4. NumberOfNotificationsFailed
metric名を決定します。
CWATCH_METRIC_NAME='NumberOfNotificationsFailed'
集計方法を決定します。
NumberOfNotificationsFailedは、以下の2種類の集計方法を選択できます。
CWATCH_STATISTICS='Sum'
CWATCH_STATISTICS='Average'
aws cloudwatch get-metric-statistics \
--namespace ${CWATCH_NAMESPACE} \
--metric-name ${CWATCH_METRIC_NAME} \
--start-time ${CWATCH_START_TIME} \
--end-time ${CWATCH_END_TIME} \
--period ${CWATCH_STAT_PERIOD} \
--statistics ${CWATCH_STATISTICS} \
--dimensions ${CWATCH_DIMENSIONS}
{
"Datapoints": [
{
"Timestamp": "2016-05-09T05:19:00Z",
"Average": 0.0,
"Unit": "Count"
}
],
"Label": "NumberOfNotificationsFailed"
}
{
"Datapoints": [],
"Label": "NumberOfNotificationsFailed"
}
完了
CloudWatchに保存されたSNSの監視情報について見ることができました。