AWS CloudWatch を利用したシステム監視方式に関して説明します。ZabbixやAppManagerを利用したシステム監視と同等の監視を行うことを目標としています。
2022年12月1日更新
監視項目 | EC2を監視する場合 (監視される側にSSM Agent導入) |
物理サーバ/VMを監視する場合 (監視される側にSSM Agent, CloudWatch Agentを導入) |
説明 |
CPU | 標準メトリクス 最大、3回,90%を指定すると3x5分=15分で連続90%で通知。 |
標準メトリクスでは監視できないため、CloudWatch Agentによるカスタムメトリクス | 標準メトリクスは AWS のハイパーバイザーによる監視。物理サーバ / VM は ハイパーバイザー上では動作しないため、別途カスタムメトリクスが必要となる。 |
ディスク | 標準メトリクス | 標準メトリクスでは監視できないため、CloudWatch Agentによるカスタムメトリクス | 標準メトリクスは AWS のハイパーバイザーによる監視。物理サーバ / VM は ハイパーバイザー上では動作しないため、別途カスタムメトリクスが必要となる。 |
ネットワーク | 標準メトリクス | 標準メトリクスでは監視できないため、CloudWatch Agentによるカスタムメトリクス | 標準メトリクスは AWS のハイパーバイザーによる監視。物理サーバ / VM は ハイパーバイザー上では動作しないため、別途カスタムメトリクスが必要となる。 |
その他(パフォーマンスモニタで取得可能な事項) | カスタムメトリクス (*)インスタンス側にCloudWatch Agentを導入。 |
カスタムメトリクス (*)インスタンス側にCloudWatch Agentを導入。 |
メモリ使用率など重要なものはCloudWatch Agent で取得する。 |
PING監視(死活監視) | 標準メトリクス 「StatusCheckFailed」で可能。(実機で確認) |
スクリプト開発+CloudWatch | OSからのシャットダウンでは障害と認識されない。(2023年1月追記、欠落データを不正に設定した場合は、OSの正常シャットダウンもアラーム通知される。) 強制ブルースクリーン(かつ自動再起動なし)などでStatusCheckFailedが認識される。パラメータは1分以内で1など。 |
イベントログのエラー、警告をAWS側で保管、監視 | CloudWatch Agent Logで送信(Cloud Watch Agent導入) | CloudWatch Agent Logで送信(Cloud Watch Agent導入) | 特定キーワードでイベントログのフィルタを行い、フィルタをパスするログを受信したら通知させることが可能。「amazon-cloudwatch-agent-config-wizard.exe」により設定が可能。 |
カスタムログの指定したテキスト内の文字列の監視 | 〇 | 〇 | CloudWatch Log のカスタムログ監視機能を使用する。カスタムメトリックにより、テキストログの送信を行う。送信するログの種類は「amazon-cloudwatch-agent-config-wizard.exe」により設定可能。 (*1)カスタムログの場合は改行ごとに1行のログと認識される。行の先頭にタイムスタンプなどは不要。 (*2)SNS と連携する場合はメールにエラーメッセージを含ませることができない。 |
SNMP トラップ受付(指定したoidで監視) | × | × | 機能なし |
プロセス名、およびプロセス数で監視 | スクリプト開発+CloudWatch | スクリプト開発+CloudWatch | |
ポート番号で監視 | スクリプト開発+CloudWatch | スクリプト開発+CloudWatch | |
サービス名で監視 | スクリプト開発+CloudWatch | スクリプト開発+CloudWatch | |
コマンドの実行結果を確認 | スクリプト開発+CloudWatch | スクリプト開発+CloudWatch | |
HTTP 監視 (応答があること) | スクリプト開発+CloudWatch | スクリプト開発+CloudWatch | |
リモートコマンド | AWS System Manager より任意のpowershell コマンドの実行が可能。 | AWS System Manager より任意のpowershell コマンドの実行が可能。 |
[標準メトリクス]
CloudWatch エージェントなしでも取得可能。デフォルトで取得されている。5分間隔。
(1)基本フロー
・SNSトピックを作成。Cloudwatchで監視するメトリックを選定しその閾値を設定。
監視を超えると「SNSへトピックを通知」「停止、再起動など」「AutoScaling アクション」
などの実行が可能。
(2)監視可能項目
EC2の監視項目は以下の通り(その他 S3、EBS、Lambda、Logs、SNSがあるがここでは省略)
CPU,ディスクI/O,ネットワークI/O,Status.
参考:StatusCheckFailed_System, StatusCheckFailed_Instance ,StatusCheckFailedの違い
[カスタムメトリックス]
・カスタムメトリックスでも aws cloudwatch コマンドで送信するタイプと CloudWatch エージェントで送信可能(jsonで指定)がある。Windows
イベントログは jsonで指定して送信が可能。
(1)設定方法
CloudWatch Agentを導入する。
・EC2インスタンスに AmazonSSMFullAccessとAmazonEC2ReadOnlyAccessをアタッチ。
・"ランコマンド"から導入が可能(AWS-ConfigureAWSPackage→install→AmazonCloudWatchAgent)
成功したらインスタンスにログインし、以下の設定ツールを実行。
C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-config-wizard.exe
→完了すると設定ファイルが「C:\Program Files\Amazon\AmazonCloudWatchAgent\config.json」、および「パラメータストア」に保管される。
(2)"ランコマンド"から設定を反映
AmazonCloudWatch-ManageAgent
アクション「configure」
optional configuration parameter「ssm」
optional configuration location「AmazonCloudWatch-windows」(前の設定ツールで指定したもの、分からなくなったらパラメータストアで確認)
実機ではconfig ファイルが次の場所に保存されました。
C:\ProgramData\Amazon\AmazonCloudWatchAgent\Configs |
(3)無効化
ランコマンドで無効化する。メトリックを送信を続けると課金され続けるので注意。
AWS-ConfigureCloudWatchでStatus=Disabledを設定する。
[メトリックを aws コマンドで送信する]
名前空間:メトリックを格納(--namespace)
ディメンション:メトリックのカテゴリ(--dimensions)
それぞれ存在しない場合は自動的に実行される。以下は実行例。
aws cloudwatch put-metric-data --metric-name ElapsedTime --namespace test1 --dimensions Server=<インスタンスID>,test2 --region=ap-northeast-1 --value 100