EC2 Windowsログ 特定のイベントIDだけ除外してみた

EC2 Windowsログ 特定のイベントIDだけ除外してみた

2026.01.22

CloudWatch Agent Windowsログの除外

はーいこんにちは。
これは最近流行ってるAIの記事!ではないんですけど、Windowsログについて調べる機会があったので、忘れないようブログにしました。
ジョインブログ依頼書いていなかったので簡単に自己紹介
趣味は麻雀と飲み会です!

前置き

この記事は、「収集しているWindowsログで特定のイベントIDだけ除外したかったから、除外してみた。」のブログです。
参考URLを見ると、「あ、「exclude」を使えばできるな」と思ったんですけど、いざやってみようと思うと特定のイベントIDだけを除外するブログが見つからなかったんですよね。

参考URL

やりたかったこと

題名通りですが、CloudWatchAgentでWindowsログを収集してました。
Windowsログで特定のイベントIDだけ除外したかった。というのがやりたかったことです。

まずは結論

以下のようにすれば除外できます。

{
  "agent": {
    "metrics_collection_interval": 60,
    "region": "ap-northeast-3"
  },
  "logs": {
    "logs_collected": {
      "windows_events": {
        "collect_list": [
          {
            "event_name": "Application",
            "event_levels": [
              "CRITICAL"
            ],
            "log_group_name": "/aws/ec2/Windows/Application/Critical",
            "log_stream_name": "{instance_id}",
            "event_format": "xml"
          },
          {
            "event_name": "Application",
            "event_levels": [
              "ERROR"
            ],
            "log_group_name": "/aws/ec2/Windows/Application/Error",
            "log_stream_name": "{instance_id}",
            "event_format": "xml",
            "filters": [
              {
                "type": "exclude",
                "expression": "<EventID[^>]*>16398</EventID>"
              },
              {
                "type": "exclude",
                "expression": "<EventID[^>]*>10</EventID>"
              }
            ]
          },
          {
            "event_name": "Application",
            "event_levels": [
              "WARNING"
            ],
            "log_group_name": "/aws/ec2/Windows/Application/Warning",
            "log_stream_name": "{instance_id}",
            "event_format": "xml",
            "filters": [
              {
                "type": "exclude",
                "expression": "<EventID[^>]*>23</EventID>"
              },
              {
                "type": "exclude",
                "expression": "<EventID[^>]*>24</EventID>"
              }
            ]
          }
        ]
      }
    }
  },
  "metrics": {
    "append_dimensions": {
      "InstanceId": "${aws:InstanceId}",
      "InstanceType": "${aws:InstanceType}"
    },
    "metrics_collected": {
      "LogicalDisk": {
        "measurement": [
          "% Free Space"
        ],
        "metrics_collection_interval": 60,
        "resources": [
          "*"
        ]
      },
      "Memory": {
        "measurement": [
          "% Committed Bytes In Use"
        ],
        "metrics_collection_interval": 60
      }
    }
  }
}

※最後に短縮版を用意してます。

前提条件

検証内容

  1. Windowsログの確認
    まずはEC2にRDP接続を行い、出力されているWindowsログの確認をしました。
    Windowsログ>Applicationにて以下の出力が確認できました。
  • 警告
    • イベントID23/24
  • エラー
    • イベントID10/16398

この検証では上記のエラーのイベントIDを除外します。

  1. CloudWatchAgentの設定
    以下のコマンドを実行しCloudWatchAgentの設定、起動を行いました。

設定ファイルの作成

PowerShellで以下のコマンドを実行し、設定ファイルを作成します。

