Docs Menu
Docs Home
/ /

Monitoreo de clústeres

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.

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)

Puede suscribirse a los siguientes eventos SDAM especificando las propiedades de una instancia ServerMonitor:

Nombre del evento
Descripción

ServerDescriptionChangedEvent

Se crea cuando cambia el estado de una instancia (por ejemplo, de secundaria a principal).

ServerOpeningEvent

Se crea cuando se inicializa el servidor.

ServerClosedEvent

Se crea cuando se cierra el servidor.

TopologyDescriptionChangedEvent

Se crea cuando cambia la topología, como la elección de un nuevo servidor principal o la desconexión de un proxy mongos.

TopologyOpeningEvent

Se crea cuando se inicializa la topología.

TopologyClosedEvent

Se crea cuando se cierra la topología.

ServerHeartbeatStartedEvent

Se crea cuando se inicia el latido del corazón.

ServerHeartbeatSucceededEvent

Se crea cuando el latido tiene éxito.

ServerHeartbeatFailedEvent

Se crea cuando falla el latido del corazón.

Las siguientes secciones muestran la salida de ejemplo 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": {...}
}
}

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

0

Instancia desconocida

1

Instancia independiente

2

Miembro del conjunto de réplicas

6

Instancia principal

10

Instancia secundaria

18

Instancia de árbitro

34

set de réplicas ghost (un nodo que no se puede query)

256

mongos instancia de proxy

512

Instancia de balanceador de carga

*event.ServerOpeningEvent
{
"Address": "...",
"TopologyID": "..."
}
*event.ServerClosedEvent
{
"Address": "...",
"TopologyID": "..."
}

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.

*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 el valor del Kind campo, consulte la sección Valor del campo tipo.

*event.ServerHeartbeatFailedEvent
{
"DurationNanos": ...,
"Failure": "<error message>"
"ConnectionID": "...",
"Awaited": true
}
  • Tipo deServerMonitor

  • El método SetServerMonitor()

  • paquete de eventos

Volver

Monitoring

En esta página