6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

オンプレPC WindowsのイベントログをCloudWatch Logsに送る

Posted at

概要

今回やることの概要

  • オンプレPC(に見立てたEC2)にCloudWatch Agent入れて、WindowsログをCloudWatchログに送る

構成図

こんな構成

image.png

  • 補足
    • EC2はIAMロールをアタッチできる
    • オンプレPCはIAMロールをアタッチできない

WindowsのイベントログをCloudWatchログに送るために必要なもの

CloudWatch Agent Winイベントログなどログ取得に必要
IAMポリシーCloudWatchAgentServerPolicy CloudWatchにログを送る権限
IAMユーザー IAMポリシーをオンプレPCに設定するため必要
AWS CLI 必須じゃない。credentialsファイル作成に使用

本記事の概要(目次)

  • 概要
  • 構成図
  • 〇-- 手順紹介 --〇
  • 1.オンプレPCを用意(今回はEC2を使う)
  • 2.IAMユーザーを作成
  • 3.作成したIAMユーザーにIAMポリシーCloudWatchAgentServerPolicy適用
  • 4.アクセスキーを作成する
  • 5.オンプレPCのWindowsで設定
    • 5-1.AWS CLIインストール
    • 5-2.credentialsファイル作成
    • 5-3.CloudWatch Agentインストール
    • 5-4.CloudWatch Agent設定
    • 5-5.CloudWatch Agent設定反映
    • 5-6.CloudWatch Agent再起動
  • 6.動作確認
  • 〇-- おまけ --〇
    • おまけ(1):credentialsファイルパスを指定する
    • おまけ(2):5-4.CloudWatch Agent設定の全て
    • おまけ(3):CloudWatch Agentのファイル構造

line.png

では、やっていく

手順紹介

1.オンプレPCを用意(今回はEC2を使う)

02.png

  • WindowsOSの環境を用意する。今回はEC2インスタンスを代用して用意。
  • EC2作成手順は省略

2.IAMユーザーを作成

03.png

  • CloudWatch AgentがCloudWatch Logsにログを書き込む権限を設定するため、IAMユーザーを作成
  • IAMユーザーの作成手順は省略

3.作成したIAMユーザーにIAMポリシーCloudWatchAgentServerPolicy適用

04.png

  • 手順『2.IAMユーザーを作成』で作成したIAMユーザに必要な権限を設定する
  • 必要な権限とは、CloudWatch Logsへの書き込み権限
  • CloudWatch Logsへの書き込み権限は、IAMポリシーCloudWatchAgentServerPolicy

こんな感じでポリシーを適用する

image.png

4.アクセスキーを作成する

05.png

  • CloudWatch Logsへの書き込み権限を持つIAMユーザのアクセスキーを作成
  • 作成したアクセスキーは、あとでオンプレPC上のWindowsのcredentialsファイル作成に使用
  • アクセスキーのcsvファイルcredentials.csvをAWSコンソールからダウンロード

image.png

5.オンプレPCのWindowsで設定

  • オンプレPC(手順『1.オンプレPCを用意』で作成したEC2)Windowsを設定していく
5-1.AWS CLIインストール

06.png

  • AWS CLI(AWS Command Line Interface)があるとcredentilsファイルの作成が楽
  • credentialsファイルは、手動でも作成できるのでAWS CLIのインストールは必須ではない
  • 今回は、AWS CLI v2 をインストール
  • 以下サイトでインストーラ(.msi)を取得してインストール
5-2.credentialsファイル作成

07.png

  • 手順『4.アクセスキーを作成する』で作成したアクセスキー必要
  • 手順『4-1.AWS CLIインストール』でインストールしたAWS CLIを使いcredentialsファイルを作成する
  • フルパス C:\Users{ユーザー名}.aws\credentials
    • Windowsの設定によっては異なるパスになるかも
  • powershellを起動し、aws configure コマンドを実行し以下を設定する
    • アクセスキー
    • シークレットアクセスキー
    • 標準のリージョン (東京リージョンなら ap-northeast-1)
    • 標準の形式  (こだわり無いなら json が無難かも)
