Menu Docs
Página inicial do Docs
/ / /
Driver GO
/ /

Monitoramento de clusters

Nesta página

  • Visão geral
  • Inscrever-se para receber eventos
  • Descrições de evento
  • Documentos de exemplos de eventos
  • ServerDescriptionChangedEvent
  • ServerOpeningEvent
  • ServerClosedEvent
  • TopologiaDescriptionChangedEvent
  • TopologiaOpeningEvent
  • TopologiaClosedEvent
  • ServerHeatbeatStartedEvent
  • ServerHeatbeatSucceededEvent
  • ServerHeatbeatFailedEvent
  • Documentação da API

Este guia mostra como usar o driver Go para monitorar eventos de topologia em uma instância do 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á alguma alteração no estado da instância ou cluster ao qual você está conectado.

Você pode usar informações sobre eventos de topologia em seu aplicativo para entender as alterações do cluster, avaliar a integridade do cluster ou realizar o planejamento da capacidade.

Dica

Exploração madeireira

Você também pode configurar o login em seu aplicativo para saber mais sobre eventos de motorista. Para saber mais, consulte Registro emlog.

Você pode acessar detalhes sobre eventos SDAM assinando-os em seu aplicativo. O exemplo seguinte demonstra como assinar o evento ServerClosed instanciando um ServerMonitor e conectando-se a um sistema:

var eventArray []*event.ServerClosedEvent
srvMonitor := &event.ServerMonitor{
ServerClosed: func(e *event.ServerClosedEvent) {
eventArray = append(eventArray, e)
},
}
clientOpts := options.Client().ApplyURI(uri).SetServerMonitor(srvMonitor)
client, err := mongo.Connect(context.TODO(), clientOpts)

Você pode assinar os seguintes eventos SDAM especificando propriedades de uma instância ServerMonitor :

Nome do evento
Descrição
ServerDescriptionChangedEvent
Criado quando um estado de instância muda (como de secundário para primário).
ServerOpeningEvent
Criado quando o servidor é inicializado.
ServerClosedEvent
Criado quando o servidor é fechado.
TopologyDescriptionChangedEvent
Criado quando a topologia muda, como a eleição de um novo primary ou desconexão de um proxy mongos .
TopologyOpeningEvent
Criado quando a topologia é inicializada.
TopologyClosedEvent
Criado quando a topologia é fechada.
ServerHeartbeatStartedEvent
Criado quando a pulsação é iniciada.
ServerHeartbeatSucceededEvent
Criado quando a pulsação é bem-sucedida.
ServerHeartbeatFailedEvent
Criado quando o heartbeat falha.

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

*event.ServerDescriptionChangedEvent
{
"Address": "...",
"TopologyID": "...",
"PreviousDescription": {
"Addr": "...",
"Arbiters": null,
"AverageRTT": 0,
"AverageRTTSet": false,
"Compression": null,
"CanonicalAddr": "...",
"ElectionID": "...",
"HeartbeatInterval": 0,
"HelloOK": false,
"Hosts": null,
"LastError": null,
"LastUpdateTime": "...",
"LastWriteTime": "...",
"MaxBatchCount": 0,
"MaxDocumentSize": 0,
"MaxMessageSize": 0,
"Members": null,
"Passives": null,
"Passive": false,
"Primary": "...",
"ReadOnly": false,
"ServiceID": null,
"SessionTimeoutMinutes": 0,
"SetName": "...",
"SetVersion": 0,
"Tags": null,
"TopologyVersion": null,
"Kind": 0,
"WireVersion": null
},
"NewDescription": {
"Addr": "...",
"Arbiters": null,
"AverageRTT": ...,
"AverageRTTSet": true,
"Compression": null,
"CanonicalAddr": "...",
"ElectionID": "...",
"HeartbeatInterval": ...,
"HelloOK": true,
"Hosts": [...],
"LastError": null,
"LastUpdateTime": "...",
"LastWriteTime": "...",
"MaxBatchCount": ...,
"MaxDocumentSize": ...,
"MaxMessageSize": ...,
"Members": [...],
"Passives": null,
"Passive": false,
"Primary": "...",
"ReadOnly": false,
"ServiceID": null,
"SessionTimeoutMinutes": 30,
"SetName": "...",
"SetVersion": 9,
"Tags": [...],
"TopologyVersion": {...},
"Kind": 10,
"WireVersion": {...}
}
}

