Quick Setup内のHost ManagementライブラリとDistributorライブラリでCloudWatch Agentをインストールした際の違いを眺めてみた

2022.09.28

はじめに

こんにちは。大阪オフィスの林です。

先日、Systems Manager Quick Setup内のDistributorのライブラリを使って、CloudWatch Agentのインストールや更新を簡単に行えるようになりました。

一方、Systems Manager Quick SetupにはこれまでもHost ManagementのライブラリからCloudWatch Agentのインストールや更新を行う機能があったのですが、どういった違いがあるのかが気になり、思いついたところを順番に眺めてみましたので、備忘がてら簡単にまとめておきたいと思います。

結論

セットアップされるリソースやCloudWatch Agentをインストールする時のSystems Managerのドキュメントに違いはあるものの、最終的なCloudWatch Agentの状態としては大差が無い。(と思われる)

やってみた

まずは設定箇所の違い

  • Host Managementライブラリ

チェックボックスのON/OFFで設定を行います。

  • Distributorライブラリ

ソフトウェアパッケージとしてCloudWatch Agentを指定し、用意された更新頻度を選択し設定を行います。

実行されたCloudFormationの違い

  • Host Managementライブラリ

関連リソースが9個作成されています。

  • Distributorライブラリ

関連リソースが5個作成されています。

作成されたSystems Manager Document(自己所有)の違い

  • Host Managementライブラリ

CloudFormationにて作成された4つのドキュメント。

ドキュメン名 説明
AWSQuickSetup-CreateAndAttachIAMToInstance-xxxxx Quick Setupとの関連付けのためのドキュメント。このドキュメントでは、必要なポリシーを持つインスタンスプロファイルのIAMロールが作成されていることを確認します。
AWSQuickSetup-InstallAndManageCloudWatchDocument-xxxxx AWS-InstallAndManageCloudWatchコマンドドキュメントは、Amazon CloudWatchエージェントをインストールし、Amazon EC2インスタンスのエージェントの設定を管理するコマンドです。
AWSQuickSetup-UpdateExistingInstanceProfile-xxxxx Quick Setupとの関連付けのためのドキュメント。このドキュメントは、インスタンスプロファイルのロールとポリシーを更新します。
UpdateCloudWatchDocument-xxxxx CloudWatchエージェントを更新するためのドキュメントです。
  • Distributorライブラリ

CloudFormationにて作成された1つのドキュメント。

ドキュメン名 説明
AWSQuickSetup-Distributor-CreateAndAttachIAMToInstance-xxxxx Quick Setupとの関連付けのためのドキュメント。このドキュメントでは、必要なポリシーを持つインスタンスプロファイルのIAMロールが作成されていることを確認します。

実行されたRun Commandの違い

  • Host Managementライブラリ

作成されたドキュメントのAWSQuickSetup-InstallAndManageCloudWatchDocument-xxxxxUpdateCloudWatchDocument-xxxxxが実行されていました。

  • Distributorライブラリ

AWSマネージドのドキュメントのAWS-ConfigureAWSPackageが実行されていました。

ClowdWatch Agentのバージョン

ここからはインストール後の状態を眺めていきたいと思います。
ClowdWatch Agentのバージョンは、共に最新のバージョンがインストールされるようです。

  • Host Managementライブラリ
[ec2-user@ip-172-31-3-172 ~]$ cat /opt/aws/amazon-cloudwatch-agent/bin/CWAGENT_VERSION
1.247355.0b252062
  • Distributorライブラリ
[ec2-user@ip-172-31-7-120 ~]$ cat /opt/aws/amazon-cloudwatch-agent/bin/CWAGENT_VERSION
1.247355.0b252062

Quick Setup直後のClowdWatch Agentの起動状態

  • Host Managementライブラリ

デフォルトで起動状態でした。

[ec2-user@ip-172-31-3-172 ~]$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a status
{
  "status": "running",
  "starttime": "2022-09-27T07:40:52+0000",
  "configstatus": "configured",
  "cwoc_status": "stopped",
  "cwoc_starttime": "",
  "cwoc_configstatus": "not configured",
  "version": "1.247355.0b252062"
}
  • Distributorライブラリ

デフォルトは停止状態でした。sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a startで起動しておきます。

[ec2-user@ip-172-31-7-120 ~]$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a status
{
  "status": "stopped",
  "starttime": "",
  "configstatus": "not configured",
  "cwoc_status": "stopped",
  "cwoc_starttime": "",
  "cwoc_configstatus": "not configured",
  "version": "1.247355.0b252062"
}

/opt/aws/amazon-cloudwatch-agent/ 配下の構成

厳密に内容の差分をチェックしていませんが、ファイル/フォルダの構成とサイズを見る限りは同じように見えます。

  • Host Managementライブラリ
[ec2-user@ip-172-31-3-172 ~]$ ll /opt/aws/amazon-cloudwatch-agent/
total 192
drwxr-xr-x 2 root    root       257 Sep 26 23:22 bin
drwxr-xr-x 5 root    root        40 Sep 26 23:22 cwagent-otel-collector
drwxr-xr-x 2 root    root        49 Sep 26 23:22 doc
drwxr-xr-x 3 cwagent cwagent    124 Sep 26 23:22 etc
-rw-r--r-- 1 root    root      1148 Aug 22 15:21 LICENSE
drwxr-xr-x 2 cwagent cwagent     77 Sep 26 23:22 logs
-rw-r--r-- 1 root    root        96 Aug 22 15:21 NOTICE
-rw-r--r-- 1 root    root     15620 Aug 22 15:21 RELEASE_NOTES
-rw-r--r-- 1 root    root    170932 Aug 22 15:21 THIRD-PARTY-LICENSES
drwxr-xr-x 2 cwagent cwagent     41 Sep 27 22:38 var
  • Distributorライブラリ(ClowdWatch Agent起動後)

なお、ClowdWatch Agent起動前はフォルダ/ファイルの構成は同じもののサイズが幾つか異なっていました。

[ec2-user@ip-172-31-7-120 ~]$ ll /opt/aws/amazon-cloudwatch-agent/
total 192
drwxr-xr-x 2 root    root       257 Sep 26 23:25 bin
drwxr-xr-x 5 root    root        40 Sep 26 23:25 cwagent-otel-collector
drwxr-xr-x 2 root    root        49 Sep 26 23:25 doc
drwxr-xr-x 3 cwagent cwagent    124 Sep 27 22:50 etc
-rw-r--r-- 1 root    root      1148 Aug 22 15:21 LICENSE
drwxr-xr-x 2 cwagent cwagent     77 Sep 27 22:50 logs
-rw-r--r-- 1 root    root        96 Aug 22 15:21 NOTICE
-rw-r--r-- 1 root    root     15620 Aug 22 15:21 RELEASE_NOTES
-rw-r--r-- 1 root    root    170932 Aug 22 15:21 THIRD-PARTY-LICENSES
drwxr-xr-x 2 cwagent cwagent     41 Sep 27 22:50 var

/opt/aws/amazon-cloudwatch-agent/bin/ 配下の構成

厳密に内容の差分をチェックしていませんが、ファイル/フォルダの構成とサイズを見る限りは同じように見えます。

  • Host Managementライブラリ
[ec2-user@ip-172-31-3-172 ~]$ ll /opt/aws/amazon-cloudwatch-agent/bin/
total 218520
-rwxr-xr-x 1 root root 86631000 Aug 22 15:21 amazon-cloudwatch-agent
-rwxr-xr-x 1 root root 10197784 Aug 22 15:21 amazon-cloudwatch-agent-config-wizard
-rwxr-xr-x 1 root root    19318 Aug 22 15:21 amazon-cloudwatch-agent-ctl
-rwxr-xr-x 1 root root  9804792 Aug 22 15:21 config-downloader
-rwxr-xr-x 1 root root 12998968 Aug 22 15:21 config-translator
-rwxr-xr-x 1 root root 91185208 Aug 22 15:21 cwagent-otel-collector
-rw-r--r-- 1 root root       18 Aug 22 15:21 CWAGENT_VERSION
-rwxr-xr-x 1 root root 12907960 Aug 22 15:21 start-amazon-cloudwatch-agent
  • Distributorライブラリ
[ec2-user@ip-172-31-7-120 ~]$ ll /opt/aws/amazon-cloudwatch-agent/bin/
total 218520
-rwxr-xr-x 1 root root 86631000 Aug 22 15:21 amazon-cloudwatch-agent
-rwxr-xr-x 1 root root 10197784 Aug 22 15:21 amazon-cloudwatch-agent-config-wizard
-rwxr-xr-x 1 root root    19318 Aug 22 15:21 amazon-cloudwatch-agent-ctl
-rwxr-xr-x 1 root root  9804792 Aug 22 15:21 config-downloader
-rwxr-xr-x 1 root root 12998968 Aug 22 15:21 config-translator
-rwxr-xr-x 1 root root 91185208 Aug 22 15:21 cwagent-otel-collector
-rw-r--r-- 1 root root       18 Aug 22 15:21 CWAGENT_VERSION
-rwxr-xr-x 1 root root 12907960 Aug 22 15:21 start-amazon-cloudwatch-agent

/opt/aws/amazon-cloudwatch-agent/etc/ 配下の構成

厳密に内容の差分をチェックしていませんが、ファイル/フォルダの構成とサイズを見る限りは同じように見えます。

  • Host Managementライブラリ
[ec2-user@ip-172-31-3-172 ~]$ ll /opt/aws/amazon-cloudwatch-agent/etc/
total 12
drwxr-xr-x 2 cwagent cwagent   21 Sep 26 23:22 amazon-cloudwatch-agent.d
-rw-rw-r-- 1 cwagent cwagent 1118 Sep 27 22:38 amazon-cloudwatch-agent.toml
-rw-r--r-- 1 cwagent cwagent  925 Aug 22 15:21 common-config.toml
-rw-r--r-- 1 cwagent cwagent    2 Sep 27 22:38 env-config.json
  • Distributorライブラリ

なお、ClowdWatch Agent起動前はamazon-cloudwatch-agent.tomlenv-config.jsonのファイルは存在していませんでした。

[ec2-user@ip-172-31-7-120 ~]$ ll /opt/aws/amazon-cloudwatch-agent/etc/
total 12
drwxr-xr-x 2 cwagent cwagent   21 Sep 27 22:50 amazon-cloudwatch-agent.d
-rw-rw-r-- 1 cwagent cwagent 1118 Sep 27 22:50 amazon-cloudwatch-agent.toml
-rw-r--r-- 1 cwagent cwagent  925 Aug 22 15:21 common-config.toml
-rw-r--r-- 1 cwagent cwagent    2 Sep 27 22:50 env-config.json

amazon-cloudwatch-agent.tomlの中身の違い

共に内容は同じで、Basicで設定されるメモリのused_percentとディスクのused_percentが設定されていました。

  • Host Managementライブラリ
[ec2-user@ip-172-31-3-172 ~]$ cat /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml
[agent]
  collection_jitter = "0s"
  debug = false
  flush_interval = "1s"
  flush_jitter = "0s"
  hostname = ""
  interval = "60s"
  logfile = "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log"
  logtarget = "lumberjack"
  metric_batch_size = 1000
  metric_buffer_limit = 10000
  omit_hostname = false
  precision = ""
  quiet = false
  round_interval = false

[inputs]

  [[inputs.disk]]
    fieldpass = ["used_percent"]
    tagexclude = ["mode"]
    [inputs.disk.tags]
      metricPath = "metrics"

  [[inputs.mem]]
    fieldpass = ["used_percent"]
    [inputs.mem.tags]
      metricPath = "metrics"

[outputs]

  [[outputs.cloudwatch]]
    force_flush_interval = "60s"
    namespace = "CWAgent"
    region = "ap-northeast-1"
    tagexclude = ["host", "metricPath"]
    [outputs.cloudwatch.tagpass]
      metricPath = ["metrics"]

[processors]

  [[processors.ec2tagger]]
    ec2_instance_tag_keys = ["aws:autoscaling:groupName"]
    ec2_metadata_tags = ["ImageId", "InstanceId", "InstanceType"]
    refresh_interval_seconds = "0s"
    [processors.ec2tagger.tagpass]
      metricPath = ["metrics"]
  • Distributorライブラリ
[ec2-user@ip-172-31-7-120 ~]$ cat /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml
[agent]
  collection_jitter = "0s"
  debug = false
  flush_interval = "1s"
  flush_jitter = "0s"
  hostname = ""
  interval = "60s"
  logfile = "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log"
  logtarget = "lumberjack"
  metric_batch_size = 1000
  metric_buffer_limit = 10000
  omit_hostname = false
  precision = ""
  quiet = false
  round_interval = false

[inputs]

  [[inputs.disk]]
    fieldpass = ["used_percent"]
    tagexclude = ["mode"]
    [inputs.disk.tags]
      metricPath = "metrics"

  [[inputs.mem]]
    fieldpass = ["used_percent"]
    [inputs.mem.tags]
      metricPath = "metrics"

[outputs]

  [[outputs.cloudwatch]]
    force_flush_interval = "60s"
    namespace = "CWAgent"
    region = "ap-northeast-1"
    tagexclude = ["host", "metricPath"]
    [outputs.cloudwatch.tagpass]
      metricPath = ["metrics"]

[processors]

  [[processors.ec2tagger]]
    ec2_instance_tag_keys = ["aws:autoscaling:groupName"]
    ec2_metadata_tags = ["ImageId", "InstanceId", "InstanceType"]
    refresh_interval_seconds = "0s"
    [processors.ec2tagger.tagpass]
      metricPath = ["metrics"]

ちゃんとCloudWatchのメトリクスとして記録されてます。

まとめ

CloudFormationで作成されるリソースの違いや、使用するSystems Managerのドキュメントに違いはあるものの、CloudWatch Agentの設定としてはほぼほぼ大差は無さそうな印象を受けました。
1つの選択方針として更新間隔を選択する必要があるかどうかでどちらのライブラリを選択するか決めても良いかもしれません。

以上、大阪オフィスの林がお送りしました!