概要
Mongoクライアントから実行されたクエリを毎回ログファイルに出力するようにします
例えばサードパーティのライブラリから実行されているクエリがどんなクエリか知りたい場合に使えると思います
環境準備
- Mac OS X 10.8.5
- MongoDB 2.6.4
設定
MongoDBを起動するときにprofile
とslowms
オプションを付与します
mongod --logpath=/var/log/mongodb/mongo.log --profile=1 --slowms=-1
profile
を1に指定し、slowms
を-1にして起動します
--logpath
は各自の環境に合わせて設定してください
ちょっとしたTips
slowmsの部分を「1にして起動してください」という記事を何個か見ましたが、そうすると1ms以下で処理されたクエリはロギング対象にならないため、データが少ない場合にロギングすることができません
ただ、slowms
を-1にするとすべてのクエリがスロークエリと判断されるため管理系のクエリも大量にロギングされてしまいます
例えば以下のようなログが大量にロギングされると思います
2014-09-16T19:45:42.585+0900 [conn56] command admin.$cmd command: buildInfo { buildinfo: 1 } keyUpdates:0 numYields:0 reslen:854 0ms
なので上記の設定で必要なクエリ情報だけ確認したい場合はgrep
コマンドと合わせて使用するのがいいと思います
tail -f mongo.log | grep -v "command admin.\$cmd command:"
あとprofile
オプションに関してですが、いくつか設定があり
「1」はスロークエリのみ表示することができる設定ですが、今回に限ってはすべてがスロークエリになるので関係ありません
また「2」という設定もあり、これはすべてのオペレーションを表示する設定となります
今回はオペレーション系の操作も1ms以下で処理されるので1でも2でも管理系のクエリがロギングされてしまいます
とりあえず開発環境でデバッグしたいときには使えると思いますが、本番でslowms=-1
にするのは出力されるログの量も考えて、あまりおすすめはしません
あとは管理系クエリを除いたクエリがすべて1ms以上かかるのであれば--profile=1 --slowms=1
で問題ないと思います
うーん、とは言え何かもうちょっといい方法はないのだろうか
0 件のコメント:
コメントを投稿