Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Supervisión del clúster

Esta guía te muestra cómo utilizar el driver de Go para supervisar eventos de topología en una instancia de MongoDB, un set de réplicas o un clúster. El driver crea eventos de topología, también conocidos como eventos de Descubrimiento y Supervisión de Servidores (SDAM), cuando hay cambios en el estado de la instancia o el clúster al que está conectado.

Podrías utilizar información sobre eventos de topología en tu aplicación para comprender cambios en el clúster, evaluar el estado del clúster o realizar la planificación de la capacidad.

Tip

Registro

También se puede configurar el registro de eventos en la aplicación para obtener más información sobre los eventos del driver. Para obtener más información, consulte Registro.

Puedes acceder a detalles sobre los eventos SDAM suscribiéndote a ellos en tu aplicación. El siguiente ejemplo demuestra cómo suscribirse a la ServerClosed evento mediante la instanciación de un ServerMonitor y la conexión 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)

Puedes suscribirte 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 la topología cambia, como por ejemplo una elección de uno nuevo principal o la desconexión de un proxy mongos.

TopologyOpeningEvent

Se crea cuando se inicializa la topología.

TopologyClosedEvent

Creado cuando la topología se cierra.

ServerHeartbeatStartedEvent

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

ServerHeartbeatSucceededEvent

Se crea cuando el latido cardíaco tiene éxito.

ServerHeartbeatFailedEvent

Se crea cuando falla la señal de vida.

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 autónoma

2

Set 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 proxy

512

Instancia de balanceador de carga

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

Importante

Debido a que el driver llama TopologyDescriptionChangedEvent cuando la topología de implementación está bloqueada, la función de retorno (argumento de la función) para este evento no debe intentar ninguna operación que requiera la selección de servidores 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 el Sección Valor del campo de 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 campo Kind, consulta la sección Valor de campo "Kind".

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

Volver

Monitoring

En esta página