Jakie jest polecenie, aby uzyskać liczbę klientów podłączonych do określonego serwera MongoDB?
Odpowiedzi:
połącz się z bazą danych administratora i uruchom db.serverStatus()
:
> var status = db.serverStatus()
> status.connections
{"current" : 21, "available" : 15979}
>
Możesz uzyskać bezpośrednio, wysyłając zapytanie
db.serverStatus().connections
Aby zrozumieć, co oznacza db.serverStatus().connections
odpowiedź MongoDb , przeczytaj dokumentację tutaj .
znajomości
"connections" : { "current" : <num>, "available" : <num>, "totalCreated" : NumberLong(<num>) },
połączenia Dokument zawierający informacje o stanie połączeń. Użyj tych wartości, aby ocenić bieżące wymagania dotyczące obciążenia i pojemności serwera.
połączenia.current Liczba połączeń przychodzących od klientów do serwera bazy danych. Ta liczba obejmuje bieżącą sesję powłoki. Rozważ wartość connection.available, aby dodać więcej kontekstu do tej danej.
Wartość będzie obejmować wszystkie połączenia przychodzące, w tym wszelkie połączenia powłoki lub połączenia z innych serwerów, takie jak elementy zestawu replik lub instancje mongosów.
połączenia.available Liczba dostępnych nieużywanych połączeń przychodzących. Rozważ tę wartość w połączeniu z wartością connections.current, aby zrozumieć obciążenie połączenia w bazie danych, oraz dokument ustawień ulimit systemu UNIX, aby uzyskać więcej informacji na temat progów systemowych dotyczących dostępnych połączeń.
połączenia.totalCreated liczba wszystkich połączeń przychodzących utworzonych na serwerze. Ta liczba obejmuje połączenia, które od tego czasu zostały zamknięte.
Liczba połączeń według ClientIP, z Total
Używamy tego do przeglądania liczby połączeń według adresu IP z całkowitą liczbą połączeń. To było naprawdę pomocne w debugowaniu problemu ... po prostu dotrzyj tam, zanim osiągniesz maksymalną liczbę połączeń!
W przypadku powłoki Mongo:
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 })
Sformatowany:
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 }
)
Przykład zwrotu:
{
"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
}
(adresy 192.xxx w wewnętrznym monitoringu Atlas)
„Wewnętrzne” to procesy wewnętrzne, które nie mają klienta zewnętrznego. Możesz wyświetlić ich listę za pomocą tego:
db.currentOp(true).inprog.filter(connection => !connection.client).map(connection => connection.desc);
E QUERY [js] TypeError: db.currentOp(...).inprog is undefined :
używając administratora
db.currentOp(true)
?
{ "ok" : 0, "errmsg" : "Using $all for currentOp is disallowed in this atlas tier", "code" : 8000, "codeName" : "AtlasError" }
db.serverStatus()
podaje liczbę otwartych i udanych połączeń, ale nie pokazuje połączeń, z których klient. Aby uzyskać więcej informacji, możesz użyć tego polecenia sudo lsof | grep mongod | grep TCP
. Potrzebuję go, gdy wykonałem replikację, a węzeł podstawowy ma wiele połączeń klientów większych niż pomocnicze.
$ 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)
Pokazuje to, że mam obecnie pięć otwartych połączeń do portu MongoDB (27017) na moim komputerze. W moim przypadku łączę się z MongoDB z serwera Scalatra i używam sterownika MongoDB Casbah, ale zobaczysz te same połączenia lsof TCP niezależnie od używanego klienta (o ile łączą się one za pomocą TCP / IP).
sudo lsof -i | grep mongod
Próbowałem zobaczyć wszystkie połączenia z bazą danych mongo, wykonując następujące polecenie.
netstat -anp --tcp --udp | grep mongo
To polecenie może bardziej szczegółowo pokazać każde połączenie tcp dla mongodb.
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
W systemie OS X również zobacz połączenia bezpośrednio w interfejsie sieciowym, po prostu wykonaj :
$ 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)
Nie ma potrzeby używania grep
etc, po prostu użyj lsof
argumentów 's.
Aby zobaczyć połączenia w interfejsie CLI MongoDb, zobacz odpowiedź @ milan ( którą właśnie zredagowałem ).
Możesz po prostu użyć
db.serverStatus().connections
Ta funkcja może również pomóc Ci znaleźć adresy IP podłączone do Twojej bazy danych Mongo
db.currentOp(true).inprog.forEach(function(x) { print(x.client) })
Również więcej szczegółów na temat połączeń z:
db.currentOp(true)
Zaczerpnięte z: 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}
Przepraszamy, ponieważ to jest stary post i obecnie jest więcej opcji niż wcześniej.
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}}
] )
Przykład danych wyjściowych:
{ "_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 }
Połącz się z instancją mongodb z systemu lokalnego
Poinformuje Cię o wszystkich podłączonych klientach i ich danych
db.currentOp (prawda)
Alternatywnie możesz sprawdzić stan połączenia, logując się do Mongo Atlas, a następnie przechodząc do swojego klastra.