初めて、Amazon CloudWatchにカスタムメトリクスを設定する<初心者でもわかりやすく解説>

Amazon CloudWatchにカスタムメトリクスを設定する AWS

起動済のEC2インスタンス(Ubuntu 20.04 LTS)に対して、

  • CPUの使用率(%)
  • メモリの使用率(%)
  • ストレージ(ルートボリュームのEBS)の使用率(%)

の監視を行う。CPU使用率はデフォルトでモニタリングしているが、メモリとストレージの使用率はカスタムメトリクスを作成する必要がある。

初めてでググるだけだと、昔のCloudWatch モニタリングスクリプトを用いるやり方が出てきたり、Cloudformationも使えるの?collectdは必要?など、「どう設定するか?」という手順を定めるのに時間がかかったため、手順と共に判断基準を示す。一度手順が定まってしまえば、あとはミスなくやるだけ。

EC2の前提条件

モニタリングの対象:Webサーバーとして起動中のEC2インスタンス

EC2インスタンスのOS:Ubuntu 20.04 LTS

EC2インスタンスのアーキテクチャ:AMD64
モニタリングするわけだから、当然、インターネットに接続できること。
CloudWatch用のmonitering Endpointは作成済(セキュリティグループでWebサーバーからのインバウンドトラフィックを許可済)

カスタムメトリクスを追加する手順

カスタムメトリクスを追加する方法は、2021年3月現在、2つある:https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/mon-scripts.html

今回は、AWSも推奨する、CloudWatchエージェントを導入するやり方で行う。

もうひとつ、CloudWatch モニタリングスクリプトを用いるやり方もあるがAWS非推奨となっているため、今回は非採用とした(おそらく、エージェントが登場する前のやり方)。

設定の手順の大枠は、下記ドキュメントに基づいて行う。
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html

1.IAMロールのアタッチ

CloudWatchAgentServerPolicy がアタッチされているIAMロールを、EC2インスタンスにアタッチする。ググればすぐ出てくるので詳細は割愛。

2.CloudWatchエージェントパッケージをダウンロード

Webサーバ(Ubuntu 20.04 LTS)にSSH接続し、コマンドでCloudWatch エージェントパッケージをダウンロードする:https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-commandline-fleet.html

EC2を立ち上げる際に、同時にCloudWatchの設定もする場合は、CloudFormationで立ち上げと同時にダウンロードが出来るみたいだが、今回は既に立ち上げてミドルウェアも導入した後だったのでCloudFormation使う方法は不採用。(https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent-New-Instances-CloudFormation.html

ここからの具体的な手順は、下記記事を参照した。

前提条件同じなら下記コマンドでOK(アーキテクチャは立ち上げた際のAMIを見るとわかります。)

ダウンロード:

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

「‘amazon-cloudwatch-agent.deb’ saved」と出ればOK

インストール:

$ sudo dpkg -i -E ./amazon-cloudwatch-agent.deb

特にログにエラーがなければOK

3.CloudWatchエージェント設定ファイルの作成、保存

下記
  amazon-cloudwatch-agent.jsonファイル(CloudWatch エージェント設定ファイル)

を、

  /opt/aws/amazon-cloudwatch-agent/etc

に、保存する。

/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json

{
  "agent": {
    "metrics_collection_interval": 60,
    "run_as_user": "root"
  },
  "metrics": {
    "append_dimensions": {
      "InstanceId": "${aws:InstanceId}"
    },
    "metrics_collected": {
      "disk": {
        "measurement": [
          "disk_used_percent"
        ],
        "metrics_collection_interval": 60,
        "resources": [
          "/"
        ]
      },
      "mem": {
        "measurement": [
          "mem_used_percent"
        ],
        "metrics_collection_interval": 60
      }
    }
  }
}

今回、collectd(=CloudWatchエージェントと同じようにサーバの統計情報を収集するためのオープンソースソフトウェア)は不要だった。収集できるデータが異なるので、必要なら導入すること。「ディスクスペース合計に対する使用済みの割合」であればCloudWatchエージェントだけでいけた。このリストに載っているメトリクスはcollectdを必要としないはずなので、今回のストレージはEBS(EC2のルートボリューム)なので、これでいける。(普通はもっと他のメトリクスもたくさんとったりログもとったりするのでこのファイルはより遥かにボリューミーになる模様。)

4.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/etc/amazon-cloudwatch-agent.json

5.確認

ストレージ使用率、メモリ使用率を表示できるコマンドがあるので、それで確認する。

ストレージ(”disk_used_percent”メトリクス):

$ df --total

total 169963328 10551128 159395816 7% -

最後のtotal:〜のところを読む。今回は7%

メモリ(”mem_used_percent”メトリクス):

$ top

MiB Mem : 15718.1 total, 2015.1 free, 3426.6 used, 10276.4 buff/cache

3426.6 used ÷ 15718.1 total = 21.8003 % ≒ 21.8 %

上記のそれぞれの値と同じような値を、AWSマネジメントコンソールのCloudWatchの画面でも入手できているか見てみる。だいたい同じ(誤差プラスマイナス0.2%くらい?)ならOK

所感

(今回、謎に「今日中に!」みたいな縛りがあって焦っていたわりには変なところで詰まらなくて良かった・・・)

この記事を書いた人
こもれびエンジニア

自然と自由を愛するエンジニア。2021年1月に、大手製造業設計からプログラマ(Rails, AWS)へ転職。動物や自然との触れ合いや、汗を流すのが好き。

/HSP(繊細さん)/18デリケートな象/ストレングスファインダー(1分析思考/2親密性/3学習欲/4調和性/5収集心)、テニス、合気道、登山、あいだみつを、ジブリ、ワンピース、ドラゴンボール、Ruby on Rails、アイミング

はるすとをフォローする
AWS
スポンサーリンク
はるすとをフォローする
「そんなか」サイト

コメント

タイトルとURLをコピーしました