設定例
PS C:\> aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: ap-northeast-1
Default output format [None]: json

※注意※ アクセスキーの情報は公開しないように!

credentialsファイルの中身はこんな感じ

image.png

5-3.CloudWatch Agentインストール

08.png

5-4.CloudWatch Agent設定
  • "何をCloudWatch Logsに送るか"などの設定をする
  • 設定は質問形式で行う
  • 質問多い&英語 のダブルパンチで、心が折れる
  • でも、落ち着いて確認すれば何とか理解できる(気がする)
  • 設定が完了するとconfig.jsonファイルが作成される

PowerShellを管理者権限で起動し、
以下コマンドを実行し、質問形式でCloudWatch Agentの設定を行う

PS C:\> cd "C:\Program Files\Amazon\AmazonCloudWatchAgent"
PS C:\Program Files\Amazon\AmazonCloudWatchAgent> .\amazon-cloudwatch-agent-config-wizard.exe

※今回行った全ての設定は、『おまけ:5-4.CloudWatch Agent設定の全て』参照

質問事項を一部抜粋

Do you want to monitor any Windows event log?
1. yes
2. no
default choice: [1]:
# → Windowsログをモニターしたいので 1 を選択
Windows event log name:
default choice: [System]
# → Systemログを選択する場合は System を選択
5-5.CloudWatch Agent設定反映
  • 設定をしただけでは反映されない
  • 設定を更新した後は、必ず反映する
  • 「設定通りに動かん!」なときは、設定の反映を忘れている可能性あり
  • 設定を反映すると、config.jsonの情報がcommon-config.tomlに反映される
    • フルパス C:\ProgramData\Amazon\AmazonCloudWatchAgent\common-config.toml
  • common-config.tomlはテキストエディタで開けるので、反映されたか目視確認もできる
設定(config.json)反映
PS C:\Program Files\Amazon\AmazonCloudWatchAgent> .\amazon-cloudwatch-agent-ctl.ps1 -a fetch-config -m ec2 -c file:config.json -s
Successfully fetched the config and saved in C:\ProgramData\Amazon\AmazonCloudWatchAgent\Configs\file_config.json.tmp
Start configuration validation...
2020/05/12 22:55:57 Reading json config file path: C:\ProgramData\Amazon\AmazonCloudWatchAgent\Configs\file_config.json.tmp ...
Valid Json input schema.
No csm configuration found.
Configuration validation first phase succeeded
Configuration validation second phase succeeded
Configuration validation succeeded
PS C:\Program Files\Amazon\AmazonCloudWatchAgent>
5-6.CloudWatch Agent再起動
  • 設定を反映したら、CloudWatch Agentを再起動する
CloudWatchAgent再起動
PS C:\Program Files\Amazon\AmazonCloudWatchAgent> .\amazon-cloudwatch-agent-ctl.ps1 -a stop
PS C:\Program Files\Amazon\AmazonCloudWatchAgent> .\amazon-cloudwatch-agent-ctl.ps1 -a status
{
  "status": "stopped",
  "starttime": "",
  "version": "1.237768.0"
}
PS C:\Program Files\Amazon\AmazonCloudWatchAgent> .\amazon-cloudwatch-agent-ctl.ps1 -a start
PS C:\Program Files\Amazon\AmazonCloudWatchAgent> .\amazon-cloudwatch-agent-ctl.ps1 -a status
{
  "status": "running",
  "starttime": "2020-05-12T23:03:41",
  "version": "1.237768.0"
}

これで全ての作業が完了した!

6.動作確認

09.png

  • Windowsイベントログが、CloudWatch Logs にログとして記録されたことを確認する

CloudWatch Logsにロググループ testsuoworkgroupsystem が追加された!(期待通り)

image.png

開くとホスト名の名称でログストリームがあった(期待通り)

image.png

