ようへいの日々精進XP

よかろうもん

CloudWatch collectd plugin メモ(EC2 以外の環境からメトリクスを飛ばす)

全国 5000 万人の収集癖の皆さん、こんばんわ。かっぱです。

tl;dr

collectd というサーバー上の各種メトリクスを収集するオープンソースツールのプラグインとして CloudWatch Plugin が awslab よりリリースされたようなので触ってみたいと思う。せっかくなので EC2 ではなく、手元の Vagrant 環境で動いている Ubuntu で動かしてみたい。

memo

試した環境

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.4 LTS"

IAM ユーザーの作成

マネジメントコンソールより IAM ユーザーを作成。以下のようなポリシーを付与。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "cloudwatch:PutMetricData"
      ],
      "Effect": "Allow",
      "Resource": [
        "*"
      ]
    }
  ]
}

アクセスキーとシークレットアクセスキーを控えておく。

collectd をインストール

sudo apt-get update
sudo apt-get install collectd

CloudWatch Plugin のセットアップ

wget https://raw.githubusercontent.com/awslabs/collectd-cloudwatch/master/src/setup.py
chmod +x setup.py
sudo ./setup.py

セットアップウィザードを以下のように進めた。

vagrant@vagrant-ubuntu-trusty-64:~$ sudo ./setup.py

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

AWS region could not be automatically detected. Cause:Cannot access metadata service. Cause: HTTPConnectionPool(host='169.254.169.254', port=80): Max retries exceeded with url: /latest/meta-data/placement/availability-zone/ (Caused by ReadTimeoutError("HTTPConnectionPool(host='169.254.169.254', port=80): Read timed out. (read timeout=0.5)",))
Enter one of the available regions from: http://docs.aws.amazon.com/general/latest/gr/rande.html#cw_region
Enter region: ap-northeast-1

EC2 instance id could not be automatically detected.
Enter hostname [vagrant-ubuntu-trusty-64]:

IAM Role could not be automatically detected.
Enter absolute path to AWS credentials file [/home/vagrant/.aws/credentials]:
Enter access key: AKxxxxxxxxxxxxxxxx
Enter secret key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

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.
Credentials configuration written successfully.
Stopping collectd process ... OK
Starting collectd process ... OK

CloudWatch に飛ばしたいメトリクスを whitelist.conf に設定

$ cat /opt/collectd-plugins/cloudwatch/config/whitelist.conf
memory--memory-.*

ちなみに、blocked_metrics というファイルに自動的に収集されるメトリクスのリストが記載されていて、その中から CloudWatch に飛ばしたいメトリクスのみを whitelist.conf に転記するようだ。(全部飛ばしたらコスト的にも大変だと思う)

collectd を再起動

sudo service collectd restart

暫くすると...

f:id:inokara:20161008150024p:plain

カスタムメトリクスに登録された。おお。

最後に

カスタムメトリクスのコスト

CloudWatch にカスタムメトリックを飛ばしたい

  • と思った時に収集部分だけを実装すればいいことになる
  • collectd が収集するメトリクスは collectd-web のような Web インタフェースで見つつ、アラームを飛ばしたいメトリクスだけ CloudWatch に飛ばすというのもありかなーと思った

一応

  • EC2 以外でも使えるので、マルチクラウド環境の監視を一時的にでも CloudWatch に寄せたいようなニーズがあれば検討出来るかもしれない