WindowsにCloudWatch Agentをインストールしてデータ収集

WindowsにCloudWatch Agentをインストールしてデータ収集する

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にCloudWatch Agentをインストールしてデータ収集 【LinuxインスタンスにCloudWatch Agentをインストールして、ログとメトリクスを収集する構成】 CloudWatch Agentを使用することによって、ログやメトリクスを収集する...

構築する環境

Diagram of install CloudWatch Agent on Windows.

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 PublicSubnetCode language: CSS (css)

Linux版ではVPCエンドポイントを使用していました。これはインスタンスがAmazon Linux 2だったため、S3バケットに対してyumを実行できたことが理由です。そのためCloudWatchエージェントインストールに、インターネットに抜ける必要がなかったのです。
詳細は以下のページをご確認ください。

あわせて読みたい
プライベートサブネットのインスタンスでyum/dnfを実行する 【プライベートサブネット内のインスタンスでyum/dnfを実行する構成】 プライベートサブネット内のインスタンスで、yum/dnfを実行する方法を確認します。 今回は以下の2...

対して今回の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スタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。

あわせて読みたい
CloudFormationのネストされたスタックで環境を構築する 【CloudFormationのネストされたスタックで環境を構築する方法】 CloudFormationにおけるネストされたスタックを検証します。 CloudFormationでは、スタックをネストす...

各スタックのリソースを確認した結果、今回作成された主要リソースの情報は以下の通りです。

  • Instance1のID:i-0d6ab5e24e2453ef4
  • S3バケット名:fa-016
  • CloudWatch Logsロググループ名:fa-016

SSM Run Commandの実行状況を確認する

AWS Management Consoleから実行状況を確認します。

Two SSM Run Commands are being executed.

確かに2つのコマンドが実行され、正常に完了していることがわかります。

続いてS3バケットにアクセスし、SSM Run Command実行時のログを確認します。
まずCloudWatch Agentのインストールの実行結果です。

Execution result of AWS-ConfigureAWSPackage.

ファイルの中身は以下の通りです。

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起動の実行結果です。

Execution result of AmazonCloudWatch-ManageAgent.

ファイルの中身は以下の通りです。

****** 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を使用したインスタンスへのアクセスに関する詳細は、以下のページをご確認ください。

あわせて読みたい
WindowsインスタンスにSSM Session Manager経由でアクセスする 【WindowsインスタンスにSSM Session Manager経由でアクセスする構成】 WindowsインスタンスにSSM Session Manager経由でアクセスする構成を確認します。 Session Manag...

アクセスできましたので、起動状況を確認します。

PS C:\Windows\system32> Get-Service -Name AmazonCloudWatchAgent

Status   Name               DisplayName
------   ----               -----------
Running  AmazonCloudWatc... Amazon CloudWatch Agent
Code language: PowerShell (powershell)

「Status」の項目が「Running」とありますので、正常に動作していることがわかります。

CloudWatch Agentで配信されたログを確認する

まずロググループ内のストリームの状況を確認します。

A stream has been created in CloudWatch Logs by launching the CloudWatch Agent.

ロググループ名やストリーム名は、CloudWatch Agentのコンフィグで指定した通りです。

次にストリームに配信されているログを確認します。

Logs are being delivered through CloudWatch Agent.

正常にログが配信されていることがわかります。

CloudWatch Agentで配信されたメトリクスを確認する

最後にメトリクスを確認します。
AWS Management Consoleにて、以下にアクセスします。

CloudWatch > メトリクス > 全てのメトリクス > CWAgent

The graph was created by CloudWatch custom metrics.

上記の通り、メトリクスが配信され、グラフが作成されました。

まとめ

WindowsインスタンスにSSMを使用して、CloudWatch Agentをインストールする手順を確認しました

CloudWatch Agentを使用することで、ログおよびメトリクスの配信ができることを確認しました。