全てのEC2インスタンスを自動で監視するEC2Muninを作りました。

Amazon Web Servicesは使いたい時に使いたい分だけサーバを起動して使えるのでとても便利です。
便利なんですが、インスタンスを起動したり停止したりを繰り返していると、そのつど監視設定を書き換えるのが面倒です。Auto Scalingなどでインスタンスが自動起動するような設定をしている場合は、もはや管理できません。そこで、起動しているEC2インスタンスを全て自動でMuninの監視下に入れるスクリプトを作りました。

初めてgithubに置きました。

https://github.com/katty0324/ec2munin
まだあまり使い方が分かりませんが、いつもお世話になっているので、僕も何か置いてみようと思いました。

概要

EC2のインスタンスを見ながら動的に設定を書き換える類のものです。
起動しているEC2インスタンスに合わせて動的にNagiosの監視設定を書き換えるNagios::Object::EC2
https://github.com/takus/Nagios-Object-EC2
起動しているEC2インスタンスに合わせて動的に.ssh_configを書き換えるEC2SSH
https://github.com/mirakui/ec2ssh
これらとほとんど同じコンセプトです。対象がMuninというだけです。

インストール方法

sudo yum install -y php
sudo yum install -y git

PHPを使っているのでPHPをインストールしておきます。gitも入ってなかったのでインストールします。

git clone https://github.com/katty0324/ec2munin.git
cd ec2munin/
git submodule init
git submodule update

テキトーな場所にcloneします。サブモジュールとしてAWSのSDKが入っているので、それも落とします。これで必要なものは揃いました。

設定

設定は、config.inc.phpに書きます。

vim config.inc.php

AWSのキーを設定します。

CFCredentials::set(array(
	'development' => array(
		'key' => 'XXXXXXXXXXXXXX',
		'secret' => 'YYYYYYYYYYYYYYYYYYYYYYYYYY',
		'default_cache_config' => '',
		'certificate_authority' => false
	),
	'@default' => 'development'
));

基本的にはこれで設定は終わりです。

詳細な設定

必要があれば、muninの設定ファイルのパスを指定します。

$config_path = '/etc/munin/conf.d/ec2munin.conf';

muninの設定ファイル内でincludedirの行がコメントアウトされていたら、有効化します。

vim /etc/munin/munin.conf
includedir /etc/munin/conf.d

使わないリージョンがあれば、コメントアウトしてしまいます。コメントアウトしなくても問題ありませんが、無効化した分は処理が減ります。

$regions = array(
	AmazonEC2::REGION_US_E1,
	// AmazonEC2::REGION_US_W1,
	// AmazonEC2::REGION_US_W2,
	// AmazonEC2::REGION_EU_W1,
	// AmazonEC2::REGION_APAC_SE1,
	AmazonEC2::REGION_APAC_NE1,
	// AmazonEC2::REGION_US_GOV1,
	// AmazonEC2::REGION_SA_E1,
);

デフォルトでは、IPの指定はAWS内のプライベートIPで指定していますが、AWS外のサーバから監視する場合はPublic DNSを利用した設定にすることもできます。

$use_public_dns = true;

実行する

実行は、ec2muninを実行するだけです。ec2munin.confを書き換えられる権限で実行してください。

$ sudo ./ec2munin

下のような設定ファイルが保存されます。既に存在する場合は書き換えられます。

### EC2MUNIN BEGIN ###
[ec2.ap-northeast-1.amazonaws.com;ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com]
	address	10.150.xx.xx
	use_node_name	yes
[ec2.ap-northeast-1.amazonaws.com;ec2-yy-yy-yy-yy.ap-northeast-1.compute.amazonaws.com]
	address	10.160.yy.yy
	use_node_name	yes
[ec2.ap-northeast-1.amazonaws.com;ec2-zz-zz-zz-zz.ap-northeast-1.compute.amazonaws.com]
	address	10.163.zz.zz
	use_node_name	yes
### EC2MUNIN END ###

自動的に更新するようにする。

cronでec2muninを定期実行するようにするだけです。

sudo crontab -e
*/5 * * * * /home/username/ec2munin/ec2munin > /dev/null 2>&1

これで5分ごとにAWSに立ち上がっているインスタンスを問い合わせ、その全てをMuninが監視するようになります。もちろん、監視対象のサーバに、Muninノードがインストールされていて正しく設定されている場合に限ります。

ちゃんと出ました。放っておけば、Auto Scalingなどに合わせて監視対象が増えたり減ったりします。

メモ

先にMuninの設定をしておかないと動きません。MuninのインストールMuninの監視対象を追加する。も参考にしてください。
今はホスト名で一覧表示させていますが、設定でNameタグで一覧にするようにしたり、AMIでグループ分けするなどもできたら良いな、とは思います。

コメント

  1. […] 全てのEC2インスタンスを自動で監視するEC2Muninを作りました。 […]

  2. […] ようするに「全てのEC2インスタンスを自動で監視するEC2Muninを作りました。」のNagios版です。 […]

  3. […] 全てのEC2インスタンスを自動で監視するEC2Muninを作りました。 […]

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