概要
今回やることの概要
- オンプレPC(に見立てたEC2)にCloudWatch Agent入れて、WindowsログをCloudWatchログに送る
構成図
こんな構成
- 補足
- 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のファイル構造
では、やっていく
手順紹介
1.オンプレPCを用意(今回はEC2を使う)
- WindowsOSの環境を用意する。今回はEC2インスタンスを代用して用意。
- EC2作成手順は省略
2.IAMユーザーを作成
- CloudWatch AgentがCloudWatch Logsにログを書き込む権限を設定するため、IAMユーザーを作成
- IAMユーザーの作成手順は省略
3.作成したIAMユーザーにIAMポリシーCloudWatchAgentServerPolicy
適用
- 手順『2.IAMユーザーを作成』で作成したIAMユーザに必要な権限を設定する
- 必要な権限とは、CloudWatch Logsへの書き込み権限
- CloudWatch Logsへの書き込み権限は、IAMポリシー
CloudWatchAgentServerPolicy
こんな感じでポリシーを適用する
4.アクセスキーを作成する
- CloudWatch Logsへの書き込み権限を持つIAMユーザのアクセスキーを作成
- 作成したアクセスキーは、あとでオンプレPC上のWindowsのcredentialsファイル作成に使用
- アクセスキーのcsvファイル
credentials.csv
をAWSコンソールからダウンロード
5.オンプレPCのWindowsで設定
- オンプレPC(手順『1.オンプレPCを用意』で作成したEC2)Windowsを設定していく
5-1.AWS CLIインストール
- AWS CLI(AWS Command Line Interface)があるとcredentilsファイルの作成が楽
- credentialsファイルは、手動でも作成できるのでAWS CLIのインストールは必須ではない
- 今回は、AWS CLI v2 をインストール
- 以下サイトでインストーラ(.msi)を取得してインストール
5-2.credentialsファイル作成
- 手順『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ファイルの中身はこんな感じ
5-3.CloudWatch Agentインストール
- CloudWatch Agentは、WindowsのイベントログをCloudWatch Logsに送る機能がある
- CloudWatch Agentは、Windowsのイベントログ以外のログにも対応してる
- インストーラ
amazon-cloudwatch-agent.msi
を入手してインストールするだけ - インストーラはここで入手 ↓
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
はテキストエディタで開けるので、反映されたか目視確認もできる
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を再起動する
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.動作確認
- Windowsイベントログが、CloudWatch Logs にログとして記録されたことを確認する
CloudWatch Logsにロググループ testsuoworkgroupsystem
が追加された!(期待通り)
開くとホスト名の名称でログストリームがあった(期待通り)
更にログストリームの中にWindows Systemログが記録されてた→成功!(期待通り)
※ログの時刻はグリニッジ標準時なので注意、+9時間で日本時間になります
上手く動いた、ふぅ
おまけ
おまけ(1):credentialsファイルパスを指定する
- aws configure でアクセスキーを設定すると、
-
C:\Users\{ユーザー名}\.aws\credentials
にcredentials
ファイルが作成される- ↑が標準パス
- 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設定の全て
実施した全ての設定
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 |
ログ・設定ファイル群 |
■ コマンド群
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
■ ログ・設定ファイル群
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が意図した挙動にならないときは、このログを確認すると原因追及に役立つかも
例えば、CloudWatch Agentがcredentils
ファイルを読み込めないとこんなエラーが記録される。
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)}}