1. tcsh

    Posted

    tcsh
Changes in title
+[JAWS-UG CLI] CloudWatch:#1 メトリックを見る (SNS)
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,339 @@
+http://jawsug-cli.doorkeeper.jp/events/17391 でのハンズオン資料です。
+
+AWS CLIを利用してCloudWatchのメトリックを見てみます。
+今回は、SNSを例として使います。
+
+
+前提条件
+========
+
+## CloudWatchへの権限
+
+* CloudWatchに対してフル権限があること。
+
+## AWS CLIのバージョン
+
+以下のバージョンで動作確認済
+
+* AWS CLI 1.6.10
+
+
+0. 事前準備
+===========
+
+0.1. トピックの作成
+---------------------
+
+トピックが存在し、通知が可能になっている必要があります。
+
+以下のハンズオンを事前に行なってください。
+
+* トピックの作成 http://qiita.com/tcsh/items/e05e21e7338668cbf3b8
+* 通知先の登録 (e-mail) http://qiita.com/tcsh/items/ca81576b0018bfa32cbe
+
+
+0.2. リージョンの指定
+---------------------
+
+対象のトピックが存在するリージョンを指定します。
+
+```bash:コマンド:
+ export AWS_DEFAULT_REGION='ap-northeast-1'
+```
+
+このハンズオンでは、AWS標準のリージョン変数を利用していますが、regionオプションでコマンド毎に指定しても同様の結果になります。
+(「オペミスを回避するために明示的に実行する」という意味ではregionオプションの方が良いです。)
+
+
+0.3. トピックの指定
+-------------------
+
+対象となるトピックを指定します。
+
+```bash:コマンド:
+ SNS_TOPIC_NAME='example-topic'
+```
+
+
+1. 対象の指定
+=============
+
+
+名前空間の指定
+--------------
+
+CloudWatchの名前空間を指定します。
+
+```bash:コマンド:
+ CWATCH_NAMESPACE='AWS/SNS'
+```
+
+
+ディメンションの指定
+--------------------
+
+CloudWatchのディメンションを指定します。
+
+ここでは、トピック名をディメンションとして利用します。
+
+```bash:コマンド:
+ CWATCH_DIMENSIONS="Name=TopicName,Value=${SNS_TOPIC_NAME}"
+```
+
+
+
+2. メトリックの一覧
+===================
+
+指定した名前空間の指定したディメンションで利用できるメトリックの一覧を表示してみましょう。
+
+```bash:コマンド:
+ aws cloudwatch list-metrics \
+ --namespace ${CWATCH_NAMESPACE} \
+ --dimensions ${CWATCH_DIMENSIONS}
+```
+
+SNSトピックの作成後、一覧表示されるまで5-10分ほど必要になるようです。
+
+
+```json:結果:
+ {
+ "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は無いかもしれません。
+
+
+
+3. 統計情報の範囲、周期の決定
+=============================
+
+
+3.1. 統計周期の決定
+-------------------
+
+統計情報の取得単位(周期)を秒単位で指定します。
+ここでは5分(300秒)周期にしてみます。
+
+```bash:コマンド:
+ CWATCH_STAT_PERIOD='300'
+```
+
+
+3.2. 統計期間の決定
+-------------------
+
+統計情報の対象期間を指定します。
+ここでは、24時間(1440分)前から現在を対象にしてみます。
+
+```bash:コマンド:
+ CWATCH_END_TIME=`date -u '+%FT%TZ'` \
+ && echo ${CWATCH_END_TIME}
+ TIME_BEFORE_MIN='1440'
+```
+
+```bash:コマンド(OSX/BSD系OSの場合):
+ CWATCH_START_TIME=`date -u -v-${TIME_BEFORE_MIN}M '+%FT%TZ'` \
+ && echo ${CWATCH_START_TIME}
+```
+
+```bash:コマンド(Linux系OSの場合):
+ CWATCH_START_TIME=`date -u -d "${TIME_BEFORE_MIN} mins ago" '+%FT%TZ'` \
+ && echo ${CWATCH_START_TIME}
+```
+
+
+4. 統計情報の確認
+=========================================
+
+http://docs.aws.amazon.com/sns/latest/dg/MonitorSNSwithCloudWatch.html
+
+利用できるメトリックから、実際に値を取ってみましょう。
+SNSトピック作成直後であれば、残念ながら全て空になっているはずです。
+
+
+NumberOfMessagesPublished
+-------------------------
+
+metric名と集計方法を決定します。
+
+```bash:コマンド:
+ CWATCH_METRIC_NAME='NumberOfMessagesPublished'
+ CWATCH_STATISTICS='Sum'
+```
+
+```bash:コマンド:
+ 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}
+```
+
+```json:結果(データが存在する場合の例):
+{
+ "Datapoints": [
+ {
+ "Timestamp": "2015-01-05T00:02:00Z",
+ "Sum": 0.0,
+ "Unit": "Count"
+ }
+ ],
+ "Label": "NumberOfMessagesPublished"
+}
+```
+
+
+PublishSize
+-----------
+
+metric名を決定します。
+
+```bash:コマンド:
+ CWATCH_METRIC_NAME='PublishSize'
+```
+
+集計方法を決定します。
+PublishSizeは、以下の4種類の集計方法を選択できます。
+
+```bash:コマンド:
+ CWATCH_STATISTICS='Minimum'
+ CWATCH_STATISTICS='Maximum'
+ CWATCH_STATISTICS='Average'
+ CWATCH_STATISTICS='SampleCount'
+```
+
+```bash:コマンド:
+ 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}
+```
+
+```json:結果:
+ {
+ "Datapoints": [],
+ "Label": "PublishSize"
+ }
+```
+
+
+NumberOfNotificationsDelivered
+------------------------------
+
+metric名と集計方法を決定します。
+
+```bash:コマンド:
+ CWATCH_METRIC_NAME='NumberOfNotificationsDelivered'
+ CWATCH_STATISTICS='Sum'
+```
+
+```bash:コマンド:
+ 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}
+```
+
+```json:結果(データが存在しない場合の例):
+ {
+ "Datapoints": [],
+ "Label": "NumberOfNotificationsDelivered"
+ }
+```
+
+
+NumberOfNotificationsFailed
+---------------------------
+
+metric名を決定します。
+
+```bash:コマンド:
+ CWATCH_METRIC_NAME='NumberOfNotificationsFailed'
+```
+
+集計方法を決定します。
+NumberOfNotificationsFailedは、以下の2種類の集計方法を選択できます。
+
+```bash:コマンド:
+ CWATCH_STATISTICS='Sum'
+ CWATCH_STATISTICS='Average'
+```
+
+```bash:コマンド:
+ 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}
+```
+
+```json:結果(データが存在しない場合の例):
+ {
+ "Datapoints": [],
+ "Label": "NumberOfNotificationsFailed"
+ }
+```
+
+
+完了
+====
+
+CloudWatchに保存されたSNSの監視情報について見ることができました。
+次は、CloudWatchに保存されているSQSの監視情報についてアラートを設定してみます。