MongoDB でクエリを確認できますが、MongoDB データベースで実行されている書き込みを確認しようとしましたが、成功しませんでした。
アプリケーション コードに書き込みコマンドがありません。それでも、アプリのロード テストを行うと、mongostat に大量の書き込みが表示されます。彼らがどこから来ているのかわからない。
書き込みをログに記録する (私にはできません) 以外に、これらの書き込みがどこから来ているかを判断するために使用できる他の方法はありますか?
MongoDB でクエリを確認できますが、MongoDB データベースで実行されている書き込みを確認しようとしましたが、成功しませんでした。
アプリケーション コードに書き込みコマンドがありません。それでも、アプリのロード テストを行うと、mongostat に大量の書き込みが表示されます。彼らがどこから来ているのかわからない。
書き込みをログに記録する (私にはできません) 以外に、これらの書き込みがどこから来ているかを判断するために使用できる他の方法はありますか?
私が知っているいくつかのオプションがあります。
a) 特定のデータベースへの書き込みが疑われる場合は、プロファイリング レベルを 2 に設定して、すべてのクエリをログに記録できます。
use [database name]
db.setProfilingLevel(2)
...
// disable when done
db.setProfilingLevel(0)
b) -v を使用して、さまざまなレベルの冗長性でデータベースを開始できます。
-v [ --verbose ] be more verbose (include multiple times for more
verbosity e.g. -vvvvv)
c) mongosniffを使用してポートをスニッフィングできます
d) レプリケーションを使用している場合は、local.oplog.rs コレクションも確認できます。
私は jeffl の提案をすべて試しましたが、そのうちの 1 つが書き込みを表示することができました: mongosniff. ありがとうジェフル!
他の誰かがこれを便利だと思う場合に備えて、Ubuntu 10ボックスにmongosniffをインストールするために使用したコマンドを次に示します。
git clone git://github.com/mongodb/mongo.git
cd mongo
git checkout r2.4.6
apt-get install scons libpcap-dev g++
scons mongosniff
build/linux2/normal/mongo/mongosniff --source NET lo 27017
ログを表示するコマンド ライン ツールを作成し、他のクライアント ツールを必要とせずに最初にプロファイラー アクティビティを有効にしました: "mongotail"。
ログ プロファイリングをレベル 2 にアクティブ化するには:
mongotail databasename -l 2
次に、最新の 10 個のクエリを表示します。
mongotail databasename
また、ツールをオプションで使用して、 「リアルタイム」-f
で変更を確認することもできます。
mongotail databasename -f
最後に、egrep
書き込み操作のみを表示するなど、特定の操作を見つけるために結果をフィルター処理します。
mongotail databasename -f | egrep "(INSERT|UPDATE|REMOVE)"
次のドキュメントとインストール手順を参照してください: https://github.com/mrsarm/mongotail