Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/ / /
Go
/ /

Monitoramento de clusters

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 aplicação 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
}

Voltar

Monitoramento

Nesta página