CloudWatchでEC2のLoadAverageを取得する方法

Pocket

OSはAmazon Linux 2を想定して説明します

SSMのrun commandからも一部操作できますが、今回はすべてEC2のコマンド操作のみで完結させています

EC2にIAMロールを割り当てる

対象のEC2に下記2つのIAMポリシーを付与したIAMロールを割り当てましょう

  • CloudWatchAgentAdminPolicy
  • AmazonSSMManagedInstanceCore

SSM Agentインストール確認

EC2にssh接続後、デフォルトでインストールされているはずですが念の為確認しておきましょう

$ sudo systemctl status amazon-ssm-agent
● amazon-ssm-agent.service - amazon-ssm-agent
   Loaded: loaded (/etc/systemd/system/amazon-ssm-agent.service; enabled; vendor preset: enabled)
   Active: active (running) since 水 2022-04-06 04:07:40 UTC; 1h 49min ago
 Main PID: 3660 (amazon-ssm-agen)
   CGroup: /system.slice/amazon-ssm-agent.service
           ├─3660 /usr/bin/amazon-ssm-agent
           └─3713 /usr/bin/ssm-agent-worker

CloudWatchエージェントインストール確認

こちらもインストールされているはずですが念の為確認しておきましょう

$ sudo systemctl status amazon-cloudwatch-agent
● amazon-cloudwatch-agent.service - Amazon CloudWatch Agent
   Loaded: loaded (/etc/systemd/system/amazon-cloudwatch-agent.service; enabled; vendor preset: disabled)
   Active: active (running) since 水 2022-04-06 04:25:13 UTC; 1h 35min ago
 Main PID: 4139 (amazon-cloudwat)
   CGroup: /system.slice/amazon-cloudwatch-agent.service
           └─4139 /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent....

もしインストールされていない場合はインストールしましょう

$ sudo yum install amazon-cloudwatch-agent

CloudWatchエージェントファイル作成

設問に答えていきファイルを作成していきます

$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

以下質問以外はすべてデフォルトの値で作成しました

Do you want to monitor cpu metrics per core?
1. yes
2. no
default choice: [1]:
2

collectdのインストール

LoadAverageを取得するためにcollecedをインストールしましょう

$ sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ sudo yum install -y collectd

collectdファイル設定

collectdの設定ファイルを2つ新規作成しましょう

collected.confの作成

$ cd /etc
$ sudo cp collectd.conf collectd_default.conf
$ sudo vim collectd.conf

以下のように記入しましょう

LoadPlugin load
LoadPlugin network

<Plugin load>
        ReportRelative true
</Plugin>

<Plugin network>
        <Server "127.0.0.1" "25826">
                SecurityLevel "Encrypt"
                Username "user"
                Password "secret"
        </Server>
</Plugin>

Include "/etc/collectd.d"

auth_fileの作成

$ cd /etc/collectd.d
$ sudo vim auth_file

以下のように記入しましょう

user: secret

CloudWatchエージェントファイルの編集

$ sudo vim /opt/aws/amazon-cloudwatch-agent/bin/config.json

該当箇所(collectdの部分)を編集しましょう

....
	"collectd": {
                "collectd_security_level":"encrypt",              //追記する
                "collectd_auth_file":"/etc/collectd.d/auth_file", //追記する
                "metrics_aggregation_interval": 60
            },
....

CloudWatchエージェント起動

$ 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
****** processing amazon-cloudwatch-agent ******
/opt/aws/amazon-cloudwatch-agent/bin/config-downloader --output-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d --download-source file:/opt/aws/amazon-cloudwatch-agent/bin/config.json --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml --multi-config default
Successfully fetched the config and saved in /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_config.json.tmp
Start configuration validation...
/opt/aws/amazon-cloudwatch-agent/bin/config-translator --input /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json --input-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d --output /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml --multi-config default
2022/04/06 06:29:22 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_config.json.tmp ...
Valid Json input schema.
I! Detecting run_as_user...
No csm configuration found.
No log configuration found.
Configuration validation first phase succeeded
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -schematest -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml
Configuration validation second phase succeeded
Configuration validation succeeded
Redirecting to /bin/systemctl stop amazon-cloudwatch-agent.service
Redirecting to /bin/systemctl restart amazon-cloudwatch-agent.service

collectdとCloudAgentの動作確認

各コマンドを記入した時にそれぞれレスポンスが返ってくることを確認しましょう

$ sudo netstat -lanput | grep 25826
udp        0      0 127.0.0.1:25826         0.0.0.0:*             4139/amazon-cloudwa 

$  sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status
{
  "status": "running",
  "starttime": "2022-04-06T04:25:13+0000",
  "configstatus": "configured",
  "cwoc_status": "stopped",
  "cwoc_starttime": "",
  "cwoc_configstatus": "not configured",
  "version": "1.247350.0b251780"
}

collected有効化

$ sudo systemctl enable collectd.service
$ sudo systemctl start collectd
$ sudo systemctl status collectd
● collectd.service - Collectd statistics daemon
   Loaded: loaded (/usr/lib/systemd/system/collectd.service; enabled; vendor preset: disabled)
   Active: active (running) since 水 2022-04-06 04:26:57 UTC; 1h 43min ago
     Docs: man:collectd(1)
           man:collectd.conf(5)
 Main PID: 4207 (collectd)
   CGroup: /system.slice/collectd.service
           └─4207 /usr/sbin/collectd

CloudWatchから確認

AWSコンソール画面からCloudWatch→すべてのメトリクス→CWAgent→ImageId,InstanceId,InstanceType,type,type_instanceに遷移して表示されていたら成功です!

参考