Zabbixはめんどくさいので、ひとまずMuninで少数のサーバのリソースを監視する方法。
##やりたいこと
とりあえずMuninで以下のことができれば良い。Muninはyumでインストールしたい。
- マシン(OS)の監視
- Apacheの監視
- MySQLの監視
- 何かあればメール送信
##参考
##前提
- CentOS6.x(6.8を利用)
- Apache(2.2)インストール済
- MySQL(5.6)インストール済
各サーバ類のインストールはこちらをどうぞ。
##Muninのインストール
Muninをyumでインストールするため、epelリポジトリを追加する。
Muninは
- munin(サーバ)
- munin-node(クライアント)
から構成されます。今回は、サーバ件、クライアントを1台のサーバにインストールし監視します。
###epelの追加
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
私はここで/etc/yum.repos.d/epel.repのenabled=1を0とて標準では無効化します。
###Muninのインストール
muninを入れるとmunin-clientもインストールされるようです。epelを有効化してインストールします。
yum install munin --enablerepo=epel
muninをインストールすると/etc/cron.d/muninが作成され、5分おきに実行されるようになるようです。必要に応じて間隔を調整します。実行されるファイルは/usr/bin/munin-cronです。
###Basic認証の設定
Muninをインストールすると/etc/httpd/conf.d/munin.confが生成され、そこにの設定が生成されます(httpd.conf自体は変更されません)。そこで、標準の認証としてBasic認証が設定されており、パスワードファイルとして/etc/munin/munin-htpasswdが指定されていますが、ファイル自体は生成されていないため、生成します。
/etc/httpd/conf.d/以下のファイルはapache実行時にhttpd.confと合わせて読み込まれます。これは、httpd.confの中でInclude conf.d/*.confとなっているためです。
htpasswd -c /etc/munin/munin-htpasswd admin
設定が完了したら、各サービス再起動(起動)させます。
apacheの再起動。
service httpd restart
munin-nodeの起動。
service munin-node start
munin-nodeの永続化。
chkconfig munin-node on
ここで、http://servername/munin/し、認証を終えると、おなじみの管理画面が登場します。
最初のcronが走るまでは、空のディレクトリか、Forbiddenが表示されます。少々待ちましょう(また無くてもcronが事項している/usr/bin/munin-cronを直接実行する方法もあります)。
##Apacheの監視
###プラグインの追加
標準的なプラグインは/usr/share/以下にあるので、/etc/munin/plugins/以下にコピーするかシンボリックリンクを張って有効化します。
ln -s /usr/share/munin/plugins/apache_accesses /etc/munin/plugins/apache_accesses
ln -s /usr/share/munin/plugins/apache_processes /etc/munin/plugins/apache_processes
ln -s /usr/share/munin/plugins/apache_volume /etc/munin/plugins/apache_volume
その他、より高度なプラグインについてはこちら等を参考に。
###httpd.confの編集
各種ステータスを取得できるように、/etc/httpd/conf/httpd.confの#ExtendedStatus Onをコメントインします。
ExtendedStatus On
###設定ファイルの追加
server-statusを利用するために/etc/httpd/conf.d/以下にstatus.confを作成し、以下の内容を記述します。
<IfModule mod_status.c>
ExtendedStatus On
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>
</IfModule>
###サービスの再起動
準備ができたら関連のサービスを再起動します。
service httpd restart
service munin-node restart
###動作の確認
muninからApacheの情報が取得できているか確認します。各プラグインの動作をmunin-runコマンドで確認します。
この時、Uと表示されると設定がうまくいっていません。うまく行っていると数値が表示されます。
munin-run apache_accesses
munin-run apache_processes
munin-run apache_volume
##MySQLの監視
続いてMySQLの監視を追加します。
###監視用のユーザーを作成
まずはMySQLにて専用のユーザーを作成します。
全ての権限を与えます。
>mysql grant all on *.* to 'munin'@'127.0.0.1' identified by 'password';
###プラグインの追加
必要なプラグインを追加します。
ln -s /usr/share/munin/plugins/mysql_bytes /etc/munin/plugins/
ln -s /usr/share/munin/plugins/mysql_queries /etc/munin/plugins/
ln -s /usr/share/munin/plugins/mysql_slowqueries /etc/munin/plugins/
ln -s /usr/share/munin/plugins/mysql_threads /etc/munin/plugins/
その他のプラグインについてはこちら等を参考に。
###アクセス情報の追加
/etc/munin/plugin-conf.d/munin-nodeを開き、以下の記述を追記します。
[mysql*]
env.mysqlopts -u munin -ppassword -h 127.0.0.1 --port=3306
###slow queryログの設定(5.5系)
my.cnfに以下を追加します。ここでは10秒以上のクエリをslow queryとして定義。
slow_query_log=1
slow_query_log_file=/var/log/mysql-slow.log
long_query_time=10
ログファイルの作成と権限の変更。
ログファイルをmysqlから操作できるよう権限を変更。
touch /var/log/mysql-slow.log
chown mysql:mysql /var/log/mysql-slow.log
###再起動
変更内容が反映されるよう関連サービスを再起動。
service mysqld restart
service munin-node restart
###動作確認
各プラグインをmunin-runコマンドでチェック。
munin-run mysql_bytes
munin-run mysql_queries
munin-run mysql_slowqueries
munin-run mysql_threads
###負荷をかけてみる
何もしなくても負荷がかかる環境ならいいのですが、そうでない場合は負荷をかけてみます。
###CPU
CPUに負荷をかけるにはstressツールを使います。Muninと同じepelでインストールるできるので、楽ちんです。
yum install stress --enablerepo=epel
例として1スレッドで1mのストレスをかけます。
stress -c 1 --timeout 1m
stressコマンドの詳細はこちらやこちらををどうぞ。CPUだけじゃなく、メモリ、IOなど、目的に応じて使い分けられます。
###Apache
Apacheの負荷はabコマンドを利用してみます。
100ユーザーが同時に10リクエストを行う。
ab -c 100 -n 1000 http://servername/
##メール送信
次に一定以上の負荷が発生した際にメールを送信するように設定してみます。
設定は/etc/munin/munin.confをいじります。
mailコマンドを利用するので、入っているかどうか確認します。CentOS minimalでは入っていませんでした。その場合はyum intall mailでインストール。
#ログ設定(logはcontact identifierなので任意の名前)
contact.log.command tee -a /var/log/munin/alert.log
#メール設定(mailはcontact identifierなので任意の名前)
#mailコマンドを実行しているだけなので、そもそもmailコマンドでメールが送信できるか事前に確認する。
contact.mail.command mail -s "Munin Alerts ${var:group}::${var:host}" to@test.com
contact.mail.always_send warning critical
#サーバ毎に閾値の設定
[localhost]
address 127.0.0.1
use_node_name yes
cpu.user.warning 10 #cpuのuserパラメータが10%を超えたらwarning
メールアドレスを複数設定したい場合は、,で区切ればいいようです。
設定は起動毎に呼び出されるので特に再起動等は必要ないようです。
##その他
###強制実行したい
基本、cronが実行しているスクリプトを実行すればいいのですが、muninユーザーじゃないと実行出来ないので、下記のようにします。
su - munin --shell=/usr/bin/munin-cron
###一度リセットしたい
/etc/munin/munin.confでdbdirとして指定されているフォルダ以下のファイルを削除。
rm -rf /var/lib/munin/*
htmlを一度消したい場合は、/var/www/html/munin以下を削除。次の実行で復活します。