Alerta de Load de MongoDB

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

1 Like

é só copiar, colar o script dentro do banco e então esperar o resultado?

Correto, o script provém do POP que o danilo foi autor, eu só fiz uma replicação um pouco mais precisa da documentação toda aqui no discourse, afim de acelerar a leitura

Certo, vi que anexou, muito obrigado lindão