Menu Docs
Página inicial do Docs
/ / /
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.

Leia este guia se precisar registrar as alterações de topologia em seu aplicativo ou se quiser 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:

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

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.

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