Menu Docs

Página inicial do DocsDesenvolver aplicaçõesMongoDB DriversControlador Node.js

Monitoramento de clusters

Nesta página

  • Visão geral
  • Exemplo de inscrição de eventos
  • Descrições de evento
  • Documentos de exemplos de eventos
  • serverDescriptionChanged
  • serverHeatbeatStarted
  • serverHeatbeatSucceeded
  • serverHeatbeatFailed
  • serverOpening
  • servidor fechado
  • topologiaOpening
  • topologiaFechada
  • topologiaDescriptionChanged

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.

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);

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.

As seções a seguir mostram amostras de saída para cada tipo de evento SDAM.

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
ServerHeartbeatStartedEvent {
connectionId: 'localhost:27017'
}
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'
}
ServerHeartbeatFailed {
duration: 20,
failure: MongoError('some error'),
connectionId: 'localhost:27017'
}
ServerOpeningEvent {
topologyId: 0,
address: 'localhost:27017'
}
ServerClosedEvent {
topologyId: 0,
address: 'localhost:27017'
}
TopologyOpeningEvent {
topologyId: 0
}
TopologyClosedEvent {
topologyId: 0
}
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
← Monitoramento