tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

monitでmongodb監視してみる

はじめに

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 running

Your 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