更にログストリームの中にWindows Systemログが記録されてた→成功!(期待通り)
※ログの時刻はグリニッジ標準時なので注意、+9時間で日本時間になります

image.png

上手く動いた、ふぅ

おまけ

おまけ(1):credentialsファイルパスを指定する

  • aws configure でアクセスキーを設定すると、
  • C:\Users\{ユーザー名}\.aws\credentialscredentialsファイルが作成される
    • ↑が標準パス
  • CloudWatch Agentはcredentialsファイルを読み込みアクセス権を得る
  • 標準パスと異なるパスにcredentialsファイルがあると、CloudWatch Agentがcredentialsを読み込めない
  • また、credentialsに複数のプロファイルがあり、特定のプロファイルを指定したい場合がある
  • そんなときは、CloudWatch Agentの設定ファイルにcredentialのパスを設定する
  • CloudWatch Agentのcredentialsパスの設定はcommon-config.toml
    • フルパス C:\ProgramData\Amazon\AmazonCloudWatchAgent\common-config.toml
  • common-config.tomlを編集し、credentialファイルのパスとプロファイル名を設定する
  • 参考
[credentials]
   shared_credential_profile = "{profile_name}"
   shared_credential_file= "{file_name}"

例えば、プロファイル名がdefaultで、パスがC:\Users\Administrator\test001\credentialsの場合はこのように設定する

[credentials]
   shared_credential_profile = "default"
   shared_credential_file = "C:\\Users\\Administrator\\test001\\credentials"

common-config.tomlを編集したら、設定反映を忘れないよう注意

設定を反映する
PS C:\Program Files\Amazon\AmazonCloudWatchAgent> .\amazon-cloudwatch-agent-ctl.ps1 -a fetch-config -m ec2 -c file:config.json -s

おまけ(2):5-4.CloudWatch Agent設定の全て

実施した全ての設定

config.json作成

PS C:\Program Files\Amazon\AmazonCloudWatchAgent> .\amazon-cloudwatch-agent-config-wizard.exe
=============================================================
= Welcome to the AWS CloudWatch Agent Configuration Manager =
=============================================================
On which OS are you planning to use the agent?
1. linux
2. windows
default choice: [2]:
2
Trying to fetch the default region based on ec2 metadata...
Are you using EC2 or On-Premises hosts?
1. EC2
2. On-Premises
default choice: [1]:
2
Please make sure the credentials and region set correctly on your hosts.
Refer to http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html
Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:

Which port do you want StatsD daemon to listen to?
default choice: [8125]

What is the collect interval for StatsD daemon?
1. 10s
2. 30s
3. 60s
default choice: [1]:

What is the aggregation interval for metrics collected by StatsD daemon?
1. Do not aggregate
2. 10s
3. 30s
4. 60s
default choice: [4]:

Do you have any existing CloudWatch Log Agent configuration file to import for migration?
1. yes
2. no
default choice: [2]:

Do you want to monitor any host metrics? e.g. CPU, memory, etc.
1. yes
2. no
default choice: [1]:

Do you want to monitor cpu metrics per core? Additional CloudWatch charges may apply.
1. yes
2. no
default choice: [1]:

Would you like to collect your metrics at high resolution (sub-minute resolution)? This enables sub-minute resolution for all metrics, but you can customize for specific metrics in the output json file.
1. 1s
2. 10s
3. 30s
4. 60s
default choice: [4]:

Which default metrics config do you want?
1. Basic
2. Standard
3. Advanced
4. None
default choice: [1]:

