Controlla il numero corrente di connessioni a MongoDb


92

Qual è il comando per ottenere il numero di client connessi a un particolare server MongoDB?

Risposte:


169

connettiti al database admin ed esegui db.serverStatus():

> var status = db.serverStatus()
> status.connections
   {"current" : 21, "available" : 15979}
> 

Puoi ottenere direttamente interrogando

db.serverStatus().connections

Per capire cosa significa la db.serverStatus().connectionsrisposta di MongoDb , leggi la documentazione qui .

collegamenti

"connections" : {
   "current" : <num>,
   "available" : <num>,
   "totalCreated" : NumberLong(<num>)
},

connessioni Un documento che riporta lo stato delle connessioni. Utilizzare questi valori per valutare il carico corrente e i requisiti di capacità del server.

connections.current Il numero di connessioni in entrata dai client al server database. Questo numero include la sessione corrente della shell. Considera il valore delle connessioni disponibili per aggiungere più contesto a questo dato.

Il valore includerà tutte le connessioni in entrata, comprese eventuali connessioni shell o connessioni da altri server, come i membri del set di repliche o le istanze mongos.

connessioni disponibili Il numero di connessioni in entrata non utilizzate disponibili. Considerare questo valore in combinazione con il valore di connections.current per comprendere il carico di connessione sul database e il documento UNIX ulimit Settings per ulteriori informazioni sulle soglie di sistema sulle connessioni disponibili.

connections.totalCreated Conteggio di tutte le connessioni in entrata create al server. Questo numero include le connessioni che da allora sono state chiuse.


28

Conteggio connessioni per IP client, con totale

Usiamo questo per visualizzare il numero di connessioni da IPAddress con un conteggio totale delle connessioni. Questo è stato davvero utile per eseguire il debug di un problema ... basta arrivarci prima di raggiungere il massimo delle connessioni!

Per Mongo Shell:

db.currentOp(true).inprog.reduce((accumulator, connection) => { ipaddress = connection.client ? connection.client.split(":")[0] : "Internal"; accumulator[ipaddress] = (accumulator[ipaddress] || 0) + 1; accumulator["TOTAL_CONNECTION_COUNT"]++; return accumulator; }, { TOTAL_CONNECTION_COUNT: 0 })

Formattato:

db.currentOp(true).inprog.reduce(
  (accumulator, connection) => {
    ipaddress = connection.client ? connection.client.split(":")[0] : "Internal";
    accumulator[ipaddress] = (accumulator[ipaddress] || 0) + 1;
    accumulator["TOTAL_CONNECTION_COUNT"]++;
    return accumulator;
  },
  { TOTAL_CONNECTION_COUNT: 0 }
)

Ritorno di esempio:

{
    "TOTAL_CONNECTION_COUNT" : 331,
    "192.168.253.72" : 8,
    "192.168.254.42" : 17,
    "127.0.0.1" : 3,
    "192.168.248.66" : 2,
    "11.178.12.244" : 2,
    "Internal" : 41,
    "3.100.12.33" : 86,
    "11.148.23.34" : 168,
    "81.127.34.11" : 1,
    "84.147.25.17" : 3
}

(gli indirizzi 192.xxx al monitoraggio interno Atlas)

"Interni" sono processi interni che non hanno un client esterno. Puoi visualizzare un elenco di questi con questo:

db.currentOp(true).inprog.filter(connection => !connection.client).map(connection => connection.desc);

Potresti spiegare il significato dell'IP "interno" nell'elenco di restituzione?
carton.swing

Non riesco a eseguire l'esempio sopra su un'istanza di atlante mongo: E QUERY [js] TypeError: db.currentOp(...).inprog is undefined :utilizzando l'utente amministratore
otong

@ carton.swing Ho aggiornato la risposta con la spiegazione e il comando per visualizzarli.
SuperGoTeam

@otong, per cosa ricevi indietro db.currentOp(true)?
SuperGoTeam

Sembra che sia stato negato dall'atlante { "ok" : 0, "errmsg" : "Using $all for currentOp is disallowed in this atlas tier", "code" : 8000, "codeName" : "AtlasError" }
mongodb

19

db.serverStatus()non fornisce alcuna connessione aperta e disponibile ma non mostra le connessioni da quale client. Per maggiori informazioni puoi usare questo comando sudo lsof | grep mongod | grep TCP. Ne ho bisogno quando ho eseguito la replica e il nodo primario ha molte connessioni client maggiori del secondario.

