Alerta de Load de MongoDB
Documentação para tratar do alerta de Load de um MongoDB da octadesk
Baseada no POP do autor Danilo Nascimento link: https://docs.google.com/document/d/1TR-fVqgypoGk1RYB9alV-Zeh8cFrMv13JCZbLnw7pqQ/edit?usp=sharing
1° acessar o projeto
2° Procurar a vm onde está o banco com load alto
3° procurar a vm do replicaset respectivo do alerta e clicar no botão de conectar com o SSH
4° verifique o ID do contêiner do mongo, comando:
sudo docker ps

5° Para entrar no banco primeiro segue essa listagem de comandos:
sudo su elevar para root
cd ~/mongo Para cair na home do root e entrar na pasta /mongo que tem lá
cat .env - Pegar as credenciais do banco, guarde esses valores para colocar nas variáveis do próximo comando
(não vou tirar print das credenciais do banco aparecendo no terminal)
6° Entre dentro do contêiner, observe que seu nome de usuário irá se parecer com isso, comando:
docker exec -it {id-conteiner} bash
![]()
7° acesse o banco do mongo, comando:
==mongosh --username= {variável-usuário} --password={variavel-senha} --authenticationDatabase=admin==
8° Rodar o script, ele identifica conexões ativas no banco e quais os maiores ofensores entre as collections:
db.getSiblingDB("admin").aggregate([
{ $currentOp: { allUsers: true, idleConnections: false } },
{ $match: {
"active": true,
"op": { $in: ["query", "command", "getmore"] }, // Foca em leitura/agragação
"ns": { $ne: "" }
}},
{ $project: {
_id: 0,
opid: 1,
ns: 1,
secs_running: 1,
// Se a query ainda não retornou nada, evitamos divisão por zero
ratio: {
$cond: [
{ $eq: [ "$numYields", 0 ] },
0,
"$numYields" // Yields é um ótimo proxy de carga de CPU
]
},
planSummary: 1,
command: 1
}},
// Ordena por quem mais "cedeu" a CPU (sinal de operação pesada)
{ $sort: { ratio: -1 } },
{ $limit: 10 }
]).forEach(function(op) {
print("---------------------------------------------------");
print("Collection: " + op.ns);
print("Tempo: " + op.secs_running + "s | Yields (Carga CPU): " + op.ratio);
print("Plano: " + (op.planSummary ? op.planSummary : "N/A"));
print("Query: " + JSON.stringify(op.command));
});
9° alternativa comando na VM para retornar possíveis valores úteis para análise
mongotop 2 --username=${MONGO_INITDB_ROOT_USERNAME} --password=${MONGO_INITDB_ROOT_PASSWORD} --authenticationDatabase=admin


