SlideShare a Scribd company logo
Monitoring MongoDB
MongoDBの監視
2013/5/22
丸の内MongoDB勉強会
野村総合研究所 渡部
自己紹介
名前:渡部 徹太郎 @fetaro ブログ
所属:野村総合研究所 OpenStandiaチーム
学生:東工大で情報検索の研究(@日本データベース学会)
仕事:昔:大手証券会社のオントレシステムのWeb基盤
今:オープンソース全般のサポート/コンサル
特技:サーバ基盤、Linux、KVM、ruby、MongoDB(?)
エディタ:emacs派
趣味:自宅サーバ
MongoDB関連:
• 2年前に、友人の結婚式用のアプリを作った時���利用
• この勉強会(丸の内MongoDB勉強会)の主催者の一人
• 技評で記事連載中「MongoDBでゆるふわDB体験」
はじめに
• 私はMongoDBをしっかり監視したことはあ
りません!
• ただ、これから運用するお仕事が舞い込んで
きます!
• とりあえず、本やWebからいろいろ知識をか
き集めて考えてみました
• 間違ってたらツッコんでください!
アジェンダ
• 何を監視するのか?
• どうやって監視するか?
• 監視コマンド・メソッドで監視
• 運用監視ツールで監視
• MMS ( MongoDB Monitoring Service )で監視
アジェンダ
• 何を監視するのか?
• どうやって監視するか?
• 監視コマンド・メソッドで監視
• 運用監視ツールで監視
• MMS ( MongoDB Monitoring Service )で監視
何を監視するか?
なぜ監視するか?
→MongoDBの障害を未然に防ぎたいから
では、MongoDBの障害とは?
何を監視するか?
真剣にMongoDBの障害について考えてみた
MongoDBの障
害
使えない
動かない
ディスク容量の枯渇
設定ミス、バグによるハング
接続でき
ない
ネットワークリソースの枯渇
遅い
計算が遅
い
性能処理
不足
CPUの性能不足
処理が非
効率
インデックスがうまく使われてい
ない
コレクションが肥大して再配置が
多発
待ちが多
い
内部起因 ロック解放待ちが多い
外部起因
ディスクIO待ち
メモリにデータが載っていない
ディスクが遅い
syncが多発ネットワークIO待ち
アジェンダ
• 何を監視するのか?
• どうやって監視するか?
• 監視コマンド・メソッドで監視
• 運用監視ツールで監視
• MMS ( MongoDB Monitoring Service )で監視
どうやって監視するか?
監視コマンド・メソッドで監視
$ mongostat MongoDB全体の状態をリアルタイムに表示
一番便利。とりあえず何か起きたらこれを打つ。
$ mongotop コレクションの処理時間順にリアルタイムに表示
負荷が集中している箇所を探すのによい。
> db. serverStatus() MongoDB全体の統計情報をjsonで表示。
圧倒的な情報量。監視スクリプトに食わせるとよい。
> db.stats() あるデータベースに対する統計情報jsonで表示。
> db.(コレクション
名).stats()
あるコレクションに対する統計情報jsonで表示。
PaddingFactorを見たい場合に。
> cursor.explain()
例) db.col.find.explain()
Findした際の実行計画を表示。Indexが効いているか見た
い場合に。
> db.currentOp() 現在稼働中のオペレー��ョンが見れる。クエリが長い場合
に。
$ mongosniff オペレーションが全部見える。最終手段。
何をどうやって監視するか?
想定する障害 Pri 監視方法 監視内容
インデックスがうまく使わ
れていない
高 mongostatのidx miss%
corsor.explain()
インデックスはメモリに乗っているか
インデックスは使われているか
ロック解放待ちが多い 高 mongostatのLocked% ロック時間が稼働時間に対して大きく
なっていないか
メモリにデータが載ってい
ない
高 mongostatのresや
faults
データ量が物理メモリを超えてページ
フォルトが発生していないか
ディスクが遅い 高 OSコマンド(iostatな
ど)
ディスクの処理時間は遅くないか
Syncが多発 中 mongostatのflushes Syncが多発していないか
コレクションが肥大して再
配置が多発
中 コレクション
stats.paddingFactor
Padding_factorは1より大きい値になって
いないか
ディスク容量枯渇 中 OSコマンド(df など) ディスク容量があふれないか
ネットワークリソースの枯
渇
低 mongostatのconn
OSコマンド(netstatな
ど)
コネクション数は、TCPのソケット数の
最大に達していないか
ネットワークIO待ちが多い 低 mongostatの
netIN,netOut
ネットワーク流量が回線の通信容量に
迫っていないか?
設定ミス、バグによるハン 低 MongoDBのログ、 ログにエラーは出ていないか
簡単に負荷をかけて観察してみる
• 環境
• メモリ1G
• テスト1
o 500Mデータを挿入した後、ランダムで読み込み
o →メモリに乗るため、ディスクへのアクセスは起き
ない
• テスト2
o 2Gのデータを挿入した後、ランダムで読み込み
o →メモリに乗らないため、page faultが起きディスク
アクセスが頻発→スループット低下
アジェンダ
• 何を監視するのか?
• どうやって監視するか?
• 監視コマンド・メソッドで監視
• 運用監視ツールで監視
• MMS ( MongoDB Monitoring Service )で監視
どうやって監視するか?
運用監視ツールで監視
運用監視ツールとMongoDBの連携以下のようにいくつか
ある。
• MongoDB – Zabbix 連携
• MongoDB - Nagios 連携
• MongoDB - Munin 連携
今回はMongoDB – Zabbix 連携を紹介。
他も同じ仕組み(なはず)
Zabbix-MongoDB連携の仕組み
server
Zabbix server
your server
mongod
your client
Web browser Web Consoleview data
MongoDB
pligin
PHP Script
MongoDB
Driver
serverStatus()
Command
Zabbix-MongoDB連携画面
アジェンダ
• 何を監視するのか?
• どうやって監視するか?
• 監視コマンド・メソッドで監視
• 運用監視ツールで監視
• MMS ( MongoDB Monitoring Service )で監視
どうやって監視するか?
MMS (MongoDB Monitoring Service)で監視
一味違うMMS!
• 開発元である10genが提供
• アカウントの登録さえしてしまえば、無料で使える
• クラウド上(AWS上)にあり、手元のMongoDBをMMS-
Agent経由でクラウドにつなぐ
• クラウド上のMSSコンソールにはブラウザでアクセス
。ここでいろいろ見れる
• 一つのMMS-Agentを設置すれば、手元の環境の
MongoDBを何台でもつなげる(今まで紹介した運用監
視ツールとは大きく違う!)。
• 独自のダッシュボートが作れる
• バックアップもでき��らしい
MMS の仕組み
MMS
(on AWS)
your server #1
MMS Agent
your server #2
pymongo
Internet
mongod
mongod
push data
(over HTTP/SSL)
gather data
view data
your client
Web browser
your server #3
mongod
gather data
app
key
MMSのインストール
1. MMSのアカウントを作る
o http://www.10gen.com/products/mongodb-monitoring-service
2. MMSにログイン
o https://mms.10gen.com/user/login
3. MMS Agentのダウンロード
o settingsからアプリキー込みのバイナリをダウンロード
4. Pythonとpymongoのインストール
5. MMS Agentの解凍&起動
$ yum install python python-setuptools
$ easy_install pymongo simple_json
$ unzip 10gen-mms-agent-mlfie.zip
$ cd mms-agent
$ python agent.py
MMSの設定
1. Agentの登録
2. Hostの登録
こんだけ!とにかく簡単です。
あとは、適当にダッシュボードを作るなりしま
しょう。
MMSの画面
host一覧画面
MMSの画面
ホストのstatus画面
MMSの画面
ログビュー
MMSの画面
ダッシュボードのカスタマイズ

More Related Content

MongoDBの監視