Windows ServerのCloudWatch LogsをSSMで行う

CloudWatch

渡辺です。

これまで、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": "System",
                "DimensionValue": "Default"
              }
            },
            {
              "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を選択してください。

CreateDocument

関連付けを作成する

続けてドキュメントを対象インスタンスに関連付けます。 関連付け(Assosication)とは、処理定義(ドキュメント)を対象サーバに紐付け、実行状態にすることです。

マネージドインスタンスをクリックし、「関連付けの作成」を選択します。 この時、SSMエージェントが正しくインストールされ、適切なRoleが設定されていないと、対象サーバがマネージドインスタンスに表示されないので注意してください。

CreateAssociation

関連付けでは、先ほど作成したドキュメントを選択し、対象インスタンスを指定します。 さらにスケジュールを選択しますが、設定したらば更新するようなものでもないため、週1でも良いでしょう。

CreateAssociation2

CreateAssociation3

関連付けを作成したらば、「関連付けを今すぐ適用」を選択します。 しばらくすると、ステータスが成功となり、ドキュメントが対象サーバに適用されたことが解ります。

CreateAssociation4

CloudWatch Logsを確認すれば、ログが転送されていることが確認出来ました。

CloudWatchLogs

まとめ

Windows ServerでのCloudWatch Logsの設定方法が変わりました。 時期的には2016年11月頃以降に作成されたWindows ServerのAMIが対象です。 正確にはEC2 Configのバージョンが4.0.1343以降の場合が対象です。 従来の方法ではCloudWatch Logsの設定ができませんのでご注意を!