Help us understand the problem. What is going on with this article?

EC2にCloudWatchAgentを入れてメモリ使用率やディスク使用率を監視する。

EC2のメモリやディスクの使用率が見たいと思っても、そのままでは外部からは取得することができない。
AWSの管理の範囲はEC2の外部までなのでネットワークI/Oなど外部から見れるものはそのまま取得可能だが、メモリやディスクの情報を取得するにはAgentを入れて上げる必要がある。

以下のような項目はAgentを入れることで簡単に取得できるようになると思っていたのだが、案外詰まったのでメモ。
単にAgent入れただけだとmem_used_percentやらdisk_used_percentとか見たいものが見れずに困る。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/metrics-collected-by-CloudWatch-agent.html#linux-metrics-enabled-by-CloudWatch-agent

1. EC2を用意する。

EC2を用意する。

インスタンス情報
AMI: Amazon Linux 2 AMI (HVM), SSD Volume Type
インスタンスタイプ: t2.micro
オンデマンドインスタンス

IAMロールにはデフォルトで用意されているCloudWatchAgentServerPolicyを使って適当なロールを作成し、それをアタッチする。

IAMロールの作り方
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent-commandline.html

2. CloudWatchAgentを入れる。

公式ドキュメント
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/download-cloudwatch-agent-commandline.html

3箇所くらいから選んでダウンロードする。東京リージョンならここと思われる。

$ wget https://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm

インストールする。

$ sudo rpm -U ./amazon-cloudwatch-agent.rpm
create group cwagent, result: 0
create user cwagent, result: 0

3. Configファイルを作成する。

wizardを用いてconfigファイルみたいなものを作る。質問に答えていくだけで作れる。
基本的にはデフォルトで良いが一部だけは変更。ここでの設定はSSMパラメータストアに送られる。

$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
=============================================================
= Welcome to the AWS CloudWatch Agent Configuration Manager =
=============================================================
On which OS are you planning to use the agent?
1. linux
2. windows
default choice: [1]:           # [ ]内はデフォルト
                               # なにも指定しないでenterすればデフォルトで設定される。
      :
     (略)
      :
Which default metrics config do you want?
1. Basic
2. Standard
3. Advanced
4. None
default choice: [1]:
3                              # (*1) 
      :
     (略)
      :
Do you want to monitor any log files?
1. yes
2. no
default choice: [1]:
2                              # (*2) 
Saved config file to /opt/aws/amazon-cloudwatch-agent/bin/config.json successfully.
      :
     (略)
      :
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-linux]
AmazonCloudWatch-test          # 任意の名称 "AmazonCloudWatch-"は必須
      :
     (略)
      :
Which AWS credential should be used to send json config to parameter store?
1. ASIAWJKNSWDSLZLRBOCS(From SDK)
2. Other
default choice: [1]:
2
Please provide credentials to upload the json config file to parameter store.
AWS Access Key:
***************
AWS Secret Key:
**************************
Successfully put config to parameter store AmazonCloudWatch-test.
Program exits now.

※ コメント

(*1)どのレベルでどの情報を取得できるかは以下参照。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file-wizard.html
(*2)今回はメトリクスのみ見たいのでログの送信は設定しない。ここで1とすると、この後どのファイルを監視対象にするかなどが問われる(たしかそうだったはず。。)


動いてるかの確認。
この段階だとまだ動いていない。

$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status
{
  "status": "stopped",
  "starttime": "",
  "version": "1.237768.0"
}

4. CloudWatchへメトリクスを飛ばす。

以下で動かせるらしいのでやってみる。

$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c ssm:AmazonCloudWatch-test -s

/opt/aws/amazon-cloudwatch-agent/bin/config-downloader --output-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d --download-source ssm:AmazonCloudWatch-test --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml --multi-config default
Region: ap-northeast-1
credsConfig: map[]
Successfully fetched the config and saved in /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/ssm_AmazonCloudWatch-test.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
2020/04/24 13:12:57 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/ssm_AmazonCloudWatch-test.tmp ...
Valid Json input schema.
I! Detecting runasuser...
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 failed
======== Error Log ========
2020/04/24 13:12:57 I! AmazonCloudWatchAgent Version 1.237768.0.
2020/04/24 13:12:57 E! Error parsing /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml, open /usr/share/collectd/types.db: no such file or directory

