Windows ServerのCloudWatch LogsをSSMで行う
渡辺です。
これまで、EC2でのWindows ServerでCloudWatch Logsにログを転送する場合、EC2 Configで設定を行っていました。 しかしながら、昨年(2016年)の末のアップデートにて、SSM(Simple System Manager)を利用して設定することになっています(CloudWatch へのパフォーマンスカウンタの送信と Amazon EC2 Simple Systems Manager を使用した CloudWatch Logs へのログの送信)。 従来のEC2 Configの設定を行っても、CloudWatch Logsへログの転送が行われないので注意してください。
SSMでの設定
SSMでの設定はマネジメントコンソールやCLIを利用して行います。 今回はマネジメントコンソールを利用した手順を紹介します。
ドキュメントの作成
はじめにSSMのドキュメントを作成します。
SSMのドキュメントは、処理定義のようなものです。
基本は、EC2 Configで手動配置していたJSONファイルですが、SSMで利用するフォーマットにします。
次のサンプルJSONであれば、EngineConfiguration
以下が従来のJSONと同じです(今回はPerformanceCounterやFlowなどの説明は割愛します)。
{ "schemaVersion": "1.2", "description": "Example CloudWatch Logs tasks", "runtimeConfig": { "aws:cloudWatch": { "settings": { "startType": "Enabled" }, "properties": { "EngineConfiguration": { "PollInterval": "00:00:15", "Components": [ { "Id": "CloudWatch", "FullName": "AWS.EC2.Windows.CloudWatch.CloudWatch.CloudWatchOutputComponent,AWS.EC2.Windows.CloudWatch", "Parameters": { "AccessKey": "", "SecretKey": "", "Region": "ap-northeast-1", "NameSpace": "windows-ssm-test" } }, { "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": "ETW", "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch", "Parameters": { "LogName": "Microsoft-Windows-WinINet/Analytic", "Levels": "7" } }, { "Id": "PerformanceCounter", "FullName": "AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch", "Parameters": { "CategoryName": "Memory", "CounterName": "Available MBytes", "InstanceName": "", "MetricName": "Memory", "Unit": "Megabytes", "DimensionName": "InstanceId", "DimensionValue": "instance_id" } }, { "Id": "CloudWatchLogs", "FullName": "AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch", "Parameters": { "AccessKey": "", "SecretKey": "", "Region": "ap-northeast-1", "LogGroup": "test/Windows", "LogStream": "{instance_id}" } } ], "Flows": { "Flows": [ "PerformanceCounter,CloudWatch", "(SystemEventLog,SecurityEventLog),CloudWatchLogs" ] } } } } } }
JSONファイルが出来たならば、マネジメントコンソールからドキュメントを作成します。
ドキュメントタイプはCommand
を選択してください。
関連付けを作成する
続けてドキュメントを対象インスタンスに関連付けます。
関連付け(Assosication
)とは、処理定義(ドキュメント)を対象サーバに紐付け、実行状態にすることです。
マネージドインスタンスをクリックし、「関連付けの作成」を選択します。 この時、SSMエージェントが正しくインストールされ、適切なRoleが設定されていないと、対象サーバがマネージドインスタンスに表示されないので注意してください。
関連付けでは、先ほど作成したドキュメントを選択し、対象インスタンスを指定します。 さらにスケジュールを選択しますが、設定したらば更新するようなものでもないため、週1でも良いでしょう。
関連付けを作成したらば、「関連付けを今すぐ適用」を選択します。 しばらくすると、ステータスが成功となり、ドキュメントが対象サーバに適用されたことが解ります。
CloudWatch Logsを確認すれば、ログが転送されていることが確認出来ました。
まとめ
Windows ServerでのCloudWatch Logsの設定方法が変わりました。 時期的には2016年11月頃以降に作成されたWindows ServerのAMIが対象です。 正確にはEC2 Configのバージョンが4.0.1343以降の場合が対象です。 従来の方法ではCloudWatch Logsの設定ができませんのでご注意を!