Überprüfen Sie die aktuelle Anzahl der Verbindungen zu MongoDb

86

Wie lautet der Befehl, um die Anzahl der mit einem bestimmten MongoDB-Server verbundenen Clients abzurufen?

DafaDil
quelle

Antworten:

160

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().connectionsLesen 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.

Mailand
quelle
21

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);
SuperGoTeam
quelle
Könnten Sie bitte die Bedeutung der "internen" IP in der Rückgabeliste erläutern?
carton.swing
Ich kann das obige Beispiel nicht auf einer Mongo-Atlas-Instanz E QUERY [js] TypeError: db.currentOp(...).inprog is undefined :
ausführen
@ carton.swing Ich habe die Antwort mit Erklärung und Befehl aktualisiert, um sie anzuzeigen.
SuperGoTeam
@otong was bekommst du gerade zurück db.currentOp(true)?
SuperGoTeam
Scheint, als würde es vom Mongodb-Atlas geleugnet: { "ok" : 0, "errmsg" : "Using $all for currentOp is disallowed in this atlas tier", "code" : 8000, "codeName" : "AtlasError" }
otong
18

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).

Hitesh Mundra
quelle
1
Dieser Befehl gibt mehrere Einträge für eine einzelne Verbindung zurück: stackoverflow.com/a/42930337/1843751
zünden
2
Ich schlage vor, das Flag -i für lsof zu verwenden. Dann erhalten Sie nur 1 Eintrag pro Verbindung und müssen nicht nach TCP suchen. dhsudo lsof -i | grep mongod
datdo
7

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   
Kyaw Min Do L.
quelle
7

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) })
nixsix6
quelle
1
Absolut schön - danke! Genau das, wonach ich gesucht habe.
ProsperousHeart
6

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, grepetc zu verwenden , verwenden Sie einfach die lsofArgumente des.

  • Informationen zu den Verbindungen in der CLI von MongoDb finden Sie in der Antwort von @ milan ( die ich gerade bearbeitet habe ).

Inanc Gumus
quelle
4

Auch einige Details zu den Verbindungen mit: db.currentOp(true)

Entnommen aus: https://jira.mongodb.org/browse/SERVER-5085

mitsos1os
quelle
Ich habe alle Antworten gelesen und plötzlich - das ist eine der hilfreichsten. Die Abfrage gibt Tonnen von internen Details, wie es sollte, einschließlich Verbindungszeit, aktuelle Tabelle, Treiberversion und Plattform, und sogar appName, falls angegeben
Dmitry Gusarov
2

Stellen Sie mit der Mongo-Shell eine Verbindung zu MongoDB her und führen Sie den folgenden Befehl aus.

db.serverStatus().connections

z.B:

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

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

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

    },
    "replicaSets" : {

    },
    "ok" : 1
}
Arnav
quelle
Es ist sehr interessant, ich erhalte auch NULL-Werte für diese Anfrage, es ist nicht das, was ich will :) MongoMonitoringController : { "numClientConnections" : 0 , "numAScopedConnections" : 0 , "totalInUse" : 0 , "totalAvailable" : 0 , "totalCreated" : 0 , "totalRefreshing" : 0 , "pools" : { } , "hosts" : { } , "replicaSets" : { } , "ok" : 1.0}
Alex Efimov
2

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 }
JuanM
quelle
0

Stellen Sie vom lokalen System aus eine Verbindung mit Ihrer Mongodb-Instanz her

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

Sie werden über alle verbundenen Clients und deren Details informiert

  1. db.currentOp (true)

Shree Prakash
quelle
0

Alternativ können Sie den Verbindungsstatus überprüfen, indem Sie sich bei Mongo Atlas anmelden und dann zu Ihrem Cluster navigieren.

Geben Sie hier die Bildbeschreibung ein

localhost
quelle