はじめに
monitもmongoも導入してからだいぶ経ってますが、
自分用アウトプットとしてメモっておきたいので
mongodbの監視をちょろっとmonitでやってみるメモです
ながれ
てことでさっそく
1.インストールとか
2.基本設定
3.mongodb用の設定&テスト(mongodb落ちたら自動起動)
4.ディスク使用率用の設定&テスト(容量がやばかったらalert)
5.その他確認(statusとかsummaryとか)
6.その他参考
ちなみにmongodbとmonitのインストールなんかは↓でやった感じのを使ってます
・mongodb…mongodb入れてみるテスト
・monit…monitでtd-agentを監視してdaemontoolsぽく自動起動してみる
1.インストールとか
インストールはこちら。ということではしょります。
2.基本設定
monit自身の設定ファイルとして/etc/monit.confを編集します
また、デフォルトでは/root直下に出来てしまうidファイルとstateファイルの置き場所も作って指定します
メールなんかの設定はお好きに。
※monitのidファイルとstateファイルを置く場所作る # sudo mkdir /var/monit # sudo vi /etc/monit.conf ----vi 編集---- # 監視間隔 set daemon 10 # ログファイル set logfile /var/log/monit.log # idファイル set idfile /var/monit/.monit.id # stateファイル set statefile /var/monit/.monit.state # SMTP サーバ set mailserver localhost # アラート送信元アドレス+α set mail-format { from: hoge@hoge.com subject: monit alert -- $EVENT $SERVICE message: $EVENT Service $SERVICE Date: $DATE Action: $ACTION Host: $HOST Description: $DESCRIPTION Your faithful employee, Monit } # アラート送信先アドレス set alert hoge@hoge.com # 個別の設定ファイル置き場 include /etc/monit.d/*
3.mongodb用の設定&テスト(mongodb落ちたら自動起動)
設定
mongoの起動を/etc/init.d/mongodで行っていないのでstop programはpkillを使ってみます
pkillについてはこちら
→pgrep、pkill使ってプロセス名からのkillするテスト
# sudo vi /etc/monit.d/mongod.conf ----vi追記---- check process mongod with pidfile /usr/local/mongodb/data/db/mongod.lock group mongod start program = "/usr/local/mongodb/bin/mongod --fork --logpath /usr/local/mongodb/logs/mongodb.log --logappend --dbpath /usr/local/mongodb/data/db" stop program = "/usr/bin/pkill -f mongod" if failed host localhost port 27017 type TCP with timeout 15 seconds then restart -------------- ※再起動 # sudo /etc/init.d/monit restart
テスト(mongodb落ちたら自動起動)
設定してmonitを起動したらmongoを落として挙動を確認してみます
落とす
# sudo pkill -f mongod
monitのログ見てみる
# tail -f /var/log/monit [JST Mar 27 18:25:57] error : monit: Error reading pid from file '/usr/local/mongodb/data/db/mongod.lock' [JST Mar 27 18:25:57] error : 'mongod' process is not running [JST Mar 27 18:25:57] info : 'mongod' trying to restart [JST Mar 27 18:25:57] info : 'mongod' start: /usr/local/mongodb/bin/mongod [JST Mar 27 18:26:58] info : 'mongod' process is running with pid 34166
無事起動されたようです
メールはこんな感じ
[subject]
monit alert -- Does not exist mongod
[to]
hoge@hoge.com
[from]
hoge@hoge.com
[body]
Does not exist Service mongod
Date: Thu, 27 Mar 2014 18:25:57 +0900
Action: restart
Host: hoge.co.jp
Description: process is not runningYour faithful employee,
Monit
4.ディスク使用率用の設定&テスト(容量がやばかったらalert)
設定
mongodbの直接監視ではないですがmongodbが容量を結構食うことを考えて
「ディスク使用率」を監視してみます
# sudo vi /etc/monit.d/datafs.conf ----vi追記---- check device datafs with path /dev/sda3 if space usage > 23% for 2 cycles then alert -------------- ※再起動 # sudo /etc/init.d/monit restart
このspaceが何の値を計算したものかは後述で補足しますが
この時の使用率がすでに22.3%だったのですぐ超えそうなしきい値にしてみました
テスト(容量がやばかったらalert)
こちらで作ったスクリプトでmongodbに何百万件かドキュメントをつっこんで23%超えるようにしてみます
→mongodbで行動ログ的なサンプルデータを1億件ほどつっこんで見るスクリプト
# mongo sample insert_act_log_sample.js
結構つっこんだころでmonitログ見てみる
[JST Mar 27 19:24:26] error : 'datafs' space usage 23.3% matches resource limit [space usage>23.0%] [JST Mar 27 19:25:26] error : 'datafs' space usage 23.3% matches resource limit [space usage>23.0%]
メール
[subject]
monit alert -- Resource limit matched datafs
[to]
hoge@hoge.com
[from]
hoge@hoge.com
[body]
Resource limit matched Service datafs
Date: Thu, 27 Mar 2014 19:25:26 +0900
Action: alert
Host: hoge.co.jp
Description: space usage 23.3% matches resource limit [space usage>23.0%]Your faithful employee,
Monit
メールは何度も来ませんが
logファイルにはずっとエラーが書き込まれ続けるので終わったらしきい値は上げておきましょう
補足(space usage > 23%)について
補足の補足でアレですが、後述する「monit status」を使うと
各監視対象のstatusが見れます。
# sudo /usr/bin/monit status Filesystem 'datafs' status Resource limit matched monitoring status monitored permission 660 uid 0 gid 0 filesystem flags 0x1000 block size 4096 B blocks total 140562284 [549071.4 MB] blocks free for non superuser 109164471 [426423.7 MB] [77.7%] blocks free total 116304618 [454314.9 MB] [82.7%] inodes total 35700736 inodes free 34778833 [97.4%] data collected Thu Mar 27 19:07:28 2014
このときの「blocks total」「blocks free for non superuser」で計算される空きのことになります
('blocks total' - 'blocks free for non superuser' ) / 'blocks total'
= (140562284 - 109167629) / 140562284
= 0.22335049
= 22.3%
5.その他確認(statusとかsummaryとか)
monitを通して監視対象のstatusとかsummaryが見れます
status
# sudo /usr/bin/monit status The Monit daemon 5.1.1 uptime: 7m Process 'td-agent' status running monitoring status monitored pid 24737 parent pid 1 uptime 43m children 1 memory kilobytes 19124 memory kilobytes total 165584 memory percent 0.1% memory percent total 1.3% cpu percent 0.0% cpu percent total 0.0% data collected Thu Mar 27 18:08:57 2014 Process 'mongod' status running monitoring status monitored pid 23837 parent pid 1 uptime 47m children 0 memory kilobytes 34480 memory kilobytes total 34480 memory percent 0.2% memory percent total 0.2% cpu percent 0.0% cpu percent total 0.0% port response time 0.000s to localhost:27017 [DEFAULT via TCP] data collected Thu Mar 27 18:08:57 2014 Filesystem 'datafs' status Resource limit matched monitoring status monitored permission 660 uid 0 gid 0 filesystem flags 0x1000 block size 4096 B blocks total 140562284 [549071.4 MB] blocks free for non superuser 109167629 [426436.1 MB] [77.7%] blocks free total 116307776 [454327.2 MB] [82.7%] inodes total 35700736 inodes free 34778849 [97.4%] data collected Thu Mar 27 18:48:28 2014 System 'hoge.co.jp' status running monitoring status monitored load average [0.00] [0.00] [0.00] cpu 0.1%us 0.1%sy 0.0%wa memory usage 2631432 kB [21.6%] data collected Thu Mar 27 18:08:57 2014
summary
# sudo /usr/bin/monit summary The Monit daemon 5.1.1 uptime: 11m Process 'td-agent' running Process 'mongod' running Filesystem 'datafs' Resource limit matched System 'hoge.co.jp' running
こちらにもっと詳しいこと載ってます
→サービス監視ソフトウェア『Monit』
エラーになる場合
おもむろに叩いてこんなエラーが出る場合は/etc/monit.confを修正するといけるようです
# sudo /usr/bin/monit status monit: error connecting to the monit daemon
修正
# vi /etc/monit.conf ---- vi編集 ---- ※コメントアウトされてる場合はコメントはずすだけ set httpd port 2812 and allow localhost ----------------
こちらを参考にさせていただきました
→monit: error connecting to the monit daemon
6.その他参考
- Monitを使ってApacheを監視する(3)もっと細かいチェックを設定する
- Monit で pidfile が存在しないプロセスを監視する
- monitで落ちたら困るデーモンを監視する
- monitrcの設定項目
ってことでとりあえずココまで☆