【初心者向け】Amazon CloudWatch 入門!完全ガイド
CloudWatch
☘️ はじめに
本ページは、AWS に関する個人の勉強および勉強会で使用することを目的に、AWS ドキュメントなどを参照し作成しておりますが、記載の誤り等が含まれる場合がございます。
最新の情報については、AWS 公式ドキュメントをご参照ください。
👀 Contents
- CloudWatch とは
- オブザーバビリティ(Observability)とは
- CloudWatch Metrics
- CloudWatch Metric Math
- CloudWatch Metric Streams
- CloudWatch Alarms
- CloudWatch Logs
- CloudWatch エージェント
- CloudWatch Dashboards
- CloudWatch Events / EventBridge
- CloudWatch Metrics Insights
- CloudWatch Logs Insights
- CloudWatch Container Insights
- CloudWatch Lambda Insights
- CloudWatch Contributor Insights
- CloudWatch Application Insights
- CloudWatch ServiceLens
- CloudWatch Resource Health
- CloudWatch Synthetics
- CloudWatch Evidently
- CloudWatch Real-User Monitoring (RUM)
- CloudWatch Anomaly Detection
- One Observability Workshop
- 📖 まとめ
CloudWatch とは
モニタリングに関する様々な機能を提供するサービスです。
【AWS Black Belt Online Seminar】Amazon CloudWatch(YouTube)(47:14)
Amazon CloudWatch の概要と基本【AWS Black Belt】(YouTube)(1:00:43)
Amazon CloudWatch Synthetics【AWS Black Belt】(YouTube)(39:18)
オブザーバビリティ(Observability)とは
「可観測性」といい、システムの外部から、システム内部の状態が推測・把握できるかという意味です。
システムの状態把握に必要なものと、それに対応する AWS サービスは次のとおりです。
- ログ ⇒ CloudWatch Logs
- メトリクス ⇒ CloudWatch Metrics
- トレース ⇒ X-Ray
CloudWatch Metrics
メトリクスを収集し、統計を取得
- 名前空間>ディメンション>メトリクス
- 次の統計が使用可能
- Minimum
- Maximum
- Sum
- Average
- SampleCount
- パーセンタイル
CloudWatch Metric Math
メトリクスに数式を使用して新しいメトリクスを作成できます
コンソールで、CloudWatch メトリクスを表示している状態で、[数式の追加]を選択します。
既に表示しているメトリクスの Id 列の文字列を使うことで、演算が可能です。単純な四則演算や、SUM や AVG といった集計も利用できます。
ここで作成した数式使ってアラームを作成することができます。
CloudWatch Metric Streams
ほぼリアルタイムにメトリクスを Kinesis 経由で送信するサービスです。
AWS サービスはもちろん、New Relic や Datadog のような外部の SaaS 、HTTP エンドポイントと連携できます。
設定は、コンソールから メトリクス>ストリーム を選択し、[メトリクスストリームの作成]から作成できます。
CloudWatch Alarms
メトリクスを監視し、敷居値を超えた場合にアクションを実行できます。
アクションには、SNS のトピックや Lambda を呼び出すなどができます
2つ以上のアラームを組み合わせた 複合アラーム
も設定できます。
ALARM(CPUUtilizationTooHigh) AND ALARM(DiskReadOpsTooHigh)
アラームをテストするには、AWS CLI の aws cloudwatch set-alarm-state
を利用してステータスを強制的に変更し アラームを実行させる方法があります。
ほかには、すぐにアラームが実行されるような敷居値にする、という方法もありますが、値を変更しないでテストできる set-alarm-state
のほうがいいでしょう。
CloudWatch Logs
ログを集約できるサービスです。ロググループ>ログストリーム という形式で格納されます。
ロググループ単位で保存期間を任意に設定することで、コスト削減できます。
サブスクリプションフィルターを使うことで、ログから任意の文字(ERROR など)を検知し、処理(kinesis や Lmabda に連携)を行うできます。
kinesis と連携することでログを S3 に転送することもできます
CloudWatch Logs サブスクリプションフィルターの使用
CloudWatch エージェント
CloudWatch エージェントを使用して Amazon EC2 インスタンスとオンプレミスサーバーからメトリクスとログを収集する
EC2 やオンプレミスサーバに CloudWatch エージェントをインストールすることで、ログファイルを CloudWatch Logs に転送したり、標準では取得できないメモリなどのメトリクスを CloudWatch に転送することができます。
エージェントは、次の方法でインストールできます
オンプレミスサーバにもエージェントをインストールし、メトリクスやログを収集することができます。オンプレミスサーバ上の ~/.aws/credentials
に aws_access_key_id と aws_secret_access_key を設定します。
CloudWatch Dashboards
CloudWatch にて収集したデータをグラフなどで表示するサービスです
CloudWatch Events / EventBridge
現在は、拡張された Amazon EventBridge を利用します
時間や、他のリソースなど、イベント駆動アーキテクチャを実現するためのサービスです
CloudWatch Metrics Insights
CloudWatch Metrics Insights を使用してメトリクスをクエリする
Metric Math
を使うことで、四則演算、最大最小などを求めることはできますが、式が複雑になりがちです。
Metrics Insights
を使うことで、SQL によるメトリクスの集計が可能になります。次のような構文で分析を行うことができます。
SELECT FUNCTION(metricName)
FROM namespace | SCHEMA(...)
[ WHERE labelKey OPERATOR labelValue [AND ... ] ]
[ GROUP BY labelKey [ , ... ] ]
[ ORDER BY FUNCTION() [ DESC | ASC ] ]
[ LIMIT number ]
SQL が書けなくてもクエリビルダーを使うことで簡単に作成することができます。
CloudWatch Logs Insights
クエリ言語を使用して、ロググループを検索、集計できます
fields @message
| parse @message "[*] *" as loggingType, loggingMessage
| filter loggingType = "ERROR"
| display loggingMessage
CloudWatch Container Insights
タスクやコンテナ単位のメトリクスが、Container Insights によって取得できるようになるサービスです。
ECS コンテナのクラスター設定で 有効
にすることで利用できます。
[アカウント設定] を使うことで、アカウントレベルで設定を行い、アカウント内で作成される ECS クラスタに対して Container Insights を有効にすることができます。
収集されたメトリクスは、ECS/ContainerInsights
名前空間にあります。
Container Insights により収集されるメトリクス
CloudWatch Lambda Insights
サーバーレスアプリケーションの Lambda 関数ランタイムパフォーマンスメトリクスとログを収集および集計できるサービスです。
使用したい Lambda 関数の [設定>モニタリングおよび運用ツール]から、「拡張モニタリング」を ON
にすることで利用できます。
Lambda Insights によって収集されたメトリクス に記載がありますが、init_duration
メトリクスが取得できるようになるので、コールドスタートの時間も分析できます。
また、memory_utilization
メトリクスにより関数に割り当てられたメモリの使用率も取得することができます。
CloudWatch Contributor Insights
Contributor Insights を使用した高カーディナリティデータの分析
CloudWatch Logs の特定箇所を抽出して、可視化することができます。
例えば、VPC フローログを CloudWatch Logs に出力している場合、サンプルルールを使用することで簡単に可視化できます。
他にも CloudWatch Logs にログを出力していれば、アプリケーションのログを分析することが可能です。
CloudWatch Application Insights
Amazon CloudWatch Application Insights
特定のリソースのメトリクスだけでなく、リソースグループという単位で Amazon EC2 インスタンスを使用するアプリケーションをまとめて監視、通知できるサービスです。
CloudWatch コンソールから、[Application Insight の使用を開始する] から設定するだけです。
セットアップ後、アラームも自動で作成されています。
ダッシュボードでアラームを確認することができます。
CloudWatch ServiceLens
様々なリソースの情報を 1 カ所に統合して可視化するサービスで、マイクロサービスなどで特に効果を発揮します。X-Ray と連携します。
CloudWatch Resource Health
CPU やメモリの使用率の状況を視覚的に把握することができるサービスです。管理している EC2 の台数が多い場合はカッコイイ表示ができます。
デフォルトではマップ表示ですが、表示形式を切り替えることができます。
(先ほどの引用画像とは異なり、EC2 が少なく、停止しているような状態では少々さみしい感じになってしまいます)
マップ表示
リスト表示では、EC2 コンソールと似ていますが、CPU やメモリの使用率が一覧で見られる点が異なります。
CloudWatch Synthetics
Web サイトや URL、REST API に対してのモニタリングを自動で実行可能なサービスで、Web サイトの死活監視も可能です。
同様の機能に、Route53 の HealthCheck がありますが、こちらよりも複雑な条件を設定することができ、実際にユーザーがアクセスするようなパラメータを再現できます。
テンプレートがあるので、簡単に作成することができます。
失敗した場合はこのようになります。
スクリーンショットを取得するようにしていると、このように確認することができます。
成功の場合はこのようになります。
削除する場合は、一度[中止]してから[削除]を行います。スクリーンショットなどの出力先である S3 バケットは削除されませんので、後で削除する必要があります。
チェックした結果は、CloudWatchSynthetics
名前空間にメトリクスがあるので、アラームを設定することもできます。
CloudWatch Evidently
機能フラグ(フィーチャーフラグ:Feature Flag)と A/B テストが実施できるサービスです。
機能フラグとは、「コードを書き換えることなく動的にシステムの振る舞いを変更できる」開発手法です。
たとえば、DB のエンドポイントを渡すことで動的に切り替える、特定のユーザーやある割合のユーザーのみに機能を公開し、徐々に割合を増やしていくといったケースで使われます。
CloudWatch Real-User Monitoring (RUM)
JavaScript のコードスニペットをクライアントアプリに埋め込んでデータを収集し、ダッシュボードで可視化できます。
サイト訪問者の地域やブラウザ、動線を統計分析してくれる機能です。
CloudWatch Anomaly Detection
CloudWatch メトリクス上の異常値を自動検出ができるサービスです。
CloudWatch アラームを作成するときに、適正な閾値を設定するのは容易ではありません。平日・休日、日中・夜間、キャンペーン時期などなど、考慮することが多いです。
そのようなときに、利用するのが本サービスです。機械学習により異常値を自動検出できます。
自動検出を有効にしたメトリクスでは、予想される範囲がグレーで表示され、異常値と判定したところが赤線になっています。
アラーム設定では、[静的]ではなく[異常値]にすることで利用できます。
One Observability Workshop
監視系のサービスを学べるワークショップ。3~4 時間ほどで終わるが、下記構成図から分かるように様々なサービスを利用するので、ある程度の課金を覚悟して使う。
Discussion