WindowsインスタンスにCloudWatch Agentをインストールして、ログとメトリクスを収集する構成
CloudWatch Agentを使用することによって、ログやメトリクスを収集することができます。
オペレーティングシステム全体で Amazon EC2 インスタンスから内部システムレベルのメトリクスを収集します。(中略)
Linux または Windows Server を実行している Amazon EC2 インスタンスおよびオンプレミスサーバーから、ログを収集します。
CloudWatch エージェントを使用した Amazon EC2 Instances インスタンスとオンプレミスサーバーからのメトリクスとログの収集
今回はWindowsインスタンス(Windows Server 2019)を対象とします。
なおLinuxインスタンス(Amazon Linux 2)にCloudWatch Agentをインストールする手順については、以下のページをご確認ください。
構築する環境
Linux版とは構成が異なります。
Linux版では、各種サービス(Sysmtem Manager, CloudWatch, S3)へのアクセスは、VPCエンドポイントを経由して行いましたが、今回はNATゲートウェイを使用します。
環境構築用のCloudFormationテンプレートファイル
上記の構成をCloudFormationで構築します。
以下のURLにCloudFormationテンプレートを配置します。
https://github.com/awstut-an-r/awstut-fa/tree/main/016
テンプレートファイルのポイント解説
構成はLinux版とWindows版で異なりますが、アプローチは同様です。
つまりLinuxでもWindowsでも、以下の2つのSSMドキュメントを使用することで、同様の手順でCloudWatch Agentをインストールすることができるということです。
- AWS-ConfigureAWSPackage
- AmazonCloudWatch-ManageAgent
このページでは、Linux版と異なる点にフォーカスして取り上げます。
NATゲートウェイで各種サービスにアクセス
Linux版と異なる点の1つ目は、各種サービスへアクセスする経路です。NATゲートウェイを使用します。
Resources:
EIP:
Type: AWS::EC2::EIP
Properties:
Domain: vpc
NATGateway:
Type: AWS::EC2::NatGateway
Properties:
AllocationId: !GetAtt EIP.AllocationId
SubnetId: !Ref PublicSubnet
Code language: CSS (css)
Linux版ではVPCエンドポイントを使用していました。これはインスタンスがAmazon Linux 2だったため、S3バケットに対してyumを実行できたことが理由です。そのためCloudWatchエージェントインストールに、インターネットに抜ける必要がなかったのです。
詳細は以下のページをご確認ください。
対して今回のWindows版では、CloudWatchエージェントをインストールする際に、インターネットにアクセスする必要があります。そのためVPCエンドポイントだけでは、要件を満たすことができません。よってNATゲートウェイを設置して、プライベートサブネット内のWindowsインスタンスが、インターネットにアクセスできる経路を用意します。
CloudWatchエージェントのコンフィグ
SSMパラメータにCloudWatchエージェントのコンフィグを保存する手法は、Linux版と同様ですが、中身が少々異なります。
Resources:
CloudWatchConfigParemeter:
Type: AWS::SSM::Parameter
Properties:
Name: AmazonCloudWatch-windows
Type: String
Value: !Sub |
{
"logs": {
"logs_collected": {
"windows_events": {
"collect_list": [
{
"event_format": "xml",
"event_levels": [
"VERBOSE",
"INFORMATION",
"WARNING",
"ERROR",
"CRITICAL"
],
"event_name": "System",
"log_group_name": "${Prefix}"
}
]
}
}
},
"metrics": {
"append_dimensions": {
"ImageId": "${!aws:ImageId}",
"InstanceId": "${!aws:InstanceId}",
"InstanceType": "${!aws:InstanceType}"
},
"metrics_collected": {
"Memory": {
"measurement": [
"% Committed Bytes In Use"
],
"metrics_collection_interval": 60
},
"Paging File": {
"measurement": [
"% Usage"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
}
}
}
}
Code language: YAML (yaml)
コンフィグの内容がWindowsに沿ったものになります。Windows版でも、logsおよびmetricsセクションを定義し、インスタンスのログとメトリクスを取得するように設定します。具体的には、ログとしてイベントログの内、システムに関する内容を、メトリクスとしてメモリ・ページングに関する項目を収集するように設定します。
環境構築
CloudFormationを使用して、本環境を構築し、実際の挙動を確認します。
CloudFormationスタックを作成し、スタック内のリソースを確認する
CloudFormationスタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。
各スタックのリソースを確認した結果、今回作成された主要リソースの情報は以下の通りです。
- Instance1のID:i-0d6ab5e24e2453ef4
- S3バケット名:fa-016
- CloudWatch Logsロググループ名:fa-016
SSM Run Commandの実行状況を確認する
AWS Management Consoleから実行状況を確認します。
確かに2つのコマンドが実行され、正常に完了していることがわかります。
続いてS3バケットにアクセスし、SSM Run Command実行時のログを確認します。
まずCloudWatch Agentのインストールの実行結果です。
ファイルの中身は以下の通りです。
Initiating arn:aws:ssm:::package/AmazonCloudWatchAgent 1.247349.0b251399 install
Plugin aws:runPowerShellScript ResultStatus Success
install output: Running install.ps1
Successfully installed arn:aws:ssm:::package/AmazonCloudWatchAgent 1.247349.0b251399
Code language: plaintext (plaintext)
正常にインストールされたことがわかります。
次にCloudWatch Agent起動の実行結果です。
ファイルの中身は以下の通りです。
****** processing amazon-cloudwatch-agent ******
Region: ap-northeast-1
credsConfig: map[]
Successfully fetched the config and saved in C:\ProgramData\Amazon\AmazonCloudWatchAgent\Configs\ssm_AmazonCloudWatch-windows.tmp
Start configuration validation...
2021/12/28 07:32:23 Reading json config file path: C:\ProgramData\Amazon\AmazonCloudWatchAgent\Configs\ssm_AmazonCloudWatch-windows.tmp ...
Valid Json input schema.
No csm configuration found.
Configuration validation first phase succeeded
Configuration validation second phase succeeded
Configuration validation succeeded
AmazonCloudWatchAgent has been stopped
AmazonCloudWatchAgent has been started
Code language: plaintext (plaintext)
正常に起動されたことがわかります。
インスタンスにアクセスし、CloudWatch Agentの起動を確認する
一応、インスタンスにアクセスし、CloudWatch Agentの起動状況を確認します。
インスタンスへのアクセスは、SSM Session Managerを使用します。
$ aws ssm start-session \
--target i-0d6ab5e24e2453ef4
Starting session with SessionId: root-04cc7fc7ea067957c
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
PS C:\Windows\system32>
Code language: Bash (bash)
SSM Session Managerを使用したインスタンスへのアクセスに関する詳細は、以下のページをご確認ください。
アクセスできましたので、起動状況を確認します。
PS C:\Windows\system32> Get-Service -Name AmazonCloudWatchAgent
Status Name DisplayName
------ ---- -----------
Running AmazonCloudWatc... Amazon CloudWatch Agent
Code language: PowerShell (powershell)
「Status」の項目が「Running」とありますので、正常に動作していることがわかります。
CloudWatch Agentで配信されたログを確認する
まずロググループ内のストリームの状況を確認します。
ロググループ名やストリーム名は、CloudWatch Agentのコンフィグで指定した通りです。
次にストリームに配信されているログを確認します。
正常にログが配信されていることがわかります。
CloudWatch Agentで配信されたメトリクスを確認する
最後にメトリクスを確認します。
AWS Management Consoleにて、以下にアクセスします。
CloudWatch > メトリクス > 全てのメトリクス > CWAgent
上記の通り、メトリクスが配信され、グラフが作成されました。
まとめ
WindowsインスタンスにSSMを使用して、CloudWatch Agentをインストールする手順を確認しました
CloudWatch Agentを使用することで、ログおよびメトリクスの配信ができることを確認しました。