collectdのCloudWatchプラグインを試してみた

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちわ。昨日はドムの日でしたが全問正解できなかったガノタ市田です。
今回は新しくリリースされたcollectdのCloudWatchプラグインについて紹介します。

New – CloudWatch Plugin for collectd | AWS Blog

何ができるか

CloudWatchがcollectdに対応したことによりサーバ上の様々な情報をcollectd経由でCloudWatchに送ることができ、そこでモニタリングできるようになりました。

導入の概要

  • collectd用のIAMポリシー作成
  • 収集対象のインスタンスにポリシーアタッチ
  • 対象インスタンスにcollectdのインストールと設定

それでは早速見ていきたいと思います。

手順

IAMの画面でポリシーを作成します。

iampolicy

ポリシーの作成をクリックします。

makepolicy

Policy Generatorを選択します。

policygenerator

次の画面の通り、CloudWatchの「PutMetricData」だけチェックを入れます。

policysetting

「ステートメントを追加」をクリックして「次のステップ」をクリックします。

addstatement

「ポリシーの作成」をそのままクリックします。
ポリシー名はデフォルトでも構いません。今回は分かりやすいものに変えました。

checkpolicy

IAM Roleの作成

既存インスタンスに適用する場合

既存インスタンスのRoleに関連付ける場合は、すでにアタッチされているRoleに先程作成したポリシーを追加するだけです。

注意点

既存インスタンスに適用する場合は、対象インスタンスにIAM Roleが既に適用されている場合に限ります。インスタンス作成時にIAM Roleを付けていない場合は、Role自体を後から付けることができません。
その場合はIAM Userで対応するしかありませんがセキュリティ的にオススメではありません。

手順

では実際に、既存インスタンスに適用する手順を見ていきます。

対象インスタンスにアタッチしているIAM Roleを選択して「アクセス許可」タブを開きます。ここで「ポリシーのアタッチ」をクリックします。

roleattach

次にフィルターで先程作成したポリシーを検索してチェックします。ポリシータイプのプルダウンから表示を絞り込んでもいいと思います。
この状態で「ポリシーのアタッチ」をクリックします。

attachpolicy

新規インスタンスに適用する場合

場合によって下記の2通りあると思います。

  • 先程作成したポリシーを、上記の手順で既存のIAM Roleに追加する方法
  • 新規にIAM Roleを作成する方法

既存のIAM Roleに追加する方法は先程の通りですので、ここでは新規にIAM Roleを作成する手順を紹介します。

IAMの画面で「新しいロールの作成」をクリックします。

makerole

ロール名を設定します。今回は「Collectd_PutMetricData」にしました。

rolename

「Amazon EC2」を選択します。

roletype

作成済みのポリシーを選択します。選択するときは先程と同様に検索窓でフィルタリングすると便利です。

rolecheck

そのまま「ロールの作成」をクリックします。

checkrole

これで専用のIAM Roleができましたので、下記のようにインスタンス作成時にこのRoleを指定してあげればOKです。

makeinstance

collectdのインストールと設定

次はインスタンス側の設定です。まずはcollectdをインストールします。
今回はAmazonLinuxを対象にしてみました。

AmazonLinuxにcollectdをインストールします。yumでインストール可能です。

sudo yum -y install collectd

今回はgitからソースを取ってきました。

git clone https://github.com/awslabs/collectd-cloudwatch.git

setup.pyを実行してインストールしていきます。

cd collectd-cloudwatch/src
sudo ./setup.py

設定をインタラクティブに聞いてくるので、適宜回答していきます。基本的にはデフォルトのままでよいかと思いますが、IAM Userを使っている場合など、必要に応じた選択をします。

Installing dependencies ... OK
Installing python dependencies ... OK
Downloading plugin ... OK
Extracting plugin ... OK
Moving to collectd plugins directory ... OK
Copying CloudWatch plugin include file ... OK

Choose AWS region for published metrics:
  1. Automatic [ap-northeast-1]
  2. Custom
Enter choice [1]:

Choose hostname for published metrics:
  1. EC2 instance id [i-xxxxxxxxxxxxxxxxx]
  2. Custom
Enter choice [1]:

Choose authentication method:
  1. IAM Role [Collectd_PutMetricData]
  2. IAM User
Enter choice [1]:

Choose how to install CloudWatch plugin in collectd:
  1. Do not modify existing collectd configuration
  2. Add plugin to the existing configuration
Enter choice [2]:
Plugin configuration written successfully.
Stopping collectd process ... NOT OK
Starting collectd process ... OK

この状態でcollectdが起動していますので、次にCloudWatchで表示させる項目を選択します。
次のファイルにある一覧は、「メトリクス対象だがCloudWatchでは表示されない項目のリスト」です。

cat /opt/collectd-plugins/cloudwatch/config/blocked_metrics
cpu-0-cpu-user
cpu-0-cpu-nice
cpu-0-cpu-system
cpu-0-cpu-idle
cpu-0-cpu-wait
cpu-0-cpu-interrupt
cpu-0-cpu-softirq
cpu-0-cpu-steal
interface-lo-if_octets-
interface-lo-if_packets-
interface-lo-if_errors-
interface-eth0-if_octets-
interface-eth0-if_packets-
interface-eth0-if_errors-
load--load-
memory--memory-used
memory--memory-buffered
memory--memory-cached
memory--memory-free

CloudWatchで表示させたいものは、次のホワイトリストのファイルで指定します。

cat /opt/collectd-plugins/cloudwatch/config/whitelist.conf

今回は、下記のようにCPU、ネットワークインタフェース、メモリ関連の全てを対象にしました。

cpu-0-cpu-.*
interface-eth0-.*
memory--memory-.*

設定を変更したのでcollectdを再起動します。

sudo service collectd restart

確認

しばらくするとCloudWatchで下記のようにグラフが表示されていればOKです。

graph

最後に

デフォルトの設定でCloudWatchにメトリクスを送ることができることが確認できました。
collectdは様々なリソース情報を収集することができるので、これで様々な情報を簡単にCloudWatchと連携できるようになりました。

是非ご活用ください。

以上です。