woshidan's blog

そんなことよりコードにダイブ。

CloudWatchにさわってみたときのメモ(カスタムメトリクスのパブリッシュ、アラームの設定)

とりあえず今日はCloudWatchの復習で。

CloudWatchはAWSのモニタリングや監視のためのサービスで、EC2など各種AWSのサービスを動かすと自動的にCPU利用率などのメトリクスを取得してくれる他、AWS CLIなどを利用してカスタムメトリクスを送ることも可能です。

CloudWatchの用語: 名前空間とディメンジョン、メトリクス

それぞれのメトリクスには名前空間とディメンジョン、名前があります。AWSサービスの場合の名前空間はサービス名であることが多いです。

f:id:woshidan:20180817022426p:plain

名前空間はそれぞれディメンジョンで区切ることができ、たとえばEC2名前空間に設定されているディメンジョンは

があります。(ディメンジョンが設定されていないデータについては

のように「範囲の定められていないメトリクス」に収められます。)

ディメンジョンをクリックすると出てくるCPU使用率などがメトリクスの名前にあたります。

カスタムメトリックを送信してみる

データのタイムスタンプと個別のデータポイント、あるいは、ある時刻のデータポイントの数、データの数値合計、平均といった集計値を送信することができます。 データのタイムスタンプは現在時刻から2週間前の間に指定する必要があります。

個別のデータポイントのデータを送る

TIMESTAMP=2018-08-08T08:08:00Z

aws cloudwatch put-metric-data --metric-name RequestLatency --namespace GetStarted \
--timestamp $TIMESTAMP --value 8 --unit Milliseconds

ある時刻のデータポイントの数、データの数値合計、平均といった集計値を送信する

TIMESTAMP=2018-08-08T08:08:00Z

aws cloudwatch put-metric-data --metric-name RequestLatency --namespace GetStarted \
--timestamp $TIMESTAMP --statistic-values Sum=40,Minimum=8,Maximum=8,SampleCount=8 --unit Milliseconds

送ったメトリクスは

f:id:woshidan:20180817023112p:plain

のようにグラフで確認可能です。

CloudWatchのアラームを作成する

CloudWatchのグラフを表示している画面から、CloudWatchのアラームを作成することができます。

アラームは、アラームの状態ごとにAmazon SNSと連携させることでSlackやメールで通知、PagerDutyなどインシデント管理サービスのアイテム作成の自動化に利用できます。

アラームの状態変化について

アラームは基本的にアラーム作成画面の

f:id:woshidan:20180817024410p:plain

の部分の条件式を満たしていたら OK、そうでない場合は ALARM , アラームの間隔内にデータポイントがない場合はINSUFFICIENT DATA の状態になります。

qiita.com

の記事にあるコマンドを

$ aws cloudwatch set-alarm-state --alarm-name "RequestLatency is High" --state-value ALARM --state-reason "alarm-test"

のように打ち込むと一瞬指定した状態にアラームの状態を変化させることができます。その後、すぐに直近のデータに応じた状態に戻ってしまいますが、アラームの通知連携のテストにはむしろ便利でしょう。

アラームの状態に応じて動作するプログラムなどをテストするときは、欠落データの処理方法を変更するとデータを送っていない間の状態が指定しやすくて便利です。

参考

今日は短いですが、現場からは以上です。