この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
渡辺です。
これまで、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の設定ができませんのでご注意を!