Amazon CloudWatch
サービスを継続して運用するために、管理者は例えばストレージがすべて使い切られる前に余剰を確保しておいたり、負荷が高くなり機能不全に陥る前に追加のリソースを用意したりと、状況に応じた適切な処置を行う必要があります。
Amazon CloudWatchは、AWSサービスやオンプレミス(自社運用)のシステムを監視し、しきい値(境界値)を超える・下回るなどした場合に管理者に通報するなど、サービスのリソース(CPU使用率やストレージの使用状況など)の状態に応じたアクションを取らせることができます。管理者はCloudWatchを利用することにより、サービスの安定した運用やパフォーマンスの向上、サービスの改善に役立てることができます。
CloudWatch3つの機能:
・CloudWatch
CloudWatchが監視する様々なリソースの情報は「メトリクス」と呼ばれます。インスタンスのCPU使用率やディスクの使用状況(読み取り・書き込みの量)など、予め定義されているメトリクスを標準メトリクスと呼びます。標準メトリクスはサービスごとに提供されており、CloudWatchのダッシュボードから確認することができます。
標準メトリクスとして監視可能な項目の例
EC2・・・CPU使用率、ディスクの読み取り・書き込み量
S3・・・バケットサイズ、オブジェクト数
ELB・・・リクエスト数、リクエスト応答時間
RDS・・・ストレージの空き容量、秒間の読み取り・書き込み操作の量
CloudWatchではこれらのメトリクスに対してアラームとアクションを設定できます。例えば「EC2インスタンスのCPU使用率が80%を超えたとき」というアラームに対して「管理者宛にメール通知」というアクションを設定すると、条件を満たしたときにアクションが実行されます。なお、メール通知はSNS(Simple Notification Service)というメッセージングサービスと連携して実現。
EC2インスタンスについては、メール通知だけではなく、インスタンスの再起動・停止・終了・復旧というアクションも用意されています。例えば、必要な処理が完了したらインスタンスを停止・終了することでコストを削減できます。また、復旧アクションを選択すると、ハードウェア異常が発生した際に自動的に新たなインスタンスで復旧します。
なお、これらの監視間隔はデフォルトで5分です(基本モニタリング)。1分間隔で監視を行いたい場合は「詳細モニタリング」を有効にします。基本モニタリングは無料ですが詳細モニタリングは有料です。
●カスタムメトリクス
標準メトリクスとして用意されていない項目を監視したい場合、管理者は「カスタムメトリクス」を定義します。
EC2インスタンスにおいて、CPU使用率やディスクの読み取り・書き込み量(bytes)などは標準メトリクスとして用意されていますが、メモリ使用量やディスクの空き容量(使用状況)に関する項目はありません。このような項目を監視したい場合、EC2インスタンスへ「CloudWatchエージェント」をインストールし、AWS CLIコマンドやAPIを用いて監視項目をCloudWatchへ送信します。
以下はEC2インスタンスの代表的な監視項目です。
標準メトリクス・・・ネットワーク使用量、ディスクI/O、CPU使用率
カスタムメトリクス・・・メモリ使用量、ディスク空容量、プロセス情報
・CloudWatch Logs
AWSサービスやEC2インスタンスのOSやアプリケーションのログを収集し、一元管理するサービス。収集したログは、メッセージの内容をフィルタリングして管理者に通知させることができます(。
なお、EC2インスタンス上のアプリケーションやOSのログを収集するには、対象のEC2インスタンスへ「CloudWatchエージェント」をインストールする必要があります。
更に、フィルタリングしたログをAmazon KinesisやAWS Lambdaなどの別のサービスへ転送し、ログをリアルタイムに解析したり、ログの内容に応じてプログラムを実行させる、といった連携も可能。
・CloudWatch Logs Insights
2018年に追加された機能で、収集したログのインタラクティブな検索や分析を行うことができます。CloudWatch Logsの管理コンソールでは単語検索によるフィルタリングを行えますが、CloudWatch Logs Insightsではクエリの実行にも対応しており、例えば「特定のアプリケーションが一定期間に出力した"Error"を含むメッセージをカウントする」など柔軟なログ解析が可能。
・CloudWatch Events(Amazon EventBridge)
CloudWatch Eventsは、AWS上のリソースの状態変化やスケジュールに応じてアクションを実行することができるサービス。CloudWatch Eventsを利用すると、管理者は以下のような運用ができます:
・EC2インスタンスが起動状態(running)から停止状態(stopped)になったとき、再起動する
・毎日決まった時刻にアプリケーションのログを収集・圧縮するLambda関数を呼び出す
これらのイベントルールを定義する際、トリガーとなるものを「イベントソース」と呼び、行う処理のことを「ターゲット」と呼びます。
ターゲット(アクション)としては、既に定義されているAPI("EC2:RebootInstances"など)を呼び出したり、他サービスと連携したアクションをとることができます。特にLambda関数を使えばアクションを独自に定義することができますから、例えば毎日定時に決められたスクリプトを実行する、というルールを作成することも可能です。
また、CloudWatch Eventsは、AWS環境の脅威を検知するサービス「Amazon GuardDuty」と連携することもできます。脅威を検知した際に管理者宛にメール通報をさせたり、特定した脅威に対してアクションをとるLambda関数を定義して呼び出す、といった運用を行うことで、AWSサービスやAWSアカウントのセキュリティを高めることができます。
なお、CloudWatch Eventsは「Amazon EventBridge」というサービスになっています。EventBridgeはCloudWatch Eventsをベースに機能が追加されているため、CloudWatch EventsのAPIやルールなどは継続して利用できます。