前回の記事にてLinuxサーバー用にCloudWatchAgentConfigファイルを作成し、CloudWatchAgentの起動をする手順についてご紹介しました。
今回はWindowsサーバーにてamazon-cloudwatch-agent-config-wizardを実行した際の設定内容と、CloudWatchAgentの起動・常駐化・停止コマンド、amazon-cloudwatch-agent-ctlのコマンドリファレンスなどを確認していきます。
作業の流れ
1.VPCへCloudWatchAgentに必要なVPCエンドポイントを作成する
2.EC2を構築し、IAMロールをアタッチする(CloudWatchAgentとSSM権限の付与)
3.EC2に対してCloudWatchAgentをインストールする
4.CloudWatchAgentのconfigファイルを設定し、CPU・メモリ・プロセスなどのメトリクスを取得する
Linux用CloudwatchAgent設定ファイルの生成・CloudwatchAgentの起動
Windows用CloudwatchAgent設定ファイルの生成・CloudwatchAgentの起動←いまここ
5.SNSトピックの作成
6.CloudWatchAgentで取得したメトリクスに対してCloudWatchAlarmを設定する
構成図確認
構成図を確認します。
既にEC2内にCloudWatchAgentをインストールした状態です。
今回はCloudWatchAgentConfigファイルの作成・記述を中心に作業していきます。
CloudwatchAgent設定ウィザード(Windows)でConfigファイルを生成する
まずはCloudWatchAgentがインストールされたサーバーにて、CloudWatchAgent設定ウィザードによるConfigファイル作成を行います。
リモートデスクトップもしくはSSMでEC2にログインします。
Windowsの場合、CloudWatchAgentConfigWizardは下記フォルダに作成されています。
C:\Program Files\Amazon\AmazonCloudWatchAgent
GUIもしくはコマンド実行にて該当フォルダまで移動します。
※コマンドを実行する場合は、コマンドプロンプトを管理者権限で立ち上げ下記コマンドを実行します。
cd "C:\Program Files\Amazon\AmazonCloudWatchAgent"
GUIを使用している場合は、「amazon-cloudwatch-agent-config-wizard.exe」をダブルクリックします。
コマンドプロンプトを使用している場合は下記コマンドを実行しCloudWatchAgentConfigWizardを立ち上げます。
.\amazon-cloudwatch-agent-config-wizard.exe
CloudWatchAgentConfigWizardが開始します。ここからは、Linuxの手順と同様にコマンドの対話式でCloudWatchAgentの設定ファイルを生成していきます。
※質問内容はCloudWatchAgentのバージョンによって異なります。本記事の内容はCloudWatchAgent1.300033.0b462の内容です。
### 使用するOSの種類
On which OS are you planning to use the agent?
1. linux
2. windows
3. darwin
default choice: [2]:
今回はWindowsへCloudWatchAgentをインストールするので、[2]を選択します。
CloudWatchAgentを利用するサーバーの種別(EC2かオンプレのサーバーか)
Trying to fetch the default region based on ec2 metadata...
I! imds retry client will retry 1 timesAre you using EC2 or On-Premises hosts?
1. EC2
2. On-Premises
default choice: [1]:
今回はEC2へインストールするので[1]を選択します。
StatsDデーモンの利用有無
Do you want to turn on StatsD daemon?
1. yes
2. no
default choice: [1]:
1
StatsDの利用有無です。StatsDはオープンソースのシステム統計ツールで、CloudWatchAgentのカスタムメトリクス取得のために利用されています。
今回はCloudWatchAgentでメモリ・ディスク監視などのカスタムメトリクスを収集するため、[1]を選択します。
参考:StatsD を使用してカスタムメトリクスを取得する
StatsDデーモンにて使用するポート番号
Which port do you want StatsD daemon to listen to?
default choice: [8125]
StatsDデーモンで利用するポート番号です。
今回はデフォルトの8125番を使用します。
StatsDデーモンが情報を集める間隔
What is the collect interval for StatsD daemon?
1. 10s
2. 30s
3. 60s
default choice: [1]:
StatsDデーモンが情報を収集する際の時間間隔です。
これもデフォルトの10秒を使用します。
StatsDデーモンがメトリクスを集約する間隔
What is the aggregation interval for metrics collected by StatsD daemon?
1. Do not aggregate
2. 10s
3. 30s
4. 60s
default choice: [4]:
StatsDデーモンがメトリクスを集約する際の時間間隔です。
これもデフォルトの60秒を使用します。
Windows・LinuxそれぞれのOSでCloudWatchAgentConfigWizardの質問の順番が異なるようです。
Windowsの場合はこの後CloudWatchLogsエージェントの存在について聞かれます。
CloudwatchLogsエージェントの存在確認
Do you have any existing CloudWatch Log Agent configuration file to import for migration?
1. yes
2. no
default choice: [2]:
既にCloudWachLogAgentをインストールしており、インポートする設定ファイルが存在するかどうかの確認です。デフォルトの状態であればサーバー内にCloudWachLogAgentは存在しないはずなので、[2]を選択します。
CPU・メモリのカスタムメトリクス収集有無
1. yes
2. no
default choice: [1]:
CPU・メモリ監視の有無です。CPU・メモリ監視を行いたいため、[1]を選択します。
コア当たりのCPUメトリクス収集の有無
Do you want to monitor cpu metrics per core?
1. yes
2. no
default choice: [1]:
1コア当たりのメモリ・CPUメトリクス収集の有無です。
ここはデフォルトの[1]を選択します。
EC2メトリクスのディメンションとしてイメージID・インスタンスID・インスタンスタイプ、オートスケーリンググループ名を追加するか
Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available?
1. yes
2. no
default choice: [1]:
ディメンションはメトリクスの識別に使われる値です。
この設定を有効化した場合のマネジメントコンソールコンソール上で見え方については前回の記事をご確認ください。
メトリクスをインスタンスIDで集約するか
Do you want to aggregate ec2 dimensions (InstanceId)?
1. yes
2. no
default choice: [1]:
収集されたメトリクスが集計されるディメンションとしてインスタンスIDを指定するか否かの設定です。今回はデフォルトの[1]を選択します。
この設定を有効化した場合のマネジメントコンソールコンソール上で見え方については前回の記事をご確認ください。
サーバー内の環境によって、単一インスタンスから複数のメトリクスが出力される場合もあります。例えば、CPU利用率がコアごとに別々のメトリクスで出力されたり、ディスク使用率がディスク全体ではなくマウントポイントやデバイスごとに出力されることが考えられます。インスタンスIDでメトリクスを集計することで、別々に出力されるメトリクスをインスタンスID毎にまとめることができます。
メトリクス収集を高頻度で行うか
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]:
メトリクス収集を高頻度で行うか否かの設定です。
今回は60秒未満でメトリクス収集を行う必要はないため、デフォルトの60秒を選択します。
メトリクスセットの確認
Which default metrics config do you want?
1. Basic
2. Standard
3. Advanced
4. None
default choice: [1]:
CloudWatchで収集したいメトリクスセットに関する設定項目です。Basic・Standard・Advancedそれぞれの設定で、収集されるメトリクスが変わります。今回は検証用のため[1](Basic)を選択します。
参考:CloudWatch エージェントの事前定義されたメトリクスセット
ここまでの設定内容の確認
ここまで設定すると、これまでの設定内容から生成されたConfigファイルがJson形式で出力されます。
Current config as follows:
出力されるJSONは、例えば下記のような形になります。
出力されるJsonの例(Windowsの場合/折り畳み)
{
"metrics": {
"aggregation_dimensions": [
[
"InstanceId"
]
],
"append_dimensions": {
"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
"ImageId": "${aws:ImageId}",
"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
},
"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]:
ここまでの設定内容に問題がないかの確認です。
出力されたJsonファイルの内容で大丈夫な場合は、[1]を選択します。
監視対象のログファイルに関する確認
Linuxの場合と質問の順番が若干異なりますが、ここからCloudWatchLogsのログ監視設定が始まります。
Do you want to monitor any customized log files?
1. yes
2. no
default choice: [1]:
2
WindowsのEventログ以外に監視したいログファイルがあるかどうかの設定です。
Windowsのイベントログについては、個別で監視するかどうか確認が発生します。
今回はWindowsのイベントログのみを監視したいため、[1]を選択します。
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」から変更しません。
※Windowsの設定がデフォルトの状態であれば、Windowsのイベントログとして「Application」「Security」「System」の三種類がOS内に存在します。
イベントログとして何が出力されているかは、Windowsのイベントビューアーから確認可能です。
参考:Windows Server のイベント ログについて(Microsoft公式トレーニングドキュメント)
ここからしばらくロググループへ出力するログレベルの確認が行われます。
Do you want to monitor VERBOSE level events for Windows event log System ?
1. yes
2. no
default choice: [1]:
詳細情報の出力確認です。
ここにはイベントの進行状況/成功のメッセージなどが含まれます。
今回はすべてのSystemsログイベントをCloudWatchLogsに出力したいため、デフォルトの[1]を選択します。
Do you want to monitor INFORMATION level events for Windows event log System ?
1. yes
2. no
default choice: [1]:
参考情報イベントの出力確認です。
Windowsに関する重大ではない情報が「INFORMATOIN」としてログに出力されます。
今回は参考情報もCloudWatchLogsに出力したいため、デフォルトの[1]を選択します。
Do you want to monitor WARNING level events for Windows event log System ?
1. yes
2. no
default choice: [1]:
警告イベントの出力確認です。
Systemログの警告イベントは、Windowsの潜在的な問題が発生した際に出力されるログです。
「エラー状態ではないけれども理想的な状態でもない」というようなときに出力されます。
警告イベントもCloudWatchLogsに出力したいため、デフォルトの[1]を選択します。
Do you want to monitor ERROR level events for Windows event log System ?
1. yes
2. no
default choice: [1]:
エラーイベントの出力確認です。
クリティカルイベントに比べると緊急度の低いエラーが発生した際に出力されます。
エラーイベントはCloudWatchLogsに出力したいため、デフォルトの[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]
今回はロググループ名をデフォルトの「System」として設定するため、表示内容から変更せずエンターキーを押下します。
Log stream name:
default choice: [{instance_id}]
ログストリーム名の設定です。今回はデフォルトのインスタンスIDでログストリームを出力したいため、[1]を選択します。
Which log group class would you like to have for this log group?
1. STANDARD
2. INFREQUENT_ACCESS
default choice: [1]:
CloudWatchLogsのロググループのクラスをスタンダードクラスとするか低頻度アクセスクラスとするかの設定です。今回はスタンダードクラスを利用したいため、[1]を選択します。
低頻度アクセスのロググループを利用した場合、データ転送量がスタンダードクラスのロググループの半額程度になります。しかし、サブスクリプションフィルタやメトリクスフィルタなどの機能を利用することができません。
参考:アクセス頻度の低いログ用の新しい Amazon CloudWatch ログクラスを割引価格で提供(Amazon Web Services ブログ)
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]:
CloudWatchLogsに出力させるログイベントの出力形式の設定です。
XML形式とプレーンテキスト形式が選択できます。
XML形式で出力させたいため、[1]を選択します。
Log Group Retention in days
1. -1
2. 1
3. 3
4. 5
5. 7
6. 14
7. 30
8. 60
9. 90
10. 120
11. 150
12. 180
13. 365
14. 400
15. 545
16. 731
17. 1096
18. 1827
19. 2192
20. 2557
21. 2922
22. 3288
23. 3653
default choice: [1]:
ロググループの保持期間です。「-1」を指定すると、無制限でログが保持されるようになります。今回は検証のためデフォルトの[1](ログ保持期間無制限)を選択します。
CloudWachLogは保持する際に0.033USD/GBの料金が発生するため、実際に設定を行う際はコストも念頭に置いたうえで保持期間を指定してください。
参考:Amazon CloudWatch 料金表
Do you want to specify any additional Windows event log to monitor?
1. yes
2. no
default choice: [1]:
2
さらに収集したいWindowsのイベントログがあるかどうかの設定です。今回はWindowsのSystemsログのみ監視するため、[2]を選択します。
x-ray利用有無に関する確認
Do you want the CloudWatch agent to also retrieve X-ray traces?
1. yes
2. no
default choice: [1]:
2
x-rayとCloudWatchを統合するかどうかの設定です。今回はx-rayは試用しない為、[2]を選択します。
x-rayを利用すると、サーバー内のアプリケーションが処理するリクエストについてデータ収集を行い、コンソール上から分析・表示することができるようになります。
参考:AWS X-Ray の概要
設定ファイルのバックアップ先の通知、設定ファイルの内容確認
Existing config JSON identified and copied to: C:\Users\Administrator\AppData\Roaming\Amazon\CloudWatchAgent\etc\backup-configs
Saved config file to config.json successfully.
Configウィザードによって生成された設定ファイルの保管先・バックアップ先と、生成されたjsonファイルの内容が表示されます。
LinuxのConfigウィザードと違い、設定ファイルの保管先については特に出力されていません。
確認したところ、Configウィザードのexeが配置されているフォルダに設定ファイルも出力されていました。
[ColoudWatchAgentのConfigファイル保管先]
C:\Program Files\Amazon\AmazonCloudWatchAgent\config.json
WindowsのConfigウィザードによって生成された設定ファイルは、下記にバックアップされます。
[ColoudWatchAgentのConfigファイルバックアップ先]
C:\Users\Administrator\AppData\Roaming\Amazon\CloudWatchAgent\etc\backup-configs
CloudWatchConfigウィザードにより生成されたJSONファイルは、例えば下記のような内容になります。
config.jsonの例
{
"logs": {
"logs_collected": {
"windows_events": {
"collect_list": [
{
"event_format": "xml",
"event_levels": [
"VERBOSE",
"INFORMATION",
"WARNING",
"ERROR",
"CRITICAL"
],
"event_name": "System",
"log_group_class": "STANDARD",
"log_group_name": "System",
"log_stream_name": "{instance_id}",
"retention_in_days": -1
},
{
"event_format": "xml",
"event_levels": [
"VERBOSE",
"INFORMATION",
"WARNING",
"ERROR",
"CRITICAL"
],
"event_name": "System",
"log_group_class": "STANDARD",
"log_group_name": "System",
"log_stream_name": "{instance_id}",
"retention_in_days": -1
}
]
}
}
},
"metrics": {
"aggregation_dimensions": [
[
"InstanceId"
]
],
"append_dimensions": {
"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
"ImageId": "${aws:ImageId}",
"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
},
"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.
「jsonファイルはconfig.jsonにあるので、必要なら手動で編集してください」というようなことが表示されます。ウィザードのexeと同一のフォルダ内にconfig.jsonが出力されます。
生成したConfigファイルをSSMパラメータストアにアップロードするかの確認
Do you want to store the config in the SSM parameter store?
1. yes
2. no
default choice: [1]:
2
Program exits now.
config.jsonの内容ををSSMパラメータストアにアップロードするかどうか聞かれます。
今回はSSMパラメータストアにConfigファイルをアップロードしない為、[2]を選択しました。
これで、すべてのCloudWatchの設定ファイル生成が完了しました。
※パラメータストアにCloudWatchConfigファイルをアップロードする場合
EC2に設定しているIAMロールに「CloudWatchAgentAdminPolicy」の権限が付与されている場合は、[1]を選択するとSSMパラメータストアにConfigファイルをアップロードすることができます。
[1]を選択した場合は、下記のような形でパラメータストアの名前について追加質問が発生します。
What parameter store name do you want to use to store your config? (Use 'AmazonCloudWatch-' prefix if you use our managed AWS policy)
default choice: [AmazonCloudWatch-windows]
パラメータストアにアップロードするCloudWatchConfigファイルは、必ず「AmazonCloudWatch-」で始まる名前にする必要があります。
参考:CloudWatch エージェントで使用する IAM ロールとユーザーを作成する
Trying to fetch the default region based on ec2 metadata...
I! imds retry client will retry 1 timesWhich region do you want to store the config in the parameter store?
default choice: [ap-northeast-1]
パラメータストアのリージョンを指定します。
Which AWS credential should be used to send json config to parameter store?
1. ********(From SDK)
2. Other
default choice: [1]:
ConfigファイルをSSMパラメータストアに送信する際に使用するAWSクレデンシャルについての確認です。
デフォルトの[1]を選択します。
Successfully put config to parameter store AmazonCloudWatch-windows.
Please press Enter to exit...
パラメータストアにファイルを送信した場合、送信が成功すると上記のようなメッセージが表示されます。
エンターキーを押下するとウィザードが終了します。
CloudwatchAgentの操作
CloudWatchAgentのConfigファイル生成が完了したら、CloudWatchAgentを起動・常駐化などを行います。
CloudWatchAgentを起動・常駐化・ステータス確認などの操作は以下に記載するコマンドで行えます。
Configファイルの読み込み
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:Configファイルのパス
CloudWatchAgentのConfigウィザードを利用した場合は、/opt/aws/amazon-cloudwatch-agent/bin配下にconfig.jsonが存在する為下記コマンドを実行します。
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json
CloudWatchAgentの起動・常駐化・ステータス確認
■CloudWatchAgentのサービス登録・自動起動設定
sc.exe create AmazonCloudWatchAgent binPath="C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent.exe" start= auto
※SSMのRunCommandでCloudWatchAgentをインストールすると、CloudWatchAgentのサービス登録・自動起動の有効化まで完了した状態となります。
■CloudWatchAgentの起動
sc.exe start AmazonCloudWatchAgent
■CloudWatchAgentの起動状態確認
Get-Service AmazonCloudWatchAgent
■CloudWatchAgentの停止
sc.exe stop AmazonCloudWatchAgent
amazon-cloudwatch-agent-ctlコマンドのオプションについて
CloudWatchAgentのファイル読み込み・起動にはamazon-cloudwatch-agent-ctlコマンド(C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1)を使用します。
Windowsのamazon-cloudwatch-agent-ctlコマンドでもリファレンスを出力しましたが、説明文の一部に細かい表現の違いがあったのみで、内容としてはLinuxのamazon-cloudwatch-agent-ctlコマンドと同じ内容でした。
amazon-cloudwatch-agent-ctlコマンドのリファレンスについては、前回の記事をご参照ください。
また、出力したコマンドリファレンスの原文は下記となります。
amazon-cloudwatch-agent-ctlコマンドリファレンス(英語)(折り畳み)
usage: amazon-cloudwatch-agent-ctl.ps1 -a
stop|start|status|fetch-config|append-config|remove-config|set-log-level
[-m ec2|onPremise|onPrem|auto]
[-c default|all|ssm:<parameter-store-name>|file:<file-path>]
[-s]
[-l INFO|DEBUG|WARN|ERROR|OFF]
e.g.
1. apply a SSM parameter store config on EC2 instance and restart the agent afterwards:
amazon-cloudwatch-agent-ctl.ps1 -a fetch-config -m ec2 -c ssm:AmazonCloudWatch-Config.json -s
2. append a local json config file on onPremise host and restart the agent afterwards:
amazon-cloudwatch-agent-ctl.ps1 -a append-config -m onPremise -c file:c:\config.json -s
3. query agent status:
amazon-cloudwatch-agent-ctl.ps1 -a status
-a: action
stop: stop amazon-cloudwatch-agent if running.
start: start amazon-cloudwatch-agent if configuration is available.
status: get the status of both agent processes.
fetch-config: apply config for agent, followed by -c. Target config can be based on location (ssm parameter store name, file name), or 'default'.
append-config: append json config with the existing json configs if any, followed by -c. Target config can be based on the location (ssm parameter store name, file name), or 'default'.
remove-config: remove config for agent, followed by -c. Target config can be based on the location (ssm parameter store name, file name), or 'all'.
set-log-level: sets the log level, followed by -l to provide the level in all caps.
-m: mode
ec2: indicate this is on ec2 host.
onPremise, onPrem: indicate this is on onPremise host.
auto: use ec2 metadata to determine the environment, may not be accurate if ec2 metadata is not available for some reason on EC2.
-c: amazon-cloudwatch-agent configuration
default: default configuration for quick trial.
ssm:<parameter-store-name>: ssm parameter store name.
file:<file-path>: file path on the host.
all: all existing configs. Only apply to remove-config action.
-s: optionally restart after configuring the agent configuration
this parameter is used for 'fetch-config', 'append-config', 'remove-config' action only.
-l: log level to set the agent to INFO, DEBUG, WARN, ERROR, or OFF
this parameter is used for 'set-log-level' only.
ここまでお読みいただきありがとうございました。
次回はCloudwatchメトリクスの出力確認・SNSの作成・CloudWatchAlarmの作成手順についてご紹介します。