Monitoramento de clusters
Nesta página
Visão geral
Este guia mostra como monitorar eventos de topologia em uma instância MongoDB, conjunto de réplicas ou cluster fragmentado. O driver cria eventos de topologia, também conhecidos como eventos de descoberta e monitoramento de servidor (SDAM), quando há uma alteração no estado da instância ou cluster ao qual você se conectou. Por exemplo, o driver cria um evento quando você estabelece uma nova conexão ou se o cluster optar por um novo primary.
Leia este guia se precisar registrar as alterações de topologia em seu aplicativo ou se quiser explorar as informações fornecidas nesses eventos.
Exemplo de inscrição de eventos
Você pode acessar um ou mais eventos SDAM usando o driver assinando-os no seu aplicativo. O exemplo a seguir demonstra a conexão com um conjunto de réplicas e a assinatura de um dos eventos SDAM criados pelo sistema do MongoDB:
const { MongoClient } = require("mongodb"); // Replace the following with your MongoDB deployment's connection // string. const uri = "mongodb+srv://<clusterUrl>/?replicaSet=rs&writeConcern=majority"; const client = new MongoClient(uri); // Replace <event name> with the name of the event you are subscribing to. const eventName = "<event name>"; client.on(eventName, event => { console.log(`received ${eventName}: ${JSON.stringify(event, null, 2)}`); }); async function run() { try { // Establish and verify connection await client.db("admin").command({ ping: 1 }); console.log("Connected successfully"); } finally { // Ensures that the client will close when you finish/error await client.close(); } } run().catch(console.dir);
Descrições de evento
Você pode assinar qualquer um dos seguintes eventos do SDAM:
Nome do evento | Descrição |
---|---|
serverOpening | Criado quando uma conexão com uma instância é aberta. |
serverClosed | Criado quando uma conexão com uma instância é fechada. |
serverDescriptionChanged | Criado quando um estado de instância muda (como de secundário para primário). |
topologyOpening | Criado antes de tentar uma conexão com uma instância. |
topologyClosed | Criado após o fechamento de todas as conexões de instância na topologia. |
topologyDescriptionChanged | Criado quando a topologia muda, como a eleição de um novo primary ou a desconexão de um proxy mongos . |
serverHeartbeatStarted | Criado antes de emitir um comando hello para uma instância do MongoDB. |
serverHeartbeatSucceeded | Criado quando o comando hello retorna com sucesso de uma instância do MongoDB. |
serverHeartbeatFailed | Criado quando um comando hello emitido para uma instância específica do MongoDB não retorna uma resposta bem-sucedida. |
Documentos de exemplos de eventos
As seções a seguir mostram amostras de saída para cada tipo de evento SDAM.
serverDescriptionChanged
ServerDescriptionChangedEvent { topologyId: 0, address: 'localhost:27017', previousDescription: ServerDescription { address: 'localhost:27017', error: null, roundTripTime: 0, lastUpdateTime: 1571251089030, lastWriteDate: null, opTime: null, type: 'Unknown', minWireVersion: 0, maxWireVersion: 0, hosts: [], passives: [], arbiters: [], tags: [] }, newDescription: ServerDescription { address: 'localhost:27017', error: null, roundTripTime: 0, lastUpdateTime: 1571251089051, lastWriteDate: 2019-10-16T18:38:07.000Z, opTime: { ts: Timestamp, t: 18 }, type: 'RSPrimary', minWireVersion: 0, maxWireVersion: 7, maxBsonObjectSize: 16777216, maxMessageSizeBytes: 48000000, maxWriteBatchSize: 100000, me: 'localhost:27017', hosts: [ 'localhost:27017' ], passives: [], arbiters: [], tags: [], setName: 'rs', setVersion: 1, electionId: ObjectID, primary: 'localhost:27017', logicalSessionTimeoutMinutes: 30, '$clusterTime': ClusterTime } }
O campo type
do objeto ServerDescription
neste evento contém um dos seguintes valores possíveis:
Tipo | Descrição |
---|---|
Unknown | Instância desconhecida |
Standalone | Instância autônomo |
Mongos | Instância de proxy do Mongos |
PossiblePrimary | Pelo menos um servidor reconhece isso como o principal, mas ainda não foi verificado por todas as instâncias. |
RSPrimary | Instância primária |
RSSecondary | Instância secundária |
RSArbiter | Instância de árbitro |
RSOther | Consulte a especificação do RSGhost e do RSOther para mais detalhes |
RSGhost | Consulte a especificação do RSGhost e do RSOther para mais detalhes |
serverHeatbeatStarted
ServerHeartbeatStartedEvent { connectionId: 'localhost:27017' }
serverHeatbeatSucceeded
ServerHeartbeatSucceededEvent { duration: 1.939997, reply:{ hosts: [ 'localhost:27017' ], setName: 'rs', setVersion: 1, isWritablePrimary: true, secondary: false, primary: 'localhost:27017', me: 'localhost:27017', electionId: ObjectID, lastWrite: { opTime: { ts: [Timestamp], t: 18 }, lastWriteDate: 2019-10-16T18:38:17.000Z, majorityOpTime: { ts: [Timestamp], t: 18 }, majorityWriteDate: 2019-10-16T18:38:17.000Z }, maxBsonObjectSize: 16777216, maxMessageSizeBytes: 48000000, maxWriteBatchSize: 100000, localTime: 2019-10-16T18:38:19.589Z, logicalSessionTimeoutMinutes: 30, minWireVersion: 0, maxWireVersion: 7, readOnly: false, ok: 1, operationTime: Timestamp, '$clusterTime': ClusterTime }, connectionId: 'localhost:27017' }
serverHeatbeatFailed
ServerHeartbeatFailed { duration: 20, failure: MongoError('some error'), connectionId: 'localhost:27017' }
serverOpening
ServerOpeningEvent { topologyId: 0, address: 'localhost:27017' }
servidor fechado
ServerClosedEvent { topologyId: 0, address: 'localhost:27017' }
topologiaOpening
TopologyOpeningEvent { topologyId: 0 }
topologiaFechada
TopologyClosedEvent { topologyId: 0 }
topologiaDescriptionChanged
TopologyDescriptionChangedEvent { topologyId: 0, previousDescription: TopologyDescription { type: 'ReplicaSetNoPrimary', setName: null, maxSetVersion: null, maxElectionId: null, servers: Map { 'localhost:27017' => ServerDescription }, stale: false, compatible: true, compatibilityError: null, logicalSessionTimeoutMinutes: null, heartbeatFrequencyMS: 10000, localThresholdMS: 15, options: Object, error: undefined, commonWireVersion: null }, newDescription: TopologyDescription { type: 'ReplicaSetWithPrimary', setName: 'rs', maxSetVersion: 1, maxElectionId: null, servers: Map { 'localhost:27017' => ServerDescription }, stale: false, compatible: true, compatibilityError: null, logicalSessionTimeoutMinutes: 30, heartbeatFrequencyMS: 10000, localThresholdMS: 15, options: Object, error: undefined, commonWireVersion: 7 } }
O campo type
do objeto TopologyDescription
neste evento contém um dos seguintes valores possíveis:
Tipo | Descrição |
---|---|
Single | Instância autônomo |
ReplicaSetWithPrimary | Conjunto de réplicas com um primary |
ReplicaSetNoPrimary | Conjunto de réplicas sem primário |
Sharded | cluster fragmentado |
Unknown | topologia desconhecida |