O campo Kind em um documento de evento representa o tipo de um único servidor em uma topologia e pode ter os seguintes valores:

Valor
Descrição
0
Instância desconhecida
1
Instância autônomo
2
Membro do conjunto de réplicas
6
Instância primária
10
Instância secundária
18
Instância de árbitro
34
Conjunto de réplicas fantasma (um membro que não pode ser consultado)
256
mongos instância de proxy
512
Instância do balancer de carga
*event.ServerOpeningEvent
{
"Address": "...",
"TopologyID": "..."
}
*event.ServerClosedEvent
{
"Address": "...",
"TopologyID": "..."
}

Importante

Como o driver chama TopologyDescriptionChangedEvent quando a topologia de implantação está bloqueada, a chamada de resposta (argumento de função) para esse evento não deve tentar nenhuma operação que exija a seleção do servidor no mesmo cliente.

*event.TopologyDescriptionChangedEvent
{
"TopologyID": "...",
"PreviousDescription": {
"Servers": [
{
"Addr": "...",
"Arbiters": null,
"AverageRTT": 0,
"AverageRTTSet": false,
"Compression": null,
"CanonicalAddr": "...",
"ElectionID": "...",
"HeartbeatInterval": 0,
"HelloOK": false,
"Hosts": null,
"LastError": null,
"LastUpdateTime": "...",
"LastWriteTime": "...",
"MaxBatchCount": 0,
"MaxDocumentSize": 0,
"MaxMessageSize": 0,
"Members": null,
"Passives": null,
"Passive": false,
"Primary": "...",
"ReadOnly": false,
"ServiceID": null,
"SessionTimeoutMinutes": 0,
"SetName": "...",
"SetVersion": 0,
"Tags": null,
"TopologyVersion": null,
"Kind": 0,
"WireVersion": null
},
...
],
"SetName": "...",
"Kind": 10,
"SessionTimeoutMinutes": 30,
"CompatibilityErr": null
},
"NewDescription": {
"Servers": [...],
"SetName": "...",
"Kind": 10,
"SessionTimeoutMinutes": 30,
"CompatibilityErr": null
}
}

Para interpretar o valor do campo Kind , consulte aseção Valor do campo tipo .

*event.TopologyOpeningEvent
{
"TopologyID": "..."
}
*event.TopologyClosedEvent
{
"TopologyID": "..."
}
*event.ServerHeartbeatStartedEvent
{
"ConnectionID": "...",
"Awaited": true
}
*event.ServerHeartbeatSucceededEvent
{
"DurationNanos": ...,
"Reply": {
"Addr": "...",
"Arbiters": null,
"AverageRTT": 0,
"AverageRTTSet": false,
"Compression": null,
"CanonicalAddr": "...",
"ElectionID": "...",
"HeartbeatInterval": 0,
"HelloOK": true,
"Hosts": [...],
"LastError": null,
"LastUpdateTime": "...",
"LastWriteTime": "...",
"MaxBatchCount": ...,
"MaxDocumentSize": ...,
"MaxMessageSize": ...,
"Members": [...],
"Passives": null,
"Passive": false,
"Primary": "...",
"ReadOnly": false,
"ServiceID": null,
"SessionTimeoutMinutes": 30,
"SetName": "...",
"SetVersion": 9,
"Tags": [...],
"TopologyVersion": {...},
"Kind": 6,
"WireVersion": {...}
},
"ConnectionID": "...",
"Awaited": true
}

Para interpretar o valor do campo Kind, consulte a seção Valor do campo de tipo.

*event.ServerHeartbeatFailedEvent
{
"DurationNanos": ...,
"Failure": "<error message>"
"ConnectionID": "...",
"Awaited": true
}
← Monitoramento