$ sudo lsof | grep mongod | grep TCP
mongod    5733             Al    6u     IPv4 0x08761278       0t0       TCP *:28017 (LISTEN)
mongod    5733             Al    7u     IPv4 0x07c7eb98       0t0       TCP *:27017 (LISTEN)
mongod    5733             Al    9u     IPv4 0x08761688       0t0       TCP 192.168.1.103:27017->192.168.1.103:64752 (ESTABLISHED)
mongod    5733             Al   12u     IPv4 0x08761a98       0t0       TCP 192.168.1.103:27017->192.168.1.103:64754 (ESTABLISHED)
mongod    5733             Al   13u     IPv4 0x095fa748       0t0       TCP 192.168.1.103:27017->192.168.1.103:64770 (ESTABLISHED)
mongod    5733             Al   14u     IPv4 0x095f86c8       0t0       TCP 192.168.1.103:27017->192.168.1.103:64775 (ESTABLISHED)
mongod    5733             Al   17u     IPv4 0x08764748       0t0       TCP 192.168.1.103:27017->192.168.1.103:64777 (ESTABLISHED)

Questo mostra che al momento ho cinque connessioni aperte alla porta MongoDB (27017) sul mio computer. Nel mio caso mi sto connettendo a MongoDB da un server Scalatra e sto usando il driver Casbah di MongoDB, ma vedrai lo stesso lsof connessioni TCP indipendentemente dal client utilizzato (purché si connettano usando TCP / IP).


1
Questo comando restituisce più voci per una singola connessione: stackoverflow.com/a/42930337/1843751
ignite

3
Suggerisco di usare il flag -i per lsof. Quindi ottieni solo 1 voce per connessione e non è necessario grep per TCP. iesudo lsof -i | grep mongod
datdo

8

Puoi semplicemente usare

db.serverStatus().connections

Inoltre, questa funzione può aiutarti a individuare gli indirizzi IP collegati al tuo Mongo DB

db.currentOp(true).inprog.forEach(function(x) { print(x.client) })

1
Assolutamente bellissimo - grazie! Esattamente quello che stavo cercando.
ProsperousHeart

7

Ho provato a vedere tutte le connessioni per il database mongo seguendo il comando.

netstat -anp --tcp --udp | grep mongo

Questo comando può mostrare ogni connessione tcp per mongodb in modo più dettagliato.

tcp        0      0 10.26.2.185:27017           10.26.2.1:2715              ESTABLISHED 1442/./mongod       
tcp        0      0 10.26.2.185:27017           10.26.2.1:1702              ESTABLISHED 1442/./mongod  
tcp        0      0 10.26.2.185:27017           10.26.2.185:39506           ESTABLISHED 1442/./mongod       
tcp        0      0 10.26.2.185:27017           10.26.2.185:40021           ESTABLISHED 1442/./mongod       
tcp        0      0 10.26.2.185:27017           10.26.2.185:39509           ESTABLISHED 1442/./mongod 
tcp        0      0 10.26.2.185:27017           10.26.2.184:46062           ESTABLISHED 1442/./mongod       
tcp        0      0 10.26.2.185:27017           10.26.2.184:46073           ESTABLISHED 1442/./mongod       
tcp        0      0 10.26.2.185:27017           10.26.2.184:46074           ESTABLISHED 1442/./mongod   

7

Anche in OS X vedi le connessioni direttamente sull'interfaccia di rete, basta fare :

$ lsof -n -i4TCP:27017

mongod     2191 inanc    7u  IPv4 0xab6d9f844e21142f  0t0  TCP 127.0.0.1:27017 (LISTEN)
mongod     2191 inanc   33u  IPv4 0xab6d9f84604cd757  0t0  TCP 127.0.0.1:27017->127.0.0.1:56078 (ESTABLISHED)
stores.te 18704 inanc    6u  IPv4 0xab6d9f84604d404f  0t0  TCP 127.0.0.1:56078->127.0.0.1:27017 (ESTABLISHED)
  • Non c'è bisogno di usare grepecc., Usa solo gli lsofargomenti di.

  • Per vedere le connessioni sulla CLI di MongoDb, vedere la risposta di @ milan ( che ho appena modificato ).


5

Inoltre qualche dettaglio in più sui collegamenti con: db.currentOp(true)

Tratto da: https://jira.mongodb.org/browse/SERVER-5085


1
Ho letto tutte le risposte pensate e improvvisamente - questa è una delle più utili. La query fornisce tonnellate di dettagli interni come dovrebbe, inclusi il tempo di connessione, la tabella corrente, la versione del driver e la piattaforma e persino appName se specificato
Dmitry Gusarov

3

