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.
As seções a seguir demonstram como registrar as alterações de topologia em seu aplicativo e 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:
/* Subscribe to SDAM event */ 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>"; // Subscribe to a specified event and print a message when the event is received client.on(eventName, event => { console.log(`received ${eventName}: ${JSON.stringify(event, null, 2)}`); }); async function run() { try { // Establish and verify connection to the database await client.db("admin").command({ ping: 1 }); console.log("Connected successfully"); } finally { // Close the database connection on completion or 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 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 RSGhost e RSOTHER para obter 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 |