Windows EventlogをCloudWatch Logsに自動アップロード

こんにちは
株式会社クラスアクト インフラストラクチャ事業部の大塚です。

今回はタイトル通り、WindowsのEventlog(Application,System,Security)をCloudWatch Logsで確認できるようにしていきたいと思います。
近いうちにCloudWatch LogsからS3に対して自動で退避する方法も確認していきます。

# 用語
## CloudWatch 
Claudeから解説をしてもらいます。

>AWSリソース(EC2インスタンス、Lambda関数など)のメトリクスを収集、視覚化する
これらのメトリクスに基づいてアラームを設定し、異常を検知できる
自動スケーリンググループへのメトリクスの提供も可能

## CloudWatch Logs

こちらもClaudeから解説をしてもらいます。

>EC2インスタンス、LambdaなどのログデータをCloudWatchLogsに転送し、中央集約できる
ログデータに対して検索やフィルタリングが可能
ログデータをメトリクスとして可視化したり、アラームを設定したりできる
ログの保存期間やアクセス制御の設定が可能

CloudWatchはメトリクス収集と監視に特化しており、CloudWatch Logsはログの集約と分析に特化したサービスです。これらを組み合わせることで、AWSリソースの状態を包括的に監視できるようになります。

# 環境イメージ

EC2に対してCloudWatchにアップロードするためのIAM Roleをアタッチします。
また、CloudWatch Agentをインストールします。
![島田様02-ページ2.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/3b233e94-49b8-1432-570c-97791e318c88.png)

前提として、以下の環境に設定を追加していっています。

https://qiita.com/ohtsuka-shota/items/f0b5068666ff10674edf

# 構築
## IAM Role作成
EC2にアタッチされているIAM Roleに対してCloudWatchへのアクセス権を追加していきます。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/d639d922-8a76-34ce-555d-dbe850ec9878.png)
CloudWatchLogsFullAccessを選択して追加していきます。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/d07ec5d2-69ec-36cb-8bb9-cd91b6dc7163.png)

## Windows ServerにCloudWatch Agentを導入する
任意のWebブラウザで以下のURLにアクセスし、msiをダウンロードします

https://s3.amazonaws.com/amazoncloudwatch-agent/windows/amd64/latest/amazon-cloudwatch-agent.msi

msiがダウンロードできましたらダブルクリックし、実行します。
実行後特にポップアップするようなことはありませんでした。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/4fba0875-3f39-2d6f-50ed-6460d2bc72d9.png)
Control Panel > Programs > Programs and FeaturesにAmazon CloudWatch Agentが表示されていることを確認します。表示されていればOKです。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/4a34bcf2-8cb7-d438-e05b-3c186ccbd3cf.png)
C:\Users\Administrator\Documentsにamazon-cloudwatch-agent.jsonという設定ファイルを作成します。これがCloudWatch Agentの設定ファイルになっていきます。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/bad8d6c9-0e08-c707-b2f7-a46372835e71.png)
設定ファイルの中身は以下としました。
```amazon-cloudwatch-agent.json
{
    "logs": {
        "logs_collected": {
            "windows_events": {
                "collect_list": [
                    {
                        "event_name": "System",
                        "log_group_name": "SystemEventLog",
                        "log_stream_name": "{instance_id}",
                        "event_levels": [
                            "ERROR",
                            "WARNING",
                            "INFORMATION"
                        ]
                    },
                    {
                        "event_name": "Application",
                        "log_group_name": "ApplicationEventLog",
                        "log_stream_name": "{instance_id}",
                        "event_levels": [
                            "ERROR",
                            "WARNING",
                            "INFORMATION"
                        ]
                    },
                    {
                        "event_name": "Security",
                        "log_group_name": "SecurityEventLog",
                        "log_stream_name": "{instance_id}",
                        "event_levels": [
                            "ERROR",
                            "WARNING",
                            "INFORMATION"
                        ]
                    }
                ]
            }
        }
    }
}
```
powershellを起動して以下のコマンドを実行します。先ほど作成したjsonファイルを使ってCloudWatch Agentを起動させていているイメージかと思います。
```
PS C:\Users\Administrator> & "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" -a fetch-config -m ec2 -c file:"C:\Users\Administrator\Documents\amazon-cloudwatch-agent.json" -s

****** processing amazon-cloudwatch-agent ******
I! Trying to detect region from ec2
D! [EC2] Found active network interface
I! imds retry client will retry 1 timesSuccessfully fetched the config and saved in C:\ProgramData\Amazon\AmazonCloudWatchAgent\Configs\file_amazon-cloudwatch-agent.json.tmp
Start configuration validation...
2024/06/16 07:53:05 Reading json config file path: C:\ProgramData\Amazon\AmazonCloudWatchAgent\Configs\file_amazon-cloudwatch-agent.json.tmp ...
2024/06/16 07:53:05 I! Valid Json input schema.
I! Trying to detect region from ec2
D! [EC2] Found active network interface
I! imds retry client will retry 1 times2024/06/16 07:53:05 Configuration validation first phase succeeded
Configuration validation second phase succeeded
Configuration validation succeeded
AmazonCloudWatchAgent has been stopped
AmazonCloudWatchAgent has been started
```

## CloudWatchで確認
AWS管理コンソールでCloudWatchに移動し、ログ>ロググループに遷移します。
JSONファイル内のlog_group_nameが表示されることを確認します。
スクショではSecurityEventLogとSystemEventLogが表示されていることがわかります。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/8a72addb-4f24-8e32-34bc-35c4223b0205.png)
logを確認するにはロググループを選択して、ログストリームタブから遷移することで確認することが可能です。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/5b55e2f8-265b-ffe8-b21b-6a6b5fca282c.png)
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/02588a6f-dead-c299-ab4b-4d0a4a6088ee.png)
出力されたログについては例えば以下の様なものになります。
```
<Event xmlns='http://schemas.microsoft.com/win/2004/08/events/event'><System><Provider Name='Service Control Manager' Guid='{555908d1-a6d7-4695-8e1e-26931d2012f4}' EventSourceName='Service Control Manager'/><EventID Qualifiers='16384'>7036</EventID><Version>0</Version><Level>4</Level><Task>0</Task><Opcode>0</Opcode><Keywords>0x8080000000000000</Keywords><TimeCreated SystemTime='2024-06-16T08:00:44.0253181Z'/><EventRecordID>94690</EventRecordID><Correlation/><Execution ProcessID='768' ThreadID='5940'/><Channel>System</Channel><Computer>EC2AMAZ-GDJBO1N</Computer><Security/></System><EventData><Data Name='param1'>AppX Deployment Service (AppXSVC)</Data><Data Name='param2'>stopped</Data><Binary>41007000700058005300760063002F0031000000</Binary></EventData><RenderingInfo Culture='en-US'><Message>The AppX Deployment Service (AppXSVC) service entered the stopped state.</Message><Level>Information</Level><Task></Task><Opcode></Opcode><Channel></Channel><Provider>Microsoft-Windows-Service Control Manager</Provider><Keywords><Keyword>Classic</Keyword></Keywords></RenderingInfo></Event>
```
Windows Server側も同じ時間帯に同じlogが出力されています。
CloudWatch LogsにXML形式でアップロードされていそうです。
問題なくログ取集できていそうですね。
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/016960bc-3f52-302c-8ade-badaa8ebc0cf.png)

# 2024/6/18 追記
この記事の続きとしてCloudWtach LogsにアップロードしたlogをS3に手動でエクスポートする方法も確認しました。近いうちに自動化までもっていきます。

https://qiita.com/ohtsuka-shota/items/614a6cfddce257dd623e