# 設定ファイルを作成
$config = @"
{
  "agent": {
    "metrics_collection_interval": 60,
    "region": "ap-northeast-3"
  },
  "logs": {
    "logs_collected": {
      "windows_events": {
        "collect_list": [
          {
            "event_name": "Application",
            "event_levels": [
              "CRITICAL"
            ],
            "log_group_name": "/aws/ec2/Windows/Application/Critical",
            "log_stream_name": "{instance_id}",
            "event_format": "xml"
          },
          {
            "event_name": "Application",
            "event_levels": [
              "ERROR"
            ],
            "log_group_name": "/aws/ec2/Windows/Application/Error",
            "log_stream_name": "{instance_id}",
            "event_format": "xml",
            "filters": [
              {
                "type": "exclude",
                "expression": "<EventID[^>]*>16398</EventID>"
              },
              {
                "type": "exclude",
                "expression": "<EventID[^>]*>10</EventID>"
              }
            ]
          },
          {
            "event_name": "Application",
            "event_levels": [
              "WARNING"
            ],
            "log_group_name": "/aws/ec2/Windows/Application/Warning",
            "log_stream_name": "{instance_id}",
            "event_format": "xml",
            "filters": [
              {
                "type": "exclude",
                "expression": "<EventID[^>]*>23</EventID>"
              },
              {
                "type": "exclude",
                "expression": "<EventID[^>]*>24</EventID>"
              }
            ]
          }
        ]
      }
    }
  },
  "metrics": {
    "append_dimensions": {
      "InstanceId": "`${aws:InstanceId}",
      "InstanceType": "`${aws:InstanceType}"
    },
    "metrics_collected": {
      "LogicalDisk": {
        "measurement": [
          "% Free Space"
        ],
        "metrics_collection_interval": 60,
        "resources": [
          "*"
        ]
      },
      "Memory": {
        "measurement": [
          "% Committed Bytes In Use"
        ],
        "metrics_collection_interval": 60
      }
    }
  }
}
"@

# BOMなしUTF-8で保存
$utf8NoBom = New-Object System.Text.UTF8Encoding $false
[System.IO.File]::WriteAllText("C:\ProgramData\Amazon\AmazonCloudWatchAgent\config.json", $config, $utf8NoBom)

※BOMなしUTF-8で保存している理由としては検証時にエラーが発生したためこのようにしています。

CloudWatch Agentの起動

次に、CloudWatch Agentを起動します。

# CloudWatch Agentのディレクトリに移動
cd "C:\Program Files\Amazon\AmazonCloudWatchAgent"

# 設定を適用して起動
.\amazon-cloudwatch-agent-ctl.ps1 -a fetch-config -m ec2 -c file:C:\ProgramData\Amazon\AmazonCloudWatchAgent\config.json -s

# サービスの状態を確認
Get-Service -Name "AmazonCloudWatchAgent"

起動が成功すると、以下のように出力されます。

Status   Name               DisplayName
------   ----               -----------
Running  AmazonCloudWatc... Amazon CloudWatch Agent
  1. ログの作成

Agentの設定が想定通り機能しているかを確認するため、テスト用のイベントログを発生させます。

# イベントソースの作成(初回のみ)
New-EventLog -LogName Application -Source "TestSource"

# 除外対象イベント(ID 10、ERRORレベル)を発生
Write-EventLog -LogName Application -Source "TestSource" -EventID 10 -EntryType Error -Message "Test event ID 10 - should be excluded"

# 除外されないイベント(ID 777、ERRORレベル)を発生
Write-EventLog -LogName Application -Source "TestSource" -EventID 777 -EntryType Error -Message "Test event ID 777 - should be included"

# 除外対象イベント(ID 16398、ERRORレベル)を発生
Write-EventLog -LogName Application -Source "TestSource" -EventID 16398 -EntryType Error -Message "Test event ID 16398 - should be excluded"

コマンド実行結果
テスト作成実行結果

結果の期待値

  • イベントID 10:フィルタ設定で除外対象になっているため、CloudWatch Logsには収集されません
  • イベントID 777:フィルタ設定に含まれていないため、CloudWatch Logsに収集されます
  • イベントID 16398:フィルタ設定で除外対象になっているため、CloudWatch Logsには収集されません

ローカルでの確認
イベントビューアでの確認

ログが生成されたか確認

イベントビューアでログが出力されていることを確認し、CloudWatch Logsにてログを収集できているか確認

CWAgnetファイルで設定した通り、除外しているイベントID 10/16398は、想定通り除外されています。
除外していないイベントID 777のログのみ出力されていることが確認できました。

CloudWatch Logsにて収集しているログが想定通り確認

最後に

2つじゃなくてたくさん除外したい時は以下のように指定すれば除外できました。

"expression": "<EventID[^>]*>(1|8|15|22|29|36|43|50|57|64)</EventID>"

ブログ書きたい!とは思ってるけどなかなか書けてないので、これからは書いていく!たい!
個人的に調査大変だったこととか、同じ場面に出会した時のために書き残していきたい。

この記事は以上です。
ではまた。

この記事をシェアする

FacebookHatena blogX

関連記事