Яка команда отримує кількість клієнтів, підключених до певного сервера MongoDB?
Відповіді:
підключіться до бази даних адміністратора та запустіть db.serverStatus()
:
> var status = db.serverStatus()
> status.connections
{"current" : 21, "available" : 15979}
>
Ви можете отримати безпосередньо шляхом запиту
db.serverStatus().connections
Щоб зрозуміти, що означає відповідь MongoDb db.serverStatus().connections
, прочитайте документацію тут .
зв'язку
"connections" : { "current" : <num>, "available" : <num>, "totalCreated" : NumberLong(<num>) },
з'єднання Документ, який повідомляє про стан з'єднань. Використовуйте ці значення для оцінки поточних вимог до навантаження та пропускної здатності сервера.
Connections.current Кількість вхідних з'єднань від клієнтів до сервера баз даних. Це число включає поточний сеанс оболонки. Розглянемо значення зв’язку. Доступний, щоб додати більше контексту до цього даного.
Значення буде включати всі вхідні з'єднання, включаючи будь-які з'єднання оболонки або з'єднання з іншими серверами, такі як члени набору реплік або екземпляри mongos.
connections.available кількість невикористаних вхідних з'єднань доступні. Розгляньте це значення в поєднанні зі значенням connection.current, щоб зрозуміти навантаження на з'єднання в базі даних, і документ UNIM ulimit Settings для отримання додаткової інформації про системні порогові значення доступних з'єднань.
connections.totalCreated Кількість усіх вхідних з'єднань, створених на сервері. Це число включає з'єднання, які з тих пір були закриті.
Кількість підключень за клієнтським IP, із загальним
Ми використовуємо це для перегляду кількості підключень за допомогою IPAddress із загальним числом підключень. Це було дуже корисно при налагодженні проблеми ... просто дістаньтеся до того, як вдарити до макс.
Для 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 })
Відформатоване:
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 }
)
Приклад повернення:
{
"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
}
(адреси 192.xxx у внутрішньому моніторингу Атласу)
"Внутрішні" - це внутрішні процеси, у яких немає зовнішнього клієнта. Ви можете переглянути їх із цим:
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()
не дає з'єднань відкривати та використовувати, але не показує з'єднання, з якого клієнта. Для отримання додаткової інформації ви можете скористатися цією командою sudo lsof | grep mongod | grep TCP
. Мені це потрібно, коли я робив реплікацію, і основний вузол має багато підключень до клієнтів, більших за вторинні.
$ 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)
Це свідчить про те, що на моєму комп’ютері на даний момент відкрито п’ять підключень до порту MongoDB (27017). У моєму випадку я підключаюся до MongoDB із сервера Scalatra, і я використовую драйвер MongoDB Casbah, але ви побачите однакові lsof з'єднання TCP незалежно від використовуваного клієнта (якщо вони підключаються за допомогою TCP / ІП).
sudo lsof -i | grep mongod
Я спробував побачити всі підключення для бази даних mongo, виконавши наступну команду.
netstat -anp --tcp --udp | grep mongo
Ця команда може детальніше показати кожне з'єднання tcp для 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
В OS X теж бачите підключення безпосередньо в мережевому інтерфейсі, просто виконайте :
$ 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)
Не потрібно використовувати grep
і т.д., просто використовуйте lsof
аргументи '.
Щоб також побачити зв’язки в CLI MongoDb, див. Відповідь @ milan ( яку я щойно відредагував ).
Ви можете просто використовувати
db.serverStatus().connections
Крім того, ця функція може допомогти вам визначити IP-адреси, підключені до вашої БД Mongo
db.currentOp(true).inprog.forEach(function(x) { print(x.client) })
Також кілька деталей про зв’язки з:
db.currentOp(true)
Підключіться до MongoDB за допомогою mongo-shell і запустіть наступну команду.
db.serverStatus().connections
наприклад:
mongo> db.serverStatus().connections
{ "current" : 3, "available" : 816, "totalCreated" : NumberLong(1270) }
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}
Вибачте, тому що це стара публікація, і наразі варіантів більше, ніж раніше.
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}}
] )
Приклад виходу:
{ "_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 }
Зв’яжіться зі своїм екземпляром mongodb з локальної системи
Він повідомить вас усіх підключених клієнтів та їх деталі
db.currentOp (істина)
Крім того, ви можете перевірити стан підключення, увійшовши в Mongo Atlas, а потім перейшовши до кластера.