Diagnostic Tools
運用中はZabbixなどでリソース監視は行っているけど
バッチ動かしたり、急な高負荷状態になる場合などに
Mongodの状態を確認するためのツールがあるのでそれを使うと便利
よく使ってるツールはこのふたつ
- mongostat
- mongotop
mongostat
mongod/mongosのステータスを表示してくれる
__--discover__オプションをつけるとレプリカセット・シャードクラスタの
全てのインスタンスの状態を表示してくれるので
運用中はいつもこれをつけて監視してる
実行してみる
$mongostat --discover | grep -E '.*PRI.*|*$'
insert query update delete getmore command flushes mapped vsize res faults qr|qw ar|aw netIn netOut conn set repl time
localhost:27017 *0 1 *0 *0 0 4|0 0 191.0M 43.0M 0 0|0 0|0 338b 19k 41 RTR 11:23:50
set01/mongod71:27018 *0 *0 *0 *0 0 12|0 0.0 3.4 0 2.2G 1.7G n/a 0|0 1|0 920b 95k 25 set01 PRI 11:23:50
set02/mongod81:27018 *0 *0 *0 *0 0 12|0 0.0 12.5 0 6.0G 5.4G n/a 0|0 1|0 1k 95k 24 set02 PRI 11:23:50
mongod71:27018 *0 *0 *0 *0 0 8|0 0.0 3.4 0 2.2G 1.7G n/a 0|0 1|0 696b 94k 25 set01 PRI 11:23:50
mongod72:27018 *0 *0 *0 *0 0 4|0 0.0 28.0 0 12.7G 12.2G n/a 0|0 1|0 405b 47k 10 set01 SEC 11:23:50
mongod81:27018 *0 *0 *0 *0 0 8|0 0.0 12.5 0 6.0G 5.4G n/a 0|0 1|0 810b 94k 24 set02 PRI 11:23:50
mongod82:27018 *0 *0 *0 *0 0 5|0 0.0 65.1 0 28.2G 27.7G n/a 0|0 1|0 459b 47k 12 set02 SEC 11:23:50
パイプでgrepに渡してプライマリーの行を赤色にしている。
ちなみにシャード2つの各々レプリカセット組んでるクラスタです
気にするポイント
運用中に一番気にしているのは insert/query/update などの発行数はもちろんなのだが qr|qw の数値
運用中高負荷になったり、クソクエリーで、mongoをいじめた場合 に発生しうる
この数値が上がると クエリのタイムアウト、同期遅延 もう様々な障害が発生しうるので
メンテに入れる一つの指標にしてます。
mongotop
コレクション毎に操作に利用した時間が表示される
mongostatでは操作時間がかかっているかわからないので併用して使うとかなり分析に役だつ
実行してみる
$ mongotop --host mongod71 --port 27018
ns total read write 2014-12-19T15:32:01-05:00
admin.system.roles 0ms 0ms 0ms
admin.system.version 0ms 0ms 0ms
local.me 0ms 0ms 0ms
local.oplog.rs 0ms 0ms 0ms
local.replset.minvalid 0ms 0ms 0ms
local.startup_log 0ms 0ms 0ms
local.system.indexes 0ms 0ms 0ms
local.system.namespaces 0ms 0ms 0ms
local.system.replset 0ms 0ms 0ms
気にするポイント
高負荷時にどれだけ多くread,writeされているが見れるので、
素直に上から順にアプリーションのクエリ発行を見直してあげるといい
クソクエリ発行している場合は確実にこのtopコマンドで上位に来ているのでそれは修正する
スロークエリのログに出ないけどreadの件数が多すぎるものなんかも上位に出てくるので
修正できないか確認してみる
まとめ
あくまで補助ツールなのでこれを使ったから運用が楽になるとかはないけど
パッとDBのステータスを確認するには非常に便利
日頃からクエリの本数や状態をみて知見を貯めておかないと
今日の状態の良し悪し判断ができないので
こういったステータス系は日頃から監視しておきましょう