はじめに
前回からMongoDBの非機能面に着目していますが、
コマンド表記について
$ : コマンドラインで実行するコマンド監視機能の紹介
ロギング
最初に監視の基本ともいえる、
$ mongod --logpath=/var/log/mongodb.log
このままだと、
$ mongod --logpath=/var/log/mongodb.log --logappend
ログのレベルは、
$ mongod --verbose ←ログ出力を多くする $ mongod -vvvvv ←ログ出力を最大限 $ mongod --quiet ←ログ出力を最小限
リアルタイム監視コマンド
続いて、
コレクションの処理時間順に表示(mongotopコマンド)
mongotopコマンドはtopコマンドのようなコマンドであり、
$ mongotop
ns total read write 2013-04-17T16:11:44
sample-db.collection01 13ms 1ms 12ms ←★
sample-db.collection02 11ms 0ms 11ms
admin.system.indexes 0ms 0ms 0ms
ns total read write 2013-04-17T16:11:45
sample-db.collection01 16ms 2ms 14ms
sample-db.collection02 11ms 5ms 11ms
admin.system.indexes 0ms 0ms 0ms
(略)
上記の出力結果からは、
MongoDB全体の状態を表示(mongostatコマンド)
mongostatコマンドはvmstatのようなコマンドであり、
$ mongostat insert query update delete getmore command flushes mapped vsize res faults locked db idx miss % qr|qw ar|aw netIn netOut conn time *0 *0 *0 *0 0 2|0 0 2.11g 4.51g 946m 0 test:0.0% 0 0|0 0|0 120b 3k 1 01:19:24 86 *0 *0 *0 0 130|0 0 2.11g 4.51g 974m 132 sample-db:1.8% 0 0|0 0|0 14m 13k 2 01:19:25 121 *0 *0 *0 0 181|0 0 2.11g 4.51g 994m 181 .:3.2% 0 0|0 0|1 20m 16k 2 01:19:26 117 *0 *0 *0 0 178|0 0 2.11g 4.51g 1.01g 175 .:3.1% 0 0|0 0|0 20m 16k 2 01:19:27
上記出力では途中から挿入
統計情報表示メソッド
次に統計情報表示メソッドの説明をします。Mongoシェルでアクセスし、
MongoDB全体の統計情報(serverStatus()メソッド)
データベースオブジェクトのserverStatus()メソッドを用いることで、
> db.serverStatus() { "host" : "mongodb.localdomain", "version" : "2.4.1", "process" : "mongod", "pid" : 1537, "mem" : { "bits" : 64, "resident" : 725, ←物理メモリ使用量 "virtual" : 2568, ←仮想メモリ使用量 "supported" : true, "mapped" : 1136, "mappedWithJournal" : 2272 }
上記の出力結果から、
データベースの統計情報(データベースのstats()メソッド)
データベースオブジェクトのstats()メソッドを用いることで、
> db.stats() { "db" : "sample-db", "collections" : 3, ←コレクション数 "dataSize" : 1447258292, ←データサイズ "indexSize" : 408800, (略) }
上記の出力結果から、
コレクションの統計情報(コレクションのstats()メソッド)
データベースのstats()コマンドと同様に、
> db.(コレクション名).stats() { "ns" : "sample-db.collection01", "count" : 8031, "size" : 1447258112, "totalIndexSize" : 408800, (略) }
実行中のクエリの情報取得(currentOp()メソッド)
currentOp()メソッドは、
> db.currentOp();
{
"inprog" : [
{
"opid" : 22991,
"op" : "insert",
"ns" : "sample-db.test",
"lockStats" : {
"timeLockedMicros" : {
"r" : NumberLong(0),
"w" : NumberLong(138) ←書き込みロックが138ms
},
(略)
上記の出力結果では、
詳細な使い方
この章で紹介したコマンドやメソッドの詳細な使い方は、
CUI以外の監視方法
RESTインターフェースからmongodの状態を表示
MongoDBのRESTインターフェースにブラウザでアクセスすることにより、

また、
外部のモニタリングアプリケーションとの連携
MongoDBではNagiosやMuninといった外部のモニタリングアプリケーションと連携できます。これらはどちらもオープンソースのプラグインを導入することで連携できます。
また、
さらに、
MMS(MongoDB Monitoring Service)
MongoDBの開発元である10gen社のサービスで、
監視すべき項目
では、
データ容量
最も基本的なことですが、
メモリ使用量
MongoDBはデータファイルをメモリにのせますが、
トラフィック
MongoDBに対するクエリの数を常に監視することにより、
ロック時間
MongoDBは書き込み時の一貫性を保つためにデータをロックをしますが、
スロウクエリ量
MongoDBでは、
その他
最後に、
まとめと次回のテーマ
今回はMongoDBの監視機能の紹介と、
次回は、