すべてのEC2インスタンスを自動でNagiosの監視下に追加するEC2Nagiosを作りました。

Amazon EC2でインスタンスを立ち上げたり落としたりするたびにNagiosの監視設定を書き換えるのは面倒です。Autoscalingなどを用いて、自動でインスタンスの起動・停止を繰り返している場合はなおさらです。

そこで、EC2インスタンスにつけられたタグを見て、自動でNagiosの監視下に追加するスクリプトを書きました。

スクリーンショット 2014-03-06 0.40.36

katty0324/ec2nagios

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

EC2インスタンスにタグ付けをする

使い方としては、まずはEC2インスタンスにタグ付けをします。Amazon Management Consoleからペタペタと貼っていきます。keyにはEC2Nagiosを指定します。

このキーを元に監視設定を管理するので、同じ監視設定を適用したいものには同じキーを指定しておきます。

EC2Nagiosのインストール

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

PHPを使っているのでPHPをインストールしておきます。githubからダウンロードするため、gitもインストールします。

cd /etc/
sudo git clone http://github.com/katty0324/ec2nagios.git
cd ec2nagios/
sudo git submodule init
sudo git submodule update

githubからクローンして、サブモジュールのAWS SDKもダウンロードします。

設定ファイルの記述

設定は、config.inc.phpを書き換えます。

sudo vim config.inc.php

AWSのkeyとsecretだけは書き換えてください。その他、Nagiosのパスなどが環境によって異なると思いますので、適宜設定する必要があります。

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

EC2Nagiosの実行

あとは、ec2nagiosを実行するだけです。

sudo ./ec2nagios
sudo /etc/init.d/nagios reload

EC2Nagiosのタグ付けがされたインスタンスを探索し、ホストグループの設定を行い、Nagiosの監視下に追加します。

詳細な監視設定をする

ec2nagiosが何をしているかといえば、まずNagiosの設定ファイルに、ホストの設定とホストグループの設定を追加し、各ホストグループの監視内容のテンプレートを生成します。

less /etc/nagios/nagios.cfg

nagios.cfgには以下のような設定を追加します。

### EC2NAGIOS BEGIN ###
cfg_file=/etc/nagios/objects/ec2nagios.cfg
cfg_file=/etc/nagios/objects/jenkins.cfg
cfg_file=/etc/nagios/objects/redis.cfg
cfg_file=/etc/nagios/objects/web.cfg
### EC2NAGIOS END ###

ec2nagios.cfg以外の各設定ファイルは、EC2インスタンスに付けられたタグを元に生成します。

less /etc/nagios/objects/jenkins.cfg
# You can edit following lines for "jenkins" hostgroup
 
define service{
        use                     local-service
        hostgroup_name          jenkins
        service_description     PING
        check_command           check_ping!100.0,20%!500.0,60%
        }

各々の設定ファイルはテンプレートとして、とりあえずPINGのチェックを入れてあります。これらのファイルを自由に書き換えることで、より詳細な監視設定をおこなうことができます。

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

cronでec2nagiosを定期実行するようにすれば、EC2インスタンスの増減やタグの変更に対して追従できるようになると思います。

sudo crontab -e
*/5 * * * * /etc/ec2nagios/ec2nagios && /etc/init.d/nagios reload > /dev/null 2>&1

おわりに

先にNagiosの設定をしておかないと動きません。「Nagiosのインストール」も参考にしてください。

(もし使えると思われた場合は、びくびくしながら試してみてください・・・。)

言い訳

このEC2Nagiosを作ったのは実は1年ほど前で、このブログ自体もその時に書いていました。

しかし、ライブラリに1つだけ問題があって、それを直してから公開しようと思っていたら1年が経ってしまいました。このままだともう1年経っても公開されなそうなので、あきらめて公開してしまうことにしました。

問題というのは、たとえばmysqlというタグをEC2インスタンスにつけると、mysql.cfgという設定ファイルが生成されるのですが、mysqlタグのついているインスタンスがなくなるとmysql.cfgが宙に浮いてしまい設定エラーとなってしまうのです。その場合は、mysqlタグのついているインスタンスはないわけなので、mysql.cfgを削除していただければ使えます。

そういうわけで、ブログ公開したばかりにも関わらず、このツールは少し古く、プログラムも少し改善の余地があります。

そういえば、EC2Nagiosより後に作ったEC2Deployというツールの方が先に公開されたりもしました。それについては、「ELB配下のWEBサーバに無停止でデプロイするEC2Deployを作りました。」をご覧ください。

About katty0324

One comment

Leave a Reply

Scroll To Top