MongoDBの便利ツール「mtools」紹介

MongoDBには、MongoDB開発者御用達の便利ツール「[mtools](https://github.com/rueckstiess/mtools)」というものがあるのですが、まだあまり知られていないようですので、紹介していきます。

## mtoolsの概要 

mtoolsは[github](https://github.com/rueckstiess/mtools)で公開されており、
以下のコンポーネントが含まれます

**mlogfilter**
MongoDBのログファイルをマージして、スロークエリを探したり、フルスキャンを探したりできるツール。さらにログを属性でフィルタして、JSONにすることもできる。

**mloginfo**
MongoDBのログファイルを食わせると、ログの開始時間、終了時間、バージョン、出してるバイナリ、各種イベント(リスタート、レプリカ関連)、クエリの種類などを集計してくれる。

**mplotqueries**
MongoDBのログファイルを食わせると、グラフを作ってくれる

**mlogvis**
MongoDBのログファイルを食わせるとhtmlをはいてくれる

**mlaunch**
テスト環境を簡単に作れるスクリプト。レプリカセットやシャーディング環境をコマンド一発で作れる。

**mgenerate**
テンプレートに基づいてテスト用データを作ってくれる

## mtoolsのインストール

### pythonまわりのインストール
まずpython 2.6.xか2.7.xが必要なので、それをインストールします(この手順はRHEL6/Cent6前提です)

```
# yum install python python-devel
```

次にpythonのライブラリ管理ツールであるpipを入れます。

```
# curl -kL https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
```

### mtoolsのインストール
pipでさくっと入れます。

```
# pip install mtools
```

詳しくは https://github.com/rueckstiess/mtools/blob/master/INSTALL.md

# 各種ツールの使い方

## mlogfilterの使い方

後日書きます m(_ _)m

## mloginfoの使い方

一番簡単な使い方は、mloginfoコマンドにログファイルを引数に渡します。すると以下のようにログファイルの情報が出ます

```
# mloginfo mongod.log

     source: mongod.log
       host: db0.example.com:27017
      start: 2014 Aug 28 15:37:35.589
        end: 2014 Oct 29 00:04:35.567
date format: iso8601-local
     length: 74369
     binary: mongod
    version: 2.6.4
```

以下のように複数のログファイルを渡すと、ずらずらっと情報が出るため、目的のログを探すのに便利です。

```
# mloginfo *.log*
```

他にもオプションで以下のようなことがわかります

* `--queries`:クエリのパターンとクエリの対象
* `--restarts`:再起動タイミング
* `--distinct`:行の種類と出現回数
* `--connections`:コネクション状態
* `--rsstate`:レプリカセットの状態

詳しくは https://github.com/rueckstiess/mtools/wiki/mloginfo
## mplotqueriesの使い方

後日書きます m(_ _)m

## mlogvisの使い方

後日書きます m(_ _)m

## mlaunchの使い方

mlaunchはMongoDBの実行ファイルにPATHが通ってないないとダメなのでまず最初にPATHを通しておいて下さい。

### 単一のMognoDB

単一ノードのMongoDBを上げる場合は、以下のコマンドです

```
# mlaunch --single
launching: mongod on port 27017
```

このままでもよいですが、これだとジャーナルが有効で、ディスク食いますし、起動も遅いので、さらに手軽に実施する場合は`--nojournal`オプションを付けましょう。

```
# mlaunch --single --nojournal
launching: mongod on port 27017
```

### レプリカセット

レプリカセットは以下のコマンドでできます。

```
# mlaunch --replicaset
launching: mongod on port 27017
launching: mongod on port 27018
launching: mongod on port 27019
```

5ノードでプリカセットであれば以下のコマンドです。

```
# mlaunch --replicaset --nodes 5
```

### シャーディング

単一ノードからなるシャーディングは以下のコマンドで上げられます。3つのシャードと、ひとつのconfigサーバ、ひとつのmognosが上がります。

```
# mlaunch --single --sharded 3
launching: mongod on port 27018
launching: mongod on port 27019
launching: mongod on port 27020
launching: config server on port 27021
launching: mongos on port 27017
```

レプリカからなるシャーディングは以下のコマンドです。
ついでにconfigは3台構成、mongosも3台構成にします。

```
# mlaunch --replicaset --sharded 3 --config 3 --mongos 3
launching: mongod on port 27020
launching: mongod on port 27021
launching: mongod on port 27022
launching: mongod on port 27023
launching: mongod on port 27024
launching: mongod on port 27025
launching: mongod on port 27026
launching: mongod on port 27027
launching: mongod on port 27028
launching: config server on port 27029
launching: config server on port 27030
launching: config server on port 27031
replica set 'shard01' initialized.
replica set 'shard02' initialized.
replica set 'shard03' initialized.
launching: mongos on port 27017
launching: mongos on port 27018
launching: mongos on port 27019
adding shards. can take up to 30 seconds...
``` 

### その他
もろもろの環境を止める場合は以下コマンドです。

```
#  mlaunch stop
```

環境を消す場合は、mlaunchのディレクトリを消せばOKです。デフォルトは`(コマンド実行ディレクトリ)/data`です。

```
# rm -rf data
```

好きなオプションを渡したい場合は、最後につければmongodなりに渡されます

```
#　mlaunch --single --nojournal --rest --notablescan --noscripting 
launching: mongod on port 27017
# ps -ef | grep mongod
root       788     1  0 00:35 ?        00:00:00 mongod --dbpath /tmp/data/db --logpath /tmp/data/mongod.log --port 27017 --logappend --fork --nojournal --rest --notablescan --noscripting
```

他にもレプリカでアービタを指定したり、認証を有効にしたりもできます。詳しくは https://github.com/rueckstiess/mtools/wiki/mlaunch

## mgenerateの使い方

後日書きます m(_ _)m