Overview
Esta guía le muestra cómo usar el controlador Go para supervisar eventos de topología en una instancia de MongoDB, un conjunto de réplicas o un clúster fragmentado. El controlador crea eventos de topología, también conocidos como eventos de Descubrimiento y Monitoreo de Servidores (SDAM), cuando se produce algún cambio en el estado de la instancia o el clúster al que está conectado.
Puede utilizar información sobre eventos de topología en su aplicación para comprender los cambios del clúster, evaluar el estado del clúster o realizar una planificación de capacidad.
Tip
Registro
También puede configurar el inicio de sesión en su aplicación para obtener más información sobre los eventos del controlador. Para obtener más información, consulte Explotación florestal.
Suscríbete a Eventos
Puede acceder a detalles sobre los eventos SDAM suscribiéndose a ellos en su aplicación. El siguiente ejemplo muestra cómo suscribirse a ServerClosed evento instanciando un ServerMonitor y conectándose a una implementación:
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)
Descripciones de eventos
Puede suscribirse a los siguientes eventos SDAM especificando las propiedades de una instancia ServerMonitor:
Nombre del evento | Descripción |
|---|---|
| Se crea cuando cambia el estado de una instancia (por ejemplo, de secundaria a principal). |
| Se crea cuando se inicializa el servidor. |
| Se crea cuando se cierra el servidor. |
| Se crea cuando cambia la topología, como la elección de un nuevo servidor principal o la desconexión de un proxy |
| Se crea cuando se inicializa la topología. |
| Se crea cuando se cierra la topología. |
| Se crea cuando se inicia el latido del corazón. |
| Se crea cuando el latido tiene éxito. |
| Se crea cuando falla el latido del corazón. |
Documentos de eventos de ejemplo
Las siguientes secciones muestran la salida de ejemplo para cada tipo de evento SDAM.
Evento de cambio de descripción del servidor
*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 del campo
El campo Kind en un documento de evento representa el tipo de un solo servidor en una topología y puede tener los siguientes valores:
Valor | Descripción |
|---|---|
| Instancia desconocida |
| Instancia independiente |
| Miembro del conjunto de réplicas |
| Instancia principal |
| Instancia secundaria |
| Instancia de árbitro |
| set de réplicas ghost (un nodo que no se puede query) |
|
|
| Instancia de balanceador de carga |
ServerOpeningEvent
*event.ServerOpeningEvent { "Address": "...", "TopologyID": "..." }
Evento de servidor cerrado
*event.ServerClosedEvent { "Address": "...", "TopologyID": "..." }
Descripción de topologíaCambiadoEvento
Importante
Debido a que el controlador llama a TopologyDescriptionChangedEvent cuando la topología de implementación está bloqueada, la devolución de llamada (argumento de función) para este evento no debe intentar ninguna operación que requiera la selección del servidor en el mismo 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 el valor del campo Kind, consulte la Sección Valor del campo tipo.
Evento de apertura de topología
*event.TopologyOpeningEvent { "TopologyID": "..." }
Evento cerrado de topología
*event.TopologyClosedEvent { "TopologyID": "..." }
ServerHeartbeatStartedEvent
*event.ServerHeartbeatStartedEvent { "ConnectionID": "...", "Awaited": true }
Evento de latido del servidor exitoso
*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 el valor del Kind campo, consulte la sección Valor del campo tipo.
Evento de fallo de latido del servidor
*event.ServerHeartbeatFailedEvent { "DurationNanos": ..., "Failure": "<error message>" "ConnectionID": "...", "Awaited": true }
Documentación de la API
Tipo deServerMonitor
El método SetServerMonitor()