Current config as follows:
{
        "metrics": {
                "metrics_collected": {
                        "LogicalDisk": {
                                "measurement": [
                                        "% Free Space"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "Memory": {
                                "measurement": [
                                        "% Committed Bytes In Use"
                                ],
                                "metrics_collection_interval": 60
                        },
                        "Network Interface": {
                                "measurement": [
                                        "Bytes Sent/sec",
                                        "Bytes Received/sec",
                                        "Packets Sent/sec",
                                        "Packets Received/sec"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "Paging File": {
                                "measurement": [
                                        "% Usage"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "PhysicalDisk": {
                                "measurement": [
                                        "Disk Write Bytes/sec",
                                        "Disk Read Bytes/sec",
                                        "Disk Writes/sec",
                                        "Disk Reads/sec"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "Processor": {
                                "measurement": [
                                        "% Processor Time"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "statsd": {
                                "metrics_aggregation_interval": 60,
                                "metrics_collection_interval": 10,
                                "service_address": ":8125"
                        }
                }
        }
}
Are you satisfied with the above config? Note: it can be manually customized after the wizard completes to add additional items.
1. yes
2. no
default choice: [1]:

Do you want to monitor any customized log files?
1. yes
2. no
default choice: [1]:
2
Do you want to monitor any Windows event log?
1. yes
2. no
default choice: [1]:
1
Windows event log name:
default choice: [System]

Do you want to monitor VERBOSE level events for Windows event log System ?
1. yes
2. no
default choice: [1]:
1
Do you want to monitor INFORMATION level events for Windows event log System ?
1. yes
2. no
default choice: [1]:
1
Do you want to monitor WARNING level events for Windows event log System ?
1. yes
2. no
default choice: [1]:
1
Do you want to monitor ERROR level events for Windows event log System ?
1. yes
2. no
default choice: [1]:
1
Do you want to monitor CRITICAL level events for Windows event log System ?
1. yes
2. no
default choice: [1]:
1
Log group name:
default choice: [System]
testsuoworkgroupssystem
Log stream name:
default choice: [{hostname}]

In which format do you want to store windows event to CloudWatch Logs?
1. XML: XML format in Windows Event Viewer
2. Plain Text: Legacy CloudWatch Windows Agent (SSM Plugin) Format
default choice: [1]:

Do you want to specify any additional Windows event log to monitor?
1. yes
2. no
default choice: [1]:
2
Saved config file to config.json successfully.
Current config as follows:
{
        "logs": {
                "logs_collected": {
                        "windows_events": {
                                "collect_list": [
                                        {
                                                "event_format": "xml",
                                                "event_levels": [
                                                        "VERBOSE",
                                                        "INFORMATION",
                                                        "WARNING",
                                                        "ERROR",
                                                        "CRITICAL"
                                                ],
                                                "event_name": "System",
                                                "log_group_name": "testsuoworkgroupssystem",
                                                "log_stream_name": "{hostname}"
                                        }
                                ]
                        }
                }
        },
        "metrics": {
                "metrics_collected": {
                        "LogicalDisk": {
                                "measurement": [
                                        "% Free Space"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "Memory": {
                                "measurement": [
                                        "% Committed Bytes In Use"
                                ],
                                "metrics_collection_interval": 60
                        },
                        "Network Interface": {
                                "measurement": [
                                        "Bytes Sent/sec",
                                        "Bytes Received/sec",
                                        "Packets Sent/sec",
                                        "Packets Received/sec"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "Paging File": {
                                "measurement": [
                                        "% Usage"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "PhysicalDisk": {
                                "measurement": [
                                        "Disk Write Bytes/sec",
                                        "Disk Read Bytes/sec",
                                        "Disk Writes/sec",
                                        "Disk Reads/sec"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "Processor": {
                                "measurement": [
                                        "% Processor Time"
                                ],
                                "metrics_collection_interval": 60,
                                "resources": [
                                        "*"
                                ]
                        },
                        "statsd": {
                                "metrics_aggregation_interval": 60,
                                "metrics_collection_interval": 10,
                                "service_address": ":8125"
                        }
                }
        }
}
Please check the above content of the config.
The config file is also located at config.json.
Edit it manually if needed.
Do you want to store the config in the SSM parameter store?
1. yes
2. no
default choice: [1]:
2
Please press Enter to exit...

Program exits now.
PS C:\Program Files\Amazon\AmazonCloudWatchAgent>
PS C:\Program Files\Amazon\AmazonCloudWatchAgent>
PS C:\Program Files\Amazon\AmazonCloudWatchAgent> .\amazon-cloudwatch-agent-ctl.ps1 -a status
{
  "status": "running",
  "starttime": "2020-05-12T22:13:06",
  "version": "1.237768.0"
}
PS C:\Program Files\Amazon\AmazonCloudWatchAgent> .\amazon-cloudwatch-agent-ctl.ps1 -a stop
PS C:\Program Files\Amazon\AmazonCloudWatchAgent> .\amazon-cloudwatch-agent-ctl.ps1 -a status
{
  "status": "stopped",
  "starttime": "",
  "version": "1.237768.0"
}
PS C:\Program Files\Amazon\AmazonCloudWatchAgent>

おまけ(3):CloudWatch Agentのファイル構造

Windows環境のCloudWatch Agentは、以下2つのパスに関連データがある

C:\Program Files\Amazon\AmazonCloudWatchAgent コマンド群
C:\ProgramData\Amazon\AmazonCloudWatchAgent ログ・設定ファイル群

■ コマンド群

image.png

PS C:\Program Files\Amazon\AmazonCloudWatchAgent> dir


    Directory: C:\Program Files\Amazon\AmazonCloudWatchAgent


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        1/22/2020   5:23 PM       15840008 amazon-cloudwatch-agent-config-wizard.exe
-a----        1/22/2020   5:24 PM          12058 amazon-cloudwatch-agent-ctl.ps1
-a----        1/22/2020   5:24 PM          23071 amazon-cloudwatch-agent-schema.json
-a----        1/22/2020   5:24 PM       13621000 amazon-cloudwatch-agent-windows-migration.exe
-a----        1/22/2020   5:24 PM       59071240 amazon-cloudwatch-agent.exe
-a----        1/22/2020   5:24 PM       13782792 config-downloader.exe
-a----        1/22/2020   5:24 PM       29992712 config-translator.exe
-a----        5/12/2020  10:44 PM           1587 config.json
-a----        1/22/2020   5:24 PM             11 CWAGENT_VERSION
-a----        1/22/2020   5:24 PM           4705 LICENSE
-a----        1/22/2020   5:24 PM             96 NOTICE
-a----        1/22/2020   5:23 PM           4759 RELEASE_NOTES
-a----        1/22/2020   5:24 PM        2820872 start-amazon-cloudwatch-agent.exe
-a----        1/22/2020   5:24 PM          99931 THIRD-PARTY-LICENSES

■ ログ・設定ファイル群

image.png

PS C:\ProgramData\Amazon\AmazonCloudWatchAgent> dir


    Directory: C:\ProgramData\Amazon\AmazonCloudWatchAgent


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        5/12/2020  10:56 PM                Configs
d-----        5/12/2020  11:20 PM                Logs
-a----        5/12/2020  11:03 PM           3056 amazon-cloudwatch-agent.toml
-a----        1/22/2020   5:24 PM            925 common-config.toml
-a----        5/12/2020   8:50 AM            139 log-config.json
  • C:\ProgramData\Amazon\AmazonCloudWatchAgent\LogsにCloudWatch Agentのログがある。
  • CloudWatch Agentが意図した挙動にならないときは、このログを確認すると原因追及に役立つかも

image.png

例えば、CloudWatch Agentがcredentilsファイルを読み込めないとこんなエラーが記録される。

amazon-cloudwatch-agent.log
2020-05-16T01:16:38Z E! cloudwatchlogs: code: SharedCredsLoad, message: failed to load shared credentials file, original error: &awserr.baseError{code:"FailedRead", message:"unable to open file", errs:[]error{(*os.PathError)(0xc000627320)}}, &awserr.baseError{code:"SharedCredsLoad", message:"failed to load shared credentials file", errs:[]error{(*awserr.baseError)(0xc0003e7f00)}}
6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?