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でグループ分けするなどもできたら良いな、とは思います。
コメント
[…] 全てのEC2インスタンスを自動で監視するEC2Muninを作りました。 […]
[…] ようするに「全てのEC2インスタンスを自動で監視するEC2Muninを作りました。」のNagios版です。 […]
[…] 全てのEC2インスタンスを自動で監視するEC2Muninを作りました。 […]