MongoDBでゆるふわDB体験

第12回 MongoDBの監視

この記事を読むのに必要な時間:およそ 4 分

CUI以外の監視方法

RESTインターフェースからmongodの状態を表示

MongoDBのRESTインターフェースにブラウザでアクセスすることにより,mongostatと同じような情報を確認することもできます。MongoDBのRESTインターフェースは「⁠⁠MongoDBの起動ポート)+1000」番のポートで待ち受けていますので,ブラウザでそのポートにアクセスすると以下のような画面が表示できます。

図1 RESTインターフェースの画面

図1 RESTインターフェースの画面

また,⁠--rest」のオプションをつけることで,さらに豊富な情報をRESTインターフェースから取得することができます。

外部のモニタリングアプリケーションとの連携

MongoDBではNagiosMuninといった外部のモニタリングアプリケーションと連携できます。これらはどちらもオープンソースのプラグインを導入することで連携できます。

また,プラグインが開発されていない場合でも,serverStatusメソッドなどの出力をRESTインターフェースを通して自前のモニタリングアプリケーションに連携してやることにより,比較的簡単にプラグインを作ることができます。

さらに,有償版のMongoDB EnterpriseではSNMPプロトコルをサポートしており,SNMPを通してモニタリングアプリケーションと連携することも簡単にできます。

MMS(MongoDB Monitoring Service)

MongoDBの開発元である10gen社のサービスで,手元のMongoDBとインターネットにあるMMS(MongoDB Monitoring Service)を接続することにより,インターネットにあるMMSのWebページからMongoDBの監視をすることができます。詳しくは公式サイトをご参照ください。

監視すべき項目

では,今まで紹介した監視機能・ツールを用いて何を監視すべきかを簡単に解説したいと思います。これらはすべて一般論ですので,実運用をする場合は皆さんのシステムの特性を加味した上で監視項目を決めてください。

データ容量

最も基本的なことですが,データの量を監視し,ディスク溢れを未然に防ぐことが重要です。データ量を監視する場合は,db.stats()メソッドを用いてもよいですし,単純にOSのdfコマンドなどでもよいでしょう。注意点として,MongoDBでは格納するデータのサイズと実際にディスクを使用する容量には差があります。また,インデックスもそれなりにデータ容量がある場合があるので,忘れてはいけません。

メモリ使用量

MongoDBはデータファイルをメモリにのせますが,物理メモリにデータが乗り切りない場合,ディスクへのI/O(ページフォルト)が発生し性能劣化を引き起こします。そのため,MongoDBが利用するメモリ容量が物理メモリ量を上回らないように監視することが重要です。物理メモリ使用量の監視にはmongostatのresの部分や,serverStatus()のmem.residentの部分を見るのがよいでしょう。

トラフィック

MongoDBに対するクエリの数を常に監視することにより,性能劣化の原因が一時的な高負荷によるものなのか,そうではなく慢性的なリソース不足なのか判断することができます。トラフィックの監視ではqueryやinsertといったオペレーションの頻度,接続しているクライアントの数,およびネットワークの流量に注意しましよう。監視するには,mongotopやserverStatus()の出力結果を見るのがよいでしょう。

ロック時間

MongoDBは書き込み時の一貫性を保つためにデータをロックをしますが,ロックの時間が長いとその他のクエリがロックの解除を待つことになり,性能劣化を引き起こします。ロックにかかっている時間やロックを待っているクエリの数を監視することにより,性能劣化の原因がロック待ちかどうかを判断することができます。監視するのはserverStatus()のglobalLockを見るか,mongostatのlockedの値を見るのがよいでしょう。

スロウクエリ量

MongoDBでは,ある閾値以上に時間がかかったクエリをログファイルに記録します。性能要件に従って適切な閾値を設定することにより,性能要件を満たしていないクエリがどれだけあるか監視することができます。スロウクエリ監視をするには,ログファイルを監視します。

その他

最後に,MongoDBとは直接関係ありませんが,ディスクIOの性能を監視することも重要です。性能劣化の原因がMongoDBではなく,実はディスクが遅かったということもあります。監視するにはiostat等のOSのコマンドを利用しましょう。また,あまり問題になることはありませんが,CPU使用率も監視しておくとよいでしょう。

まとめと次回のテーマ

今回はMongoDBの監視機能の紹介と,それを用いてどのように監視すべきかを解説しました。この記事が,皆さんのMognoDBの障害軽減に役立てれば嬉しいです。

次回は,MongoDBの性能について紹介する予定です。お楽しみに!

著者プロフィール

藤崎祥見(ふじさきしょうけん)

野村総合研究所 OpenStandia所属。オープンソースのR&Dとセミナー講師を担当。

Debian,Ubuntu,Liferayのコミュニティで活動した後,MongoDBの翻訳に関わり,丸の内MongoDB勉強会を始める。

実家がお寺で,住職の資格を所持する坊主系エンジニア。

Twitter:@syokenz


渡部徹太郎(わたなべてつたろう)

野村総合研究所 OpenStandia所属。オープンソースを使ったSIやサポートの業務に従事。

藤崎と共同で丸の内MongoDB勉強会を始める。

趣味は自宅サーバ。好きなものはLinuxとRuby。

Twitter:@fetarodc


林田敦(はやしだあつし)

野村総合研究所 OpenStandia所属。オープンソースを使ったSIや製品開発業務に従事。

丸の内MongoDB勉強会では広報兼雑用係を務める。

趣味はレザークラフト,ダイビング,スキー,キャンプ,ジェットスキー,カメラ等々。作って滑って撮って潜れるエンジニア。

Facebook:Atsushi Hayashida