継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

ALB の監視の統計情報を AWS CLI で取得する

タダです.

ELB を使ったシステムで日々の運用状況の確認や障害が発生した時のトラブルシュートに CloudWatch の監視情報やログを使うことがよくあると思います. GUI から確認をしてもいいのですが,例えば時系列ごとのレポーティングに使う際に AWS CLI(以下,CLI)を使って情報収集した方がよいと感じたので,ALB の監視情報収集の方法と実際に使った監視情報の収集利用例を紹介します.

GUI で監視情報を見る場合

マネジメントコンソールの画面で見る場合,メトリクスを選択してグラフを描画することができますが,各メトリクス値は5分間隔などで点線となっているため,「特定日における1時間毎の ELB で発生した5XX系のエラー数を集計したい」といった要望を実現しようとするときは少々手間がかかります. f:id:sadayoshi_tada:20190804153016p:plain

CLI で監視統計情報を見る場合

それでは, CLI の実行方法を見ていきましょう.

docs.aws.amazon.com

まずは,list-metricsコマンドで ALB のリソース情報を取得します. ALB が大量にある場合は,grep で範囲を絞った方が得策です.コマンド実行結果の Value の値が次の統計情報を取得するget-metric-statisticsコマンドで必要になります(例: "Value": "app/xxxx/xxxxxxxxx" 等).

docs.aws.amazon.com

# ALB のリソース情報の取得
aws cloudwatch list-metrics --namespace AWS/ApplicationELB

# コマンド実行結果
~中略~
        {
            "Namespace": "AWS/ApplicationELB",
            "MetricName": "RequestCount",
            "Dimensions": [
                {
                    "Name": "TargetGroup",
                    "Value": "targetgroup/xxxx/xxxxxxxxx"
                },
                {
                    "Name": "LoadBalancer",
                    "Value": "app/xxxx/xxxxxxxxx"
                },
                {
                    "Name": "AvailabilityZone",
                    "Value": "ap-northeast-1a"
                }
            ]
        }
~中略~

次に,get-metric-statisticsコマンドで統計情報を取得します.--dimesionsパラメータにて監視情報を取得するリソース情報を指定する必要があります(Name=LoadBalancer,Value=app/xxxx/xxxxxxxxxの部分).ここでlist-metricsの実行結果の情報が活きてきます.

下記のコマンド例は,8/3の0時から8/4の23:59にかけての1時間毎のUnHealthyHostCountの平均数を出すためのコマンドです.この様に監視の統計情報を取得することが可能です.

aws cloudwatch get-metric-statistics --namespace AWS/ApplicationELB \
--metric-name UnHealthyHostCount --statistics Average  --period 3600 \
--dimensions Name=LoadBalancer,Value=app/xxxx/xxxxxxxxx \
--start-time 2019-08-03T15:00:00Z --end-time 2019-08-04T14:59:59Z

ケース別コマンド実行パターン

上記のコマンドを踏まえ,今回使った ALB の監視情報の収集利用例を紹介します.なお,コマンドのパラメーターは下記のクラスメソッドさんのブログを参考にさせてもらいました.

dev.classmethod.jp

Case1. 特定日におけるリクエストの総数を1時間毎に収集する

例えば,リリースしたてのサービスでキャンペーンやスパイクアクセスが来る時間帯を把握したい時ありますよね? Case1 はその様な用途に使ったコマンド例です.

aws cloudwatch get-metric-statistics --namespace AWS/ApplicationELB \
--metric-name RequestCount --statistics Sum --period 3600 \
--dimensions Name=LoadBalancer,Value=app/xxxx/xxxxxxxx \
--start-time 2019-08-03T15:00:00Z --end-time 2019-08-04T14:59:59Z \
--query "sort_by(Datapoints,&Timestamp)[?Sum>\`0\`][Sum,Timestamp]" --output text

# コマンド実行結果例
100.0 2019-08-03T15:00:00Z
200.0 2019-08-03T16:00:00Z
300.0 2019-08-03T17:00:00Z
~中略~

Case2. 特定日における 5XX系のエラー総数を1時間毎に収集する

そして,エラーの発生時間帯を特定した時のコマンドとして Case2 の様なコマンド例があります.Case1 の--metric-nameHTTPCode_ELB_5XX_Countに変更するだけですね.

aws cloudwatch get-metric-statistics --namespace AWS/ApplicationELB \
--metric-name HTTPCode_ELB_5XX_Count --statistics Sum --period 3600 \
--dimensions Name=LoadBalancer,Value=app/xxxx/xxxxxxxx \
--start-time 2019-08-03T15:00:00Z --end-time 2019-08-04T14:59:59Z \
--query "sort_by(Datapoints,&Timestamp)[?Sum>\`0\`][Sum,Timestamp]" --output text

# コマンド実行結果例
5.0   2019-08-03T15:00:00Z
1000.0    2019-08-04T02:00:00Z
1.0   2019-08-04T09:00:00Z
~中略~

まとめ

CLI を使った ALB の監視統計情報の取得方法と,ケース別の取得例を紹介しました.運用中のシステムになると CloudWatch での状況確認は頻繁になります.GUI でもよいですが,トラブルシュートのレポーティングや日々の運用状況を報告する際には視覚情報と一緒に数値を提供すると信用や説得力が増します.そんな業務に当たった時にはぜひ CLI を使ってみてもらえると良いかと思います.