0.はじめに
Amazon EC2 Windows インスタンスを利用していますが、
パフォーマンス監視は Zabbix を使って、
ログ監視は特に何も、
という感じでした。
CloudWatch のメトリクスの保存期間も長くなったみたいですし、
運用の手間やリスク、コスト削減も考慮して、
パフォーマンス監視を CloudWatch、
ログ監視を CloudWatch Logs、
にしようかと思います。
1.EC2Config の最新バージョンへのアップデート
- 以下のサイトの手順に従って、アップデートします。
2.Amazon EC2 Systems Manager (SSM) エージェントのインストール
- EC2 インスタンスに割り当てられている IAM Role に「AmazonEC2RoleforSSM」を付与します。
- 以下のサイトの手順に従って、アップデートします。
- [2018.03.09追記] 以下のサイトの手順に従って、SSM のログを CloudWatchLogs へ送信する様に設定します。
- CloudWatch Logs へのログの送信 (SSM エージェント) - AWS Systems Manager
- 私は、SSM/Log というロググループ名にしました。
3.Amazon EC2 Systems Manager (SSM) エージェントを使っての CloudWatch の設定
-
以下のサイトを参考にしました。
-
まず、以下の json ファイルを準備します。
- 78 行目 : "NameSpace": "System/Detail/Windows"
- これが、カスタム名前空間になります。適当な名称に変更して下さい。
- 44-69 行目 :
- C ドラのメトリクスの設定になります。他のドライブを追加するのであれば、C を D に変えて、行を追加して下さい。
- 85 行目にも追加するのを忘れずに。
Sample-ConfigureCloudWatch-Windows.json - 78 行目 : "NameSpace": "System/Detail/Windows"
{
"EngineConfiguration": {
"PollInterval": "00:00:15",
"Components": [
{
"Id": "CPULoadAverage",
"FullName": "AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch",
"Parameters": {
"CategoryName": "System",
"CounterName": "Processor Queue Length",
"InstanceName": "",
"MetricName": "CPULoadAverage",
"Unit": "Percent",
"DimensionName": "InstanceId",
"DimensionValue": "{instance_id}"
}
},
{
"Id": "MemoryAvailable",
"FullName": "AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch",
"Parameters": {
"CategoryName": "Memory",
"CounterName": "Available Bytes",
"InstanceName": "",
"MetricName": "MemoryAvailable",
"Unit": "Bytes",
"DimensionName": "InstanceId",
"DimensionValue": "{instance_id}"
}
},
{
"Id": "MemoryFree",
"FullName": "AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch",
"Parameters": {
"CategoryName": "Memory",
"CounterName": "Free & Zero Page List Bytes",
"InstanceName": "",
"MetricName": "MemoryFree",
"Unit": "Bytes",
"DimensionName": "InstanceId",
"DimensionValue": "{instance_id}"
}
},
{
"Id": "MemoryCommitLimit",
"FullName": "AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch",
"Parameters": {
"CategoryName": "Memory",
"CounterName": "Commit Limit",
"InstanceName": "",
"MetricName": "MemoryCommitLimit",
"Unit": "Bytes",
"DimensionName": "InstanceId",
"DimensionValue": "{instance_id}"
}
},
{
"Id": "MemoryCommitted",
"FullName": "AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch",
"Parameters": {
"CategoryName": "Memory",
"CounterName": "Committed Bytes",
"InstanceName": "",
"MetricName": "MemoryCommitted",
"Unit": "Bytes",
"DimensionName": "InstanceId",
"DimensionValue": "{instance_id}"
}
},
{
"Id": "MemoryCommitUtilization",
"FullName": "AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch",
"Parameters": {
"CategoryName": "Memory",
"CounterName": "% Committed Bytes in Use",
"InstanceName": "",
"MetricName": "MemoryCommitUtilization",
"Unit": "Percent",
"DimensionName": "InstanceId",
"DimensionValue": "{instance_id}"
}
},
{
"Id": "DiskAvailableMegabytesC",
"FullName": "AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch",
"Parameters": {
"CategoryName": "LogicalDisk",
"CounterName": "Free Megabytes",
"InstanceName": "C:",
"MetricName": "DiskAvailableMegabytesC",
"Unit": "Megabytes",
"DimensionName": "InstanceId",
"DimensionValue": "{instance_id}"
}
},
{
"Id": "DiskFreePercentC",
"FullName": "AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch",
"Parameters": {
"CategoryName": "LogicalDisk",
"CounterName": "% Free Space",
"InstanceName": "C:",
"MetricName": "DiskFreePercentC",
"Unit": "Percent",
"DimensionName": "InstanceId",
"DimensionValue": "{instance_id}"
}
},
{
"Id": "CloudWatch",
"FullName": "AWS.EC2.Windows.CloudWatch.CloudWatch.CloudWatchOutputComponent,AWS.EC2.Windows.CloudWatch",
"Parameters":
{
"AccessKey": "",
"SecretKey": "",
"Region": "ap-northeast-1",
"NameSpace": "System/Detail/Windows"
}
}
],
"Flows": {
"Flows":
[
"(CPULoadAverage,MemoryAvailable,MemoryFree,MemoryCommitLimit,MemoryCommitted,MemoryCommitUtilization,DiskAvailableMegabytesC,DiskFreePercentC),CloudWatch"
]
}
}
}
```
- EC2 のマネジメントコンソールの左側ペインから、「SYSTEMS MANAGER 共有リソース」→「マネージドインスタンス」を選択します。対象となる EC2 インスタンスが表示されるはずなので選択し(表示されなければ、これまでの手順に何か問題があるのかも?)、「関連付けの作成」ボタンを押下します。
* 
1. 「関連付けの作成」画面が表示されるので、以下の項目を入力し、「関連付けの作成」ボタンを押下します。 * 関連付けの名前 : Sample-ConfigureCloudWatch-Windows ※ 任意 * ドキュメントを選択 * ドキュメント : AWS-ConfigureCloudWatch * バージョンの説明 : - * ターゲット ※ 対象となる EC2 インスタンスが設定されれば OK。 * ターゲットの選択 : インスタンスの手動選択 ※ 任意 * インスタンスの選択 : 対象となる EC2 インスタンス * スケジュール * 指定 : Cron スケジュールビルダー ※ デフォルト * 関連付けの実行 : 30 分ごと ※ デフォルト * パラメーター * Status : Enabled ※ デフォルト * Properties : ※ json ファイルの内容をコピペ * 詳細設定 * S3 への書き込み : □ ※ デフォルト
* 
1. 「関連付けの作成」の結果画面が表示されるので、「閉じる」ボタンを押下します。
* 
1. 元の一覧画面が表示されるので、関連付けがちゃんと作成されているか確認します。 * ※しばらくすると、ステータスが「保留中」から「成功」に変わるはずです。
* 
* 
1. CloudWatch のマネジメントコンソールの左側ペインから、「メトリクス」を選択します。設定したカスタム名前空間と EC2 インスタンスの ID でフィルタをかけて、設定したメトリクスのデータがあるか確認します。
* 
4.Amazon EC2 Systems Manager (SSM) エージェントを使っての CloudWatch Logs の設定
-
CloudWatch Logs の設定も、CloudWatch の手順と同じです。違うのは、json ファイルの設定内容だけです。
-
以下、EventLog の json ファイルです。
- 36 行目 : "LogGroup": "Windows/EventLog"
- ロググループです。適当な名称に変更して下さい。
- 10,18,26 行目 :
- 出力レベルです。適当な値に変更して下さい。
Sample-ConfigureCloudWatchLogs-Windows_EventLog.json{ "EngineConfiguration": { "PollInterval": "00:00:15", "Components": [ { "Id": "ApplicationEventLog", "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch", "Parameters": { "LogName": "Application", "Levels": "7" } }, { "Id": "SystemEventLog", "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch", "Parameters": { "LogName": "System", "Levels": "7" } }, { "Id": "SecurityEventLog", "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch", "Parameters": { "LogName": "Security", "Levels": "7" } }, { "Id": "CloudWatchLogs", "FullName": "AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch", "Parameters": { "AccessKey": "", "SecretKey": "", "Region": "ap-northeast-1", "LogGroup": "Windows/EventLog", "LogStream": "{instance_id}" } } ], "Flows": { "Flows": [ "(ApplicationEventLog,SystemEventLog,SecurityEventLog),CloudWatchLogs" ] } } }
- 36 行目 : "LogGroup": "Windows/EventLog"
1. 以下、IIS ログの json ファイルです。 * 22 行目 : "LogGroup": "Windows/IisLog" * ロググループです。適当な名称に変更して下さい。 * 5-14 行目 : * サイト毎の設定となります。W3SVC1 以外にも取得したのであれば、変更し行を追加して下さい。 * 30 行目にも追加するのを忘れずに。
```json:Sample-ConfigureCloudWatchLogs-Windows_IisLog.json
{
"EngineConfiguration": {
"PollInterval": "00:00:15",
"Components": [
{
"Id": "IISLogW3SVC1",
"FullName": "AWS.EC2.Windows.CloudWatch.IisLog.IisLogInputComponent,AWS.EC2.Windows.CloudWatch",
"Parameters": {
"LogName": "IISLogW3SVC1",
"LogDirectoryPath": "C:\\inetpub\\logs\\LogFiles\\W3SVC1",
"TimestampFormat": "yyyy-MM-dd HH:mm:ss",
"Encoding": "UTF-8"
}
},
{
"Id": "CloudWatchLogs",
"FullName": "AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch",
"Parameters": {
"AccessKey": "",
"SecretKey": "",
"Region": "ap-northeast-1",
"LogGroup": "Windows/IisLog",
"LogStream": "{instance_id}"
}
}
],
"Flows": {
"Flows":
[
"(IISLogW3SVC1),CloudWatchLogs"
]
}
}
}
```
1. 以下、カスタムログの json ファイルです。 * 24 行目 : "LogGroup": "Windows/CustomLog" * ロググループです。適当な名称に変更して下さい。 * 5-16 行目 : * 取得したいログファイル毎の設定となります。適宜変更して下さい。 * ※すいません。こちら未確認です…。
```json:Sample-ConfigureCloudWatchLogs-Windows_CustomLog.json
{
"EngineConfiguration": {
"PollInterval": "00:00:15",
"Components": [
{
"Id": "CustomLogs",
"FullName": "AWS.EC2.Windows.CloudWatch.CustomLog.CustomLogInputComponent,AWS.EC2.Windows.CloudWatch",
"Parameters": {
"LogDirectoryPath": "C:\\CustomLogs\\",
"TimestampFormat": "MM/dd/yyyy HH:mm:ss",
"Encoding": "UTF-8",
"Filter": "",
"CultureName": "en-US",
"TimeZoneKind": "Local"
}
},
{
"Id": "CloudWatchLogs",
"FullName": "AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch",
"Parameters": {
"AccessKey": "",
"SecretKey": "",
"Region": "ap-northeast-1",
"LogGroup": "Windows/CustomLog",
"LogStream": "{instance_id}"
}
}
],
"Flows": {
"Flows":
[
"(CustomLogs),CloudWatchLogs"
]
}
}
}
```
1. 以下、ETW の json ファイルです。 * 24 行目 : "LogGroup": "Windows/ETW" * ロググループです。適当な名称に変更して下さい。 * 5-16 行目 : * 取得したいログファイル毎の設定となります。適宜変更して下さい。 * ※すいません。こちら未確認です…。
```json:Sample-ConfigureCloudWatchLogs-Windows_ETW.json
{
"EngineConfiguration": {
"PollInterval": "00:00:15",
"Components": [
{
"Id": "ETW",
"FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
"Parameters": {
"LogName": "Microsoft-Windows-WinINet/Analytic",
"Levels": "4"
}
},
{
"Id": "CloudWatchLogs",
"FullName": "AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch",
"Parameters": {
"AccessKey": "",
"SecretKey": "",
"Region": "ap-northeast-1",
"LogGroup": "Windows/ETW",
"LogStream": "{instance_id}"
}
}
],
"Flows": {
"Flows":
[
"(ETW),CloudWatchLogs"
]
}
}
}
```
1. CloudWatch のマネジメントコンソールの左側ペインから、「ログ」を選択します。ロググループの一覧が表示されるので、設定したロググループと EC2 インスタンスの ID でフィルタをかけて、設定したログのデータがあるか確認します。
* 
* 
* 
99.ハマりポイント
- 今回も結構ハマりました…。毎回、何やってんだ…。
- 最初、今回の手順ではなく「SYSTEMS MANAGER 共有リソース」にある「ドキュメント」を作成して対応しようと思ったんですが、ドキュメントの作成がうまくいかず…、断念…。サポートセンターに問い合わせ中です。
- その後、今回の手順で設定を進めたんですが、json ファイルの設定内容でハマりました。特にディスクの空容量のメトリクスの取得とかがよくわからず、難儀しました。こちらのサイトで何とか解決しました。ありがとうございます。
XX.まとめ
これで、
何とか運用監視も AWS だけで事足りる様になるのではと。
CloudWatch の 15ヶ月のデータ保存じゃ短すぎる!!
という場合は、
こちらのサイトのやり方などもあるみたいです。