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
Visão geral
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.
Inscrever-se para receber eventos
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)
Descrições de evento
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. |
Documentos de exemplos de eventos
As seções a seguir mostram amostras de saída para cada tipo de evento SDAM.
ServerDescriptionChangedEvent
*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": {...} } }
Kind
Valor do campo
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 |
ServerOpeningEvent
*event.ServerOpeningEvent { "Address": "...", "TopologyID": "..." }
ServerClosedEvent
*event.ServerClosedEvent { "Address": "...", "TopologyID": "..." }
TopologiaDescriptionChangedEvent
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 .
TopologiaOpeningEvent
*event.TopologyOpeningEvent { "TopologyID": "..." }
TopologiaClosedEvent
*event.TopologyClosedEvent { "TopologyID": "..." }
ServerHeatbeatStartedEvent
*event.ServerHeartbeatStartedEvent { "ConnectionID": "...", "Awaited": true }
ServerHeatbeatSucceededEvent
*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.
ServerHeatbeatFailedEvent
*event.ServerHeartbeatFailedEvent { "DurationNanos": ..., "Failure": "<error message>" "ConnectionID": "...", "Awaited": true }
Documentação da API
Tipo doServerMonitor
SetServerMonitor() método
Pacote de evento