Перевірте поточну кількість підключень до MongoDb


90

Яка команда отримує кількість клієнтів, підключених до певного сервера MongoDB?

Відповіді:


163

підключіться до бази даних адміністратора та запустіть 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 Кількість усіх вхідних з'єднань, створених на сервері. Це число включає з'єднання, які з тих пір були закриті.


25

Кількість підключень за клієнтським 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);

Не могли б ви пояснити значення "внутрішнього" IP у списку повернення?
carton.swing

Я не можу запустити наведений вище приклад на екземплярі mongo atlas: E QUERY [js] TypeError: db.currentOp(...).inprog is undefined :за допомогою адміністратора
otong

@ carton.swing Я оновив відповідь із поясненнями та командою, щоб переглянути їх.
SuperGoTeam

@otong за що ти просто повертаєшся db.currentOp(true)?
SuperGoTeam

Здається, це заперечує mongodb atlas: { "ok" : 0, "errmsg" : "Using $all for currentOp is disallowed in this atlas tier", "code" : 8000, "codeName" : "AtlasError" }
otong

19

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 / ІП).


1
Ця команда повертає кілька записів для одного підключення: stackoverflow.com/a/42930337/1843751
запалити

3
Я пропоную використовувати прапор -i для lsof. Тоді ви отримуєте лише 1 запис на кожне з'єднання, і вам не потрібно grep для TCP. тобтоsudo lsof -i | grep mongod
дата

7

Я спробував побачити всі підключення для бази даних 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   

7

В 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 ( яку я щойно відредагував ).


7

Ви можете просто використовувати

db.serverStatus().connections

Крім того, ця функція може допомогти вам визначити IP-адреси, підключені до вашої БД Mongo

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

1
Абсолютно красиво - дякую! Саме те, що я шукав.
ProsperousHeart

4

Також кілька деталей про зв’язки з: db.currentOp(true)

Взято з: https://jira.mongodb.org/browse/SERVER-5085


Я прочитав всі відповіді, і раптом - це одна з найбільш корисних. Запит дає безліч внутрішніх деталей, як слід, включаючи час підключення, поточну таблицю, версію драйвера та платформу та навіть appName, якщо вказано
Дмитро Гусаров

2

Підключіться до MongoDB за допомогою mongo-shell і запустіть наступну команду.

db.serverStatus().connections

наприклад:

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

2

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}
Алекс Єфімов

2

Вибачте, тому що це стара публікація, і наразі варіантів більше, ніж раніше.

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 }

1

Зв’яжіться зі своїм екземпляром mongodb з локальної системи

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

Він повідомить вас усіх підключених клієнтів та їх деталі

  1. db.currentOp (істина)


0

Крім того, ви можете перевірити стан підключення, увійшовши в Mongo Atlas, а потім перейшовши до кластера.

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.