Verifique o número atual de conexões para MongoDb

92

Qual é o comando para obter o número de clientes conectados a um servidor MongoDB específico?

DafaDil
fonte

Respostas:

169

conecte-se ao banco de dados do administrador e execute db.serverStatus():

> var status = db.serverStatus()
> status.connections
   {"current" : 21, "available" : 15979}
> 

Você pode obter diretamente ao consultar

db.serverStatus().connections

Para entender o que significa a db.serverStatus().connectionsresposta do MongoDb , leia a documentação aqui .

conexões

"connections" : {
   "current" : <num>,
   "available" : <num>,
   "totalCreated" : NumberLong(<num>)
},

conexões Um documento que relata o status das conexões. Use esses valores para avaliar a carga atual e os requisitos de capacidade do servidor.

conexões.current O número de conexões de entrada de clientes para o servidor de banco de dados. Este número inclui a sessão shell atual. Considere o valor de connections.available para adicionar mais contexto a esse dado.

O valor incluirá todas as conexões de entrada, incluindo quaisquer conexões de shell ou conexões de outros servidores, como membros do conjunto de réplicas ou instâncias de mongos.

conexões disponíveis O número de conexões de entrada não utilizadas disponíveis. Considere este valor em combinação com o valor de connections.current para entender a carga da conexão no banco de dados e o documento Configurações de ulimit do UNIX para obter mais informações sobre os limites do sistema nas conexões disponíveis.

connections.totalCreated Contagem de todas as conexões de entrada criadas para o servidor. Este número inclui conexões que já foram fechadas.

milão
fonte
28

Contagem de conexão por ClientIP, com total

Usamos isso para ver o número de conexões por endereço IP com uma contagem total de conexões. Isso foi realmente útil para depurar um problema ... basta chegar lá antes de atingir o máximo de conexões!

Para 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 })

Formatado:

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

Retorno de exemplo:

{
    "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
}

(os endereços 192.xxx no monitoramento interno da Atlas)

"Internos" são processos internos que não possuem um cliente externo. Você pode ver uma lista deles com isto:

db.currentOp(true).inprog.filter(connection => !connection.client).map(connection => connection.desc);
SuperGoTeam
fonte
Você poderia explicar o significado do IP "interno" na lista de devoluções?
carton.swing
Não consigo executar o exemplo acima em uma instância do mongo atlas: E QUERY [js] TypeError: db.currentOp(...).inprog is undefined :usando o usuário administrador
otong
@ carton.swing Atualizei a resposta com explicação e comando para visualizá-los.
SuperGoTeam
@otong, o que você recebe de volta db.currentOp(true)?
SuperGoTeam
Parece que foi negado pelo atlas mongodb: { "ok" : 0, "errmsg" : "Using $all for currentOp is disallowed in this atlas tier", "code" : 8000, "codeName" : "AtlasError" }
otong
19

db.serverStatus()não fornece conexões abertas e disponíveis, mas não mostra as conexões de qual cliente. Para obter mais informações, você pode usar este comando sudo lsof | grep mongod | grep TCP. Eu preciso disso quando fiz a replicação e o nó primário tem muitas conexões de cliente maiores que as secundárias.

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

Isso mostra que atualmente tenho cinco conexões abertas para a porta MongoDB (27017) em meu computador. No meu caso, estou me conectando ao MongoDB de um servidor Scalatra e usando o driver Casbah do MongoDB, mas você verá o mesmo lsof de conexões TCP, independentemente do cliente usado (contanto que eles estejam se conectando usando TCP / IP).

Hitesh Mundra
fonte
1
Este comando retorna várias entradas para uma única conexão: stackoverflow.com/a/42930337/1843751
ignite
3
Eu sugiro usar o sinalizador -i para lsof. Então você obtém apenas 1 entrada por conexão e não precisa fazer o grep para TCP. isto é,sudo lsof -i | grep mongod
datdo
8

Você pode apenas usar

db.serverStatus().connections

Além disso, esta função pode ajudá-lo a localizar os endereços IP conectados ao seu banco de dados Mongo

db.currentOp(true).inprog.forEach(function(x) { print(x.client) })
nixsix6
fonte
1
Absolutamente lindo - obrigado! Exatamente o que eu estava procurando.
ProsperousHeart
7

Tentei ver todas as conexões para o banco de dados mongo seguindo o comando.

netstat -anp --tcp --udp | grep mongo

Este comando pode mostrar cada conexão tcp para mongodb com mais detalhes.

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 Thu L
fonte
7

No OS X, veja também as conexões diretamente na interface de rede, basta fazer :

$ 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)
  • Não há necessidade de usar grepetc, apenas use os lsofargumentos de.

  • Para ver as conexões na CLI do MongoDb, veja a resposta de @milan ( que acabei de editar ).

Inanc Gumus
fonte
5

Além disso, mais alguns detalhes sobre as conexões com: db.currentOp(true)

Retirado de: https://jira.mongodb.org/browse/SERVER-5085

mitsos1os
fonte
1
Eu li todas as respostas e de repente - esta é uma das mais úteis. A consulta fornece muitos detalhes internos como deveria, incluindo tempo de conexão, tabela atual, versão do driver e plataforma, e até mesmo appName se especificado
Dmitry Gusarov
3

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

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

    },
    "replicaSets" : {

    },
    "ok" : 1
}
arnav
fonte
É muito interessante, também recebo valores ZERO para essa solicitação, não é o que eu quero :) MongoMonitoringController : { "numClientConnections" : 0 , "numAScopedConnections" : 0 , "totalInUse" : 0 , "totalAvailable" : 0 , "totalCreated" : 0 , "totalRefreshing" : 0 , "pools" : { } , "hosts" : { } , "replicaSets" : { } , "ok" : 1.0}
Alex Efimov
2

Conecte-se ao MongoDB usando o mongo-shell e execute o seguinte comando.

db.serverStatus().connections

por exemplo:

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

Desculpe porque esta é uma postagem antiga e atualmente há mais opções do que antes.

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}}
] )

Exemplo de saída:

{ "_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
fonte
1

Conecte-se com sua instância mongodb do sistema local

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

Ele permitirá que você conheça todos os clientes conectados e seus detalhes

  1. db.currentOp (verdadeiro)

Shree Prakash
fonte
0

Como alternativa, você pode verificar o status da conexão fazendo login no Mongo Atlas e navegando até o seu cluster.

insira a descrição da imagem aqui

localhost
fonte