Qual é o comando para obter o número de clientes conectados a um servidor MongoDB específico?
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().connections
resposta 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.
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);
E QUERY [js] TypeError: db.currentOp(...).inprog is undefined :
usando o usuário administradordb.currentOp(true)
?{ "ok" : 0, "errmsg" : "Using $all for currentOp is disallowed in this atlas tier", "code" : 8000, "codeName" : "AtlasError" }
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 comandosudo 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).
fonte
sudo lsof -i | grep mongod
Você pode apenas usar
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) })
fonte
Tentei ver todas as conexões para o banco de dados mongo seguindo o comando.
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
fonte
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
grep
etc, apenas use oslsof
argumentos de.Para ver as conexões na CLI do MongoDb, veja a resposta de @milan ( que acabei de editar ).
fonte
Além disso, mais alguns detalhes sobre as conexões com:
db.currentOp(true)
Retirado de: https://jira.mongodb.org/browse/SERVER-5085
fonte
{ "numClientConnections" : 0, "numAScopedConnections" : 0, "totalInUse" : 0, "totalAvailable" : 0, "totalCreated" : 0, "hosts" : { }, "replicaSets" : { }, "ok" : 1 }
fonte
MongoMonitoringController : { "numClientConnections" : 0 , "numAScopedConnections" : 0 , "totalInUse" : 0 , "totalAvailable" : 0 , "totalCreated" : 0 , "totalRefreshing" : 0 , "pools" : { } , "hosts" : { } , "replicaSets" : { } , "ok" : 1.0}
Conecte-se ao MongoDB usando o mongo-shell e execute o seguinte comando.
por exemplo:
mongo> db.serverStatus().connections { "current" : 3, "available" : 816, "totalCreated" : NumberLong(1270) }
fonte
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 }
fonte
Conecte-se com sua instância mongodb do sistema local
Ele permitirá que você conheça todos os clientes conectados e seus detalhes
fonte
Como alternativa, você pode verificar o status da conexão fazendo login no Mongo Atlas e navegando até o seu cluster.
fonte