Wie lautet der Befehl, um die Anzahl der mit einem bestimmten MongoDB-Server verbundenen Clients abzurufen?
Antworten:
Stellen Sie eine Verbindung zur Admin-Datenbank her und führen Sie Folgendes aus db.serverStatus()
:
> var status = db.serverStatus()
> status.connections
{"current" : 21, "available" : 15979}
>
Sie können direkt durch Abfrage erhalten
db.serverStatus().connections
db.serverStatus().connections
Lesen Sie die Dokumentation hier , um zu verstehen, was die Antwort von MongoDb bedeutet .
Verbindungen
"connections" : { "current" : <num>, "available" : <num>, "totalCreated" : NumberLong(<num>) },
Verbindungen Ein Dokument, das den Status der Verbindungen meldet. Verwenden Sie diese Werte, um die aktuellen Last- und Kapazitätsanforderungen des Servers zu bewerten.
connection.current Die Anzahl der eingehenden Verbindungen von Clients zum Datenbankserver. Diese Nummer enthält die aktuelle Shell-Sitzung. Berücksichtigen Sie den Wert von connection.available, um diesem Datum mehr Kontext hinzuzufügen.
Der Wert umfasst alle eingehenden Verbindungen, einschließlich aller Shell-Verbindungen oder Verbindungen von anderen Servern, z. B. Replikatsatzmitgliedern oder Mongos-Instanzen.
verbindungen.verfügbar Die Anzahl der nicht verwendeten eingehenden Verbindungen, die verfügbar sind. Betrachten Sie diesen Wert in Kombination mit dem Wert von connection.current, um die Verbindungslast in der Datenbank zu verstehen, und im Dokument UNIX ulimit Settings, um weitere Informationen zu Systemschwellenwerten für verfügbare Verbindungen zu erhalten.
verbindungen.totalCreated Anzahl aller eingehenden Verbindungen, die zum Server erstellt wurden. Diese Nummer enthält Verbindungen, die inzwischen geschlossen wurden.
Verbindungsanzahl nach ClientIP mit Gesamt
Wir verwenden dies, um die Anzahl der Verbindungen von IPAddress mit einer Gesamtanzahl von Verbindungen anzuzeigen. Dies war wirklich hilfreich beim Debuggen eines Problems ... kommen Sie einfach dorthin, bevor Sie die maximale Anzahl an Verbindungen erreichen!
Für 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 })
Formatiert:
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 }
)
Beispielrückgabe:
{
"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
}
(die 192.xxx-Adressen bei der internen Überwachung von Atlas)
"Intern" sind interne Prozesse ohne externen Client. Sie können eine Liste davon mit folgendem anzeigen:
db.currentOp(true).inprog.filter(connection => !connection.client).map(connection => connection.desc);
E QUERY [js] TypeError: db.currentOp(...).inprog is undefined :
db.currentOp(true)
?
{ "ok" : 0, "errmsg" : "Using $all for currentOp is disallowed in this atlas tier", "code" : 8000, "codeName" : "AtlasError" }
db.serverStatus()
Gibt keine der offenen und verfügbaren Verbindungen an, zeigt jedoch nicht die Verbindungen an, von denen aus der Client. Für weitere Informationen können Sie diesen Befehl verwenden sudo lsof | grep mongod | grep TCP
. Ich brauche es, wenn ich die Replikation durchgeführt habe und der primäre Knoten viele Clientverbindungen hat, die größer als die sekundäre sind.
$ 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)
Dies zeigt, dass derzeit fünf Verbindungen zum MongoDB-Port (27017) auf meinem Computer geöffnet sind. In meinem Fall stelle ich von einem Scalatra-Server aus eine Verbindung zu MongoDB her und verwende den MongoDB Casbah-Treiber. Unabhängig vom verwendeten Client werden jedoch dieselben TCP-Verbindungen angezeigt (sofern eine Verbindung über TCP / hergestellt wird) IP).
sudo lsof -i | grep mongod
Ich habe versucht, alle Verbindungen für die Mongo-Datenbank mit dem folgenden Befehl anzuzeigen.
netstat -anp --tcp --udp | grep mongo
Dieser Befehl kann jede TCP-Verbindung für Mongodb detaillierter anzeigen.
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
Sie können einfach verwenden
db.serverStatus().connections
Mit dieser Funktion können Sie auch die IP-Adressen erkennen, die mit Ihrer Mongo-Datenbank verbunden sind
db.currentOp(true).inprog.forEach(function(x) { print(x.client) })
Sehen Sie auch in OS X die Verbindungen direkt auf der Netzwerkschnittstelle :
$ 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)
Keine Notwendigkeit, grep
etc zu verwenden , verwenden Sie einfach die lsof
Argumente des.
Informationen zu den Verbindungen in der CLI von MongoDb finden Sie in der Antwort von @ milan ( die ich gerade bearbeitet habe ).
Auch einige Details zu den Verbindungen mit:
db.currentOp(true)
Entnommen aus: https://jira.mongodb.org/browse/SERVER-5085
db.runCommand ({"connPoolStats": 1})
{
"numClientConnections" : 0,
"numAScopedConnections" : 0,
"totalInUse" : 0,
"totalAvailable" : 0,
"totalCreated" : 0,
"hosts" : {
},
"replicaSets" : {
},
"ok" : 1
}
MongoMonitoringController : { "numClientConnections" : 0 , "numAScopedConnections" : 0 , "totalInUse" : 0 , "totalAvailable" : 0 , "totalCreated" : 0 , "totalRefreshing" : 0 , "pools" : { } , "hosts" : { } , "replicaSets" : { } , "ok" : 1.0}
Entschuldigung, da dies ein alter Beitrag ist und derzeit mehr Optionen als zuvor verfügbar sind.
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}}
] )
Ausgabebeispiel:
{ "_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 }
Stellen Sie vom lokalen System aus eine Verbindung mit Ihrer Mongodb-Instanz her
Sie werden über alle verbundenen Clients und deren Details informiert
db.currentOp (true)
Alternativ können Sie den Verbindungsstatus überprüfen, indem Sie sich bei Mongo Atlas anmelden und dann zu Ihrem Cluster navigieren.