2016-10-25 5 views
2

シェルを使用して、接続されたユーザーのリストを取得できますか?しかし、私は私もホストから接続しているユーザを得ることができるかどうかを知りたい私は接続。db.serverStatus()を使用して接続数を取得することができますし、私は接続しているユーザーのリストを取得

db.currentOp(true).inprog.forEach(function(d){if (d.client)printjson(d.client)}) 

を使用して、ホスト接続情報を取得することができます?

答えて

0

のMongoDB 3.4.2

私だけで簡単にそのような情報を取得するには、だけでなく、MySQLのSHOW PROCESSLISTようなコマンドを見つけることを期待してきました。不意に、どのユーザーが現在接続しているか、過去または現在の接続に対して、どのユーザーがそれを開始したかを示す機能がないように見えます。しかし、プロファイリングを有効にすると、最近の過去を調べることによって、その機能のいくつかを近似することができます。

私の場合、プロファイリングはグローバルに(db.getProfilingLevel()と表示されます)設定されています。したがって、各データベースのライフサイクルのある時点では、 "system.profile"という名前のコレクションが表示されます。コレクションがいっぱいになるまで保持され、先入れ先出しで置き換えられます(下記の免責事項を参照)。このコレクションはいつものように照会でき、各操作にタイムスタンプ(ts)が関連付けられています。

var all_dbs = db.runCommand({listDatabases:1}); 
var now = new Date(); 

// Modify the number of seconds for a larger or smaller time window 
var just_now = new Date(now.getTime() - 1000); 

all_dbs.databases.forEach(
    function(current_db) { 

     // The condition there is to exclude internal commands executed by the user "__system" 
     // To exclude this command itself, add the condition "ns:{$not:/profile$/}" 
     all_operations = db.getSiblingDB(current_db.name).system.profile.find({user:{$not:/^__/}}); 
     all_operations.forEach(
      function(operation) { 
       if (operation.ts > just_now) { 

        // Remove the .substring(0,200) to unlimit output length 
        print(JSON.stringify(operation.ts), 
          JSON.stringify(operation.user), 
          JSON.stringify(operation.query||operation.command||operation.updateobj).substring(0,200)); 
}})}); 

出力は次のようになります。

"1998-04-01T22:14:56.431Z" "<user>@admin" "<database>.<collection>" "{ insert: \"<collection>\", ordered: false, documents: ... 

免責事項

  1. 私は、これは、これを行うための最善の方法ではありません確信している、とのMongoDBは実質的に私の唯一の使用であり、 Javascriptのために私は本当のJavascriptの人々が彼らの歯を握り締めるようにここでやったかもしれない。歯列矯正士 - より良い慣行で自由に編集できます。

  2. 多くのアクティビティがあるインスタンスの場合、これは機能せず、このエラーがスローされます。私はfind()がsystem.profileからの結果を返し、それらの結果が実行を終了して壊れるまで存在しなくなったと思います。 Executor error during find command: CappedPositionLost: CollectionScan died due to position in capped collection being deleted. Last seen record id: RecordId(19041841)

関連する問題