db.runCommand ({"connPoolStats": 1})

{
    "numClientConnections" : 0,
    "numAScopedConnections" : 0,
    "totalInUse" : 0,
    "totalAvailable" : 0,
    "totalCreated" : 0,
    "hosts" : {

    },
    "replicaSets" : {

    },
    "ok" : 1
}

È abbastanza interessante, ricevo anche valori ZERO per quella richiesta, non è quello che voglio :) MongoMonitoringController : { "numClientConnections" : 0 , "numAScopedConnections" : 0 , "totalInUse" : 0 , "totalAvailable" : 0 , "totalCreated" : 0 , "totalRefreshing" : 0 , "pools" : { } , "hosts" : { } , "replicaSets" : { } , "ok" : 1.0}
Alex Efimov

2

Connettiti a MongoDB usando mongo-shell ed esegui il seguente comando.

db.serverStatus().connections

per esempio:

mongo> db.serverStatus().connections
{ "current" : 3, "available" : 816, "totalCreated" : NumberLong(1270) }

2

Siamo spiacenti perché questo è un vecchio post e attualmente ci sono più opzioni rispetto a prima.

db.getSiblingDB("admin").aggregate( [
   { $currentOp: { allUsers: true, idleConnections: true, idleSessions: true } }
  ,{$project:{
            "_id":0
           ,client:{$arrayElemAt:[ {$split:["$client",":"]}, 0 ] }
           ,curr_active:{$cond:[{$eq:["$active",true]},1,0]}
           ,curr_inactive:{$cond:[{$eq:["$active",false]},1,0]}
           }
   }
  ,{$match:{client:{$ne: null}}}
  ,{$group:{_id:"$client",curr_active:{$sum:"$curr_active"},curr_inactive:{$sum:"$curr_inactive"},total:{$sum:1}}}
  ,{$sort:{total:-1}}
] )

Esempio di output:

{ "_id" : "xxx.xxx.xxx.78", "curr_active" : 0, "curr_inactive" : 1428, "total" : 1428 }
{ "_id" : "xxx.xxx.xxx.76", "curr_active" : 0, "curr_inactive" : 1428, "total" : 1428 }
{ "_id" : "xxx.xxx.xxx.73", "curr_active" : 0, "curr_inactive" : 1428, "total" : 1428 }
{ "_id" : "xxx.xxx.xxx.77", "curr_active" : 0, "curr_inactive" : 1428, "total" : 1428 }
{ "_id" : "xxx.xxx.xxx.74", "curr_active" : 0, "curr_inactive" : 1428, "total" : 1428 }
{ "_id" : "xxx.xxx.xxx.75", "curr_active" : 0, "curr_inactive" : 1428, "total" : 1428 }
{ "_id" : "xxx.xxx.xxx.58", "curr_active" : 0, "curr_inactive" : 510, "total" : 510 }
{ "_id" : "xxx.xxx.xxx.57", "curr_active" : 0, "curr_inactive" : 459, "total" : 459 }
{ "_id" : "xxx.xxx.xxx.55", "curr_active" : 0, "curr_inactive" : 459, "total" : 459 }
{ "_id" : "xxx.xxx.xxx.56", "curr_active" : 0, "curr_inactive" : 408, "total" : 408 }
{ "_id" : "xxx.xxx.xxx.47", "curr_active" : 1, "curr_inactive" : 11, "total" : 12 }
{ "_id" : "xxx.xxx.xxx.48", "curr_active" : 1, "curr_inactive" : 7, "total" : 8 }
{ "_id" : "xxx.xxx.xxx.51", "curr_active" : 0, "curr_inactive" : 8, "total" : 8 }
{ "_id" : "xxx.xxx.xxx.46", "curr_active" : 0, "curr_inactive" : 8, "total" : 8 }
{ "_id" : "xxx.xxx.xxx.52", "curr_active" : 0, "curr_inactive" : 6, "total" : 6 }
{ "_id" : "127.0.0.1", "curr_active" : 1, "curr_inactive" : 0, "total" : 1 }
{ "_id" : "xxx.xxx.xxx.3", "curr_active" : 0, "curr_inactive" : 1, "total" : 1 }

1

Connettiti con la tua istanza mongodb dal sistema locale

  1. sudo mongo "mongodb: // MONGO_HOST_IP: 27017" --authenticationDatabase admin

Ti farà conoscere tutti i client collegati e i loro dettagli

  1. db.currentOp (true)


0

In alternativa puoi controllare lo stato della connessione accedendo a Mongo Atlas e quindi navigando nel tuo cluster.

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.