運用監視の要!CloudWatchでシステムの状態を可視化・アラート設定
こんにちは!現役クラウドエンジニアのAkrです。
「【AWSプロフェッショナルへの道】現役クラウドエンジニアが贈る実践ガイド」の第18回をお届けします。前回はGitHub ActionsとAWSを連携させたモダンなCI/CDワークフローを構築し、開発の自動化について学びました。開発したアプリケーションを安定して稼働させるには、そのアプリケーションやインフラの状態を常に監視し、異常をいち早く検知することが不可欠です。
今回は、AWSの運用監視の要となるサービス、Amazon CloudWatchを徹底的に解説します。CloudWatchは、AWSリソースだけでなく、アプリケーションやオンプレミスのシステムの状態をログとメトリクスという2つの側面から可視化し、異常を検知するためのアラートを発報する統合的なモニタリングサービスです。
「うちのサービス、今どういう状態なの?」「サーバーのCPUが急に上がった原因は?」「エラーが発生したらすぐに通知を受け取りたい」といった悩みを、CloudWatchがどのように解決してくれるのかを学びましょう。本記事では、CloudWatchの基本概念から、ログの収集・分析、メトリクスの可視化、アラームの設定、そしてダッシュボードの作成までを網羅的に学び、実践的な監視・運用スキルを身につけます。
1. CloudWatchとは?ログとメトリクスの役割
Amazon CloudWatchは、AWSリソースや、ユーザーが実行するアプリケーション、オンプレミスシステムから、モニタリングデータ(ログとメトリクス)を収集・追跡し、ダッシュボードで可視化したり、設定した閾値を超えた場合にアラームを通知したりするサービスです。
CloudWatchは主に以下の2つの役割を担います。
ログ (Logs)
CloudWatch Logsは、様々なソースからログデータを収集し、一元管理するサービスです。
-
ロググループ (Log Group): ログストリームの集まりです。通常、アプリケーションやサービスごとにロググループを作成します(例:
/aws/lambda/my-function
)。 - ログストリーム (Log Stream): 同じソースから連続して生成されるログデータのシーケンスです。
ログは、アプリケーションのエラーメッセージやスタックトレース、リクエストの詳細など、イベント単位の詳細情報を提供します。これにより、**「何が起こったのか」**を詳細に分析できます。
メトリクス (Metrics)
CloudWatch Metricsは、時間と共に変化する数値データ(メトリクス)を収集・追跡します。
- メトリクス (Metric): 監視対象の変数です(例: CPU使用率、リクエスト数)。
-
名前空間 (Namespace): メトリクスのコンテナです。AWSサービスは独自の名前空間を使用します(例:
AWS/EC2
,AWS/Lambda
)。 - ディメンション (Dimension): メトリクスの特性を特定するキーと値のペアです。同じCPU使用率というメトリクスでも、インスタンスIDなどのディメンションで区別できます。
メトリクスは、システムのパフォーマンスや状態を俯瞰的に把握するための数値データです。これにより、**「システムが今どういう状態か」**を把握できます。
2. CloudWatch Logs: ログの収集、分析、メトリクス化
CloudWatch Logsは、アプリケーションのデバッグやトラブルシューティングに不可欠なサービスです。
2.1. ログの収集
AWSの主要なサービスは、CloudWatch Logsにログを自動的に送信します。
-
Lambda: 実行ログが
/aws/lambda/関数名
のロググループに自動で保存されます。 -
ECS: コンテナのログドライバーに
awslogs
を設定することで、CloudWatch Logsにログを送信できます。 - EC2: CloudWatchエージェントをEC2インスタンスにインストールすることで、OSやアプリケーションのログを送信できます。
- VPCフローログ: VPC内のネットワークトラフィックのログを送信できます。
2.2. ログの分析
CloudWatch Logsには、収集したログを分析するための便利な機能があります。
- ログイベントの検索: ロググループ内で特定のキーワードや正規表現を使ってログイベントを検索できます。
- CloudWatch Logs Insights: ログデータをSQLライクなクエリで分析できるサービスです。エラー率の計算や、特定のAPIコールのレイテンシー集計など、複雑な分析が可能です。
実践!Logs InsightsでLambdaのログを分析してみよう
-
AWSマネジメントコンソールでCloudWatchに移動します。
-
左のナビゲーションペインから「ログ」→「Logs Insights」を選択します。
-
「ロググループを選択」で、Lambda関数のロググループ(例:
/aws/lambda/my-simple-api-function
)を選択します。 -
以下のクエリを実行してみましょう。
fields @timestamp, @message | sort @timestamp desc | limit 20
-
fields
で表示するフィールドを指定し、sort
でソート、limit
で件数を制限します。
次に、
INFO
レベルのログのみを抽出するクエリを実行してみましょう。fields @timestamp, @message | filter @message like /INFO/ | sort @timestamp desc | limit 20
-
filter
で特定の条件に一致するログを絞り込めます。
-
2.3. ログからメトリクスを作成
ログの中に含まれる特定のパターンを抽出し、メトリクスとしてカウントすることができます。これをメトリクスフィルタと呼びます。
実践!エラーログからメトリクスを作成してみよう
- CloudWatchコンソールで、「ログ」→「ロググループ」を選択します。
- Lambda関数のロググループを選択し、「メトリクスフィルタを作成」をクリックします。
-
フィルタパターン:
ERROR
- このパターンに一致するログイベントを抽出します。
-
メトリクスを作成:
-
メトリクス名前空間:
MyLambdaErrors
-
メトリクス名:
ErrorCount
- 「メトリクスフィルタを作成」をクリック。
-
メトリクス名前空間:
これで、ログにERROR
という単語が含まれるたびに、MyLambdaErrors
という名前空間のErrorCount
というメトリクスが1つ増えるようになります。
3. CloudWatch Metricsとアラーム
メトリクスは、システムの健全性を数値で把握するために不可欠です。
3.1. メトリクスの可視化
AWSは、EC2のCPU使用率やLambdaの実行回数など、多くの標準メトリクスを自動的に収集しています。
実践!Lambdaのメトリクスをダッシュボードで見てみよう
- CloudWatchコンソールで、左のナビゲーションペインから「メトリクス」を選択します。
- 「すべてのメトリクス」タブで、「
AWS/Lambda
」→「関数名
」を選択します。 -
my-simple-api-function
のInvocations
(実行回数)、Errors
(エラー数)、Duration
(実行時間)などを選択します。 - グラフ上にデータが表示されることを確認します。
3.2. アラームの設定
メトリクスが設定した閾値を超えた場合に、通知を送ることができます。
実践!Lambdaのエラー数に基づいてアラームを設定してみよう
- CloudWatchコンソールで、「アラーム」→「アラームの作成」をクリックします。
-
メトリクスと条件を指定:
- 「メトリクスを選択」をクリックし、先ほど作成したカスタムメトリクス
MyLambdaErrors
を選択します。-
MyLambdaErrors
→Log Group, Metric
→ErrorCount
-
- 「次へ」をクリックします。
- 「メトリクスを選択」をクリックし、先ほど作成したカスタムメトリクス
-
メトリクスと条件の指定:
-
アラーム閾値:
静的
-
期間:
1分
-
以下のときに
ErrorCount
がより大きい
0
(1分間に1回でもエラーが発生したら) - 「次へ」をクリックします。
-
アラーム閾値:
-
通知:
- 「SNSトピックを選択」で、「新しいトピックの作成」を選択します。
-
SNSトピック名:
my-cloudwatch-alert
- Eメールエンドポイント: 通知を受け取りたいメールアドレスを入力します。
- 注: ここで入力したメールアドレスに確認メールが送信されるので、必ず購読を承認してください。
- 「次へ」をクリックします。
-
名前と説明の追加:
-
アラーム名:
MyLambdaErrorAlarm
- 「次へ」→「アラームを作成」をクリック。
-
アラーム名:
これで、Lambda関数でエラーが発生した場合、設定したメールアドレスに通知が届くようになります。
4. CloudWatch ダッシュボード
ダッシュボードは、複数のグラフやアラームの状態を一つの画面にまとめて表示し、システムの全体像を把握するために非常に便利です。
実践!ダッシュボードを作成してみよう
- CloudWatchコンソールで、「ダッシュボード」を選択し、「ダッシュボードを作成」をクリックします。
-
ダッシュボード名:
MyWebAppDashboard
- 「ウィジェットを追加」をクリックし、「グラフ」を選択します。
- メトリクスを追加する画面で、Lambda関数の
Invocations
、Errors
、Duration
などを追加します。 - 「ウィジェットを追加」をクリック。
- 同様に「ウィジェットを追加」をクリックし、「アラームの状態」を選択して、先ほど作成した
MyLambdaErrorAlarm
を追加します。 - 「保存」をクリック。
これで、Webアプリケーションの主要なメトリクスとアラームの状態を一目で確認できるダッシュボードが完成しました。
5. CloudWatchのベストプラクティス
-
ログとメトリクスの使い分け:
- メトリクスは、システムの健全性を俯瞰的に把握するために利用します。
- ログは、トラブル発生時に詳細な原因を究明するために利用します。
- CloudWatchエージェントの活用: EC2インスタンスのCPUやメモリだけでなく、ディスクIO、プロセス数、カスタムログなど、より詳細なメトリクスやログを収集したい場合は、CloudWatchエージェントをインストールしましょう。
- アラームの通知先: メール通知だけでなく、SNSトピックをトリガーにしてLambda関数を呼び出し、SlackやMicrosoft Teamsに通知を送るなどの自動化も可能です。
- CloudWatch Events (EventBridge) の活用: AWSサービスのイベント(例: EC2インスタンスの起動)や、定期的なスケジュール(例: 毎朝9時)に基づいて、Lambda関数やEC2コマンドなどを自動実行できます。
- コストの最適化: CloudWatch Logsの保持期間や、メトリクスの解像度(標準解像度か高解像度か)を適切に設定し、コストを最適化しましょう。
まとめ
今回は、AWSのモニタリングサービスであるAmazon CloudWatchについて、その主要な機能と実践的な使い方を学びました。
- CloudWatchは、ログとメトリクスを統合的に管理する運用監視の要です。
- CloudWatch Logsでログを収集・分析し、CloudWatch Logs InsightsでSQLライクなクエリを実行できることを学びました。
- CloudWatch Metricsでシステムのパフォーマンスを数値で可視化し、アラームを設定して異常を検知する仕組みを構築しました。
- 最後に、複数のメトリクスとアラームを一つの画面にまとめるダッシュボードを作成しました。
CloudWatchを使いこなすことで、あなたは「何が起きているか分からない」という状況から解放され、システムの健全性を常に把握し、問題発生時には迅速に対応できるようになります。これは、信頼性の高いシステムを運用するために不可欠なスキルです。
この記事が皆さんのAWS学習の一助となれば幸いです。
もしこの記事が役に立ったと感じたら、ぜひ「いいね」👍をお願いします!励みになります!