。。。何言ってるか全然わからないけどなんかがエラーした。

Configuration validation second phase failed

対応は以下のページに書いてあった。その通りやってみる。

$ sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
$ yum provides /usr/share/collectd/types.db
$ sudo yum install collectd
      :
     (略)
      :
Downloading packages:
警告: /var/cache/yum/x86_64/2/epel/packages/collectd-5.8.1-1.el7.x86_64.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID 352c64e5: NOKEY
collectd-5.8.1-1.el7.x86_64.rpm の公開鍵がインストールされていません
collectd-5.8.1-1.el7.x86_64.rpm                            | 716 kB   00:00     
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 から鍵を取得中です。
Importing GPG key 0x352C64E5:
 Userid     : "Fedora EPEL (7) <epel@fedoraproject.org>"
 Fingerprint: 91e9 7d7c 5a1a 96f1 9da5 888f 6a2f aeb2 2cbb ae22
 Package    : epel-release-7-12.noarch (installed)
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
上記の処理を行います。よろしいでしょうか? [y/N]y

3つ目のコマンドでなんか警告されて問われるがyes。
もう一度起動のコマンド。

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c ssm:AmazonCloudWatch-test -s

成功!
ステータス確認

$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status
{
  "status": "running",
  "starttime": "2020-04-24T13:43:03+0000",
  "version": "1.237768.0"
}

ステータスは以下でも見れるらしい

$ systemctl status amazon-cloudwatch-agent.service
● amazon-cloudwatch-agent.service - Amazon CloudWatch Agent
   Loaded: loaded (/etc/systemd/system/amazon-cloudwatch-agent.service; enabled; vendor preset: disabled)
   Active: active (running) since 金 2020-04-24 13:43:04 UTC; 11s ago

5. CloudWatchAlarmで確認する。

このページをみてようやく理解できた。
https://www.geekfeed.co.jp/geekblog/aws-cloudwatch

CloudWatchのナビゲーションペインにあるメトリクスの項目ではここで取得するメモリとかディスクは表示されないらしい!(EC2メトリクスの中に表示されるものだと思っていたがそうではないようだ。)

ナビゲーションペインのAlarmから「アラームを作成」としてメトリクスを選択する画面に移行するとカスタムメトリクスの項目が見れるようになる。この中でCWAgent内からメモリやディスクの使用率を監視することができるようになる。

ようやくmem_used_percentやらswap_used_percentやらdisk_used_percentが見れるようになった。

インスタンスを再起動しても自動で起動するようにするには以下のコマンド。

$ systemctl is-enabled amazon-cloudwatch-agent.service
enabled

まとめ

  • Agentを入れただけだとstoppedなので起こしてあげる必要がある。
  • CloudWatchのナビゲーションペインにあるメトリクスからは見れない。アラームのほうから確認。

追記
しばらく待っているとメトリクスの方でも閲覧できてたので単にrunningにする操作が重要だった。

(追) アタッチしたEBSのディスク使用率もみれた。

コンソールからEBSアタッチ。この状態だと使用されないので適当なディレクトリにマウント。

$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk 
└─xvda1 202:1    0   8G  0 part /
xvdf    202:80   0  20G  0 disk 

$ sudo mkfs -t xfs /dev/xvdf
$ sudo mount /dev/xvdf ./test
$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk 
└─xvda1 202:1    0   8G  0 part /
xvdf    202:80   0  20G  0 disk /home/ec2-user/test
$ df -h
/dev/xvdf         20G   53M   20G    1% /home/ec2-user/test

これがCloudWatchから見れば成功。

image.png

参考

Kept1994
社会人2年目のインフラエンジニア兼薬剤師。AWSを用いた開発業務中。基本Inputオタクなので使わない知識が自然淘汰されていく前にOutputして定着を図りたい。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした