ある程度サービスを運用していくにあたって、サーバのリソースの把握/監視ができると システムのチューニングやサーバの増強のタイミングを把握する事が可能になります。
リソース監視ツールは多々ありますが、ここではPerl製のリソース監視ツール CloudForecastを使って進めていきます。
最低限、system perlに必要なライブラリをインストールしておきます。
(以下、CentOS6での例)
$ yum install -y net-snmp net-snmp-utils net-snmp-devel net-snmp-perl rrdtool-perl perl-core perl-CGI
cloudforecastのソースをgithubから取得します。
$ git clone https://github.com/kazeburo/cloudforecast.git
cd cloudforecast
CloudForecastの追加モジュールインストールを局所的に行うため、cpanmをインストールします
$ wget --no-check-certificate http://cpanmin.us
chmod +x ./cpanm
CloudForecast依存モジュールではありませんが、有ると便利なモジュールを入れておきます。
$ ./cpanm -n -l extlib JSON::XS Proclet File::RotateLogs
CloudForecastの依存モジュールをインストールします。
$ ./cpanm -n -l extlib --installdeps .
データ保存ディレクトリ、ログ保存ディレクトリを作成します。
$ mkdir -p data logs
設定ファイルをrenameして、サーバ環境に合わせ書き換えます。
$ mv cloudforecast_sample.yaml cloudforecast.yaml
mv server_list_sample.yaml server_list.yaml
cloudforecast.yamlは全体の設定、server_list.yamlは監視対象のサーバの設定です。
myfinderさんのはてなブログ
UCD-DISKIO-MIB::diskIOTable とかを取りたいのに UCD-SNMP-MIB::ucdExperimental と出てしまい取れなくて生きるのがつらいとき
http://myfinder.hatenablog.com/entry/2013/05/19/160608
net-snmpをソースからビルド
$ wget http://sourceforge.net/projects/net-snmp/files/net-snmp/5.7.2/net-snmp-5.7.2.tar.gz/download
ビルドオプション
$ ./configure --with-perl-modules --with-mib-modules="ucd-snmp/diskio" --with-default-snmp-version="3" --with-sys-contact="@localdomain" --with-sys-location="Unknown" --with-logfile="/var/log/snmpd.log" --with-persistent-directory="/var/net-snmp"
SNMPとは、DARPAモデルに準じたIP ネットワーク上のネットワーク機器を監視(モニタリング)・制御するための情報の通信方法を定めるプロトコルです。(Wikipedia抜粋)
Cloudforecastは、基本的な部分は、SNMPを経由して監視対象の状態を取得しています。 その為、Cloudforecast側(マネージャ)と、監視対象側(エージェント)にSNMPの設定を正しく行う必要があります。
ここでは、CloudForecastをインストールしたマネージャ兼エージェント(自分を監視)として設定してみます。
SNMPのconfファイルを書き換えます。
/etc/snmp/snmpd.conf
com2sec local localhost public
group local_grp v2c local
view all included .1 80
access local_grp "" any noauth exact all none none
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root(configure /etc/snmp/snmp.local.conf)
dontLogTCPWrappersConnects yes
disk / 10000
デフォルトのsnmpd.confはコメントも多く見づらいので、こんな感じに最小限に書き換えてしまいます。
(要つっこみ!!)
SNMPDを再起動します。
$ service snmpd restart
snmpwalkを使用して、データが取得できるか確認してみます。
$ snmpwalk -c public -v 2c localhost
ずらーっとデータが表示されれば大体成功です
CloudForecastはシンプルな構成で、データ取得用巡回デーモンと、グラフ閲覧HTTPDを2つ走らせる必要があります。
データ取得用巡回デーモンの起動
$ CF_DEBUG=1 ./cloudforecast_radar -c cloudforecast.yaml -l server_list.yaml
グラフ閲覧HTTPDの起動
$ CF_DEBUG=1 ./cloudforecast_web -p 5000 -c cloudforecast.yaml -l server_list.yaml
CF_DEBUG=1 を付けると、詳細なデバッグログで表示されます。 必要に付き、付けてみると便利です。
巡回デーモンは、起動後5分感覚で監視対象エージェントにデータを取得しにいきます。 グラフ閲覧HTTPDをポート5000番で起ち上げていますので、ブラウザからCloudForecastにアクセスできるようになっています。 グラフデータが表示されるようになるまで しばらく待ってみましょう。
CloudForecastでは、死活監視を行い、監視対象がダウンした時に通知するという機能は今のところ無いようです。 そこで、ここではPerl製のシンプルな死活監視用ツール App::MadEyeを使い、簡単に死活監視を行ってみます。
Amazon CloudWatchを使う