Overview
Esta guía le muestra cómo usar el controlador C para supervisar eventos de detección y monitorización de servidores (SDAM) en una instancia de MongoDB, un conjunto de réplicas o un clúster fragmentado. Estos eventos se producen cuando se produce algún cambio en el estado de la instancia o el clúster de MongoDB al que está conectado.
Puede utilizar información sobre eventos SDAM en su aplicación para comprender los cambios del clúster, evaluar el estado del clúster o realizar una planificación de capacidad.
Suscríbete a Eventos
Puede acceder a detalles sobre los eventos de SDAM suscribiéndose a ellos en su aplicación. Para suscribirse a un evento, defina una función de devolución de llamada de Monitoreo del Rendimiento de Aplicaciones (APM) para gestionar cada tipo de evento al que desee suscribirse. Pase un mongoc_apm_callbacks_t objeto a la función mongoc_client_set_apm_callbacks() para registrar la lista de devoluciones de llamadas APM con un cliente.
Este código monitorea los eventos de apertura del servidor realizando las siguientes acciones:
Define una función de devolución de llamada APM
server_opening()Crea un objeto
mongoc_apm_callbacks_tpara almacenar devoluciones de llamadasLlama a la función
mongoc_apm_set_server_opening_cb(), que almacena un puntero a la función de devolución de llamada APM proporcionada en el objetomongoc_apm_callbacks_tLlama a la función
mongoc_client_set_apm_callbacks(), que registra la devolución de llamada en el objetomongoc_apm_callbacks_tcon el cliente
1 2 3 4 5 typedef struct { 6 int server_opening_events; 7 } stats_t; 8 9 static void 10 server_opening(const mongoc_apm_server_opening_t *event) 11 { 12 stats_t *stats = (stats_t *) mongoc_apm_server_opening_get_context(event); 13 stats->server_opening_events += 1; 14 15 printf("Server opening: %s\n", mongoc_apm_server_opening_get_host(event)->host_and_port); 16 } 17 18 int 19 main(void) 20 { 21 mongoc_init(); 22 23 stats_t stats = {0}; 24 25 mongoc_client_t *client = mongoc_client_new("<connection string URI>"); 26 27 { 28 mongoc_apm_callbacks_t *cbs = mongoc_apm_callbacks_new(); 29 mongoc_apm_set_server_opening_cb(cbs, server_opening); 30 mongoc_client_set_apm_callbacks(client, cbs, &stats); 31 mongoc_apm_callbacks_destroy(cbs); 32 } 33 34 // Perform database operations 35 36 mongoc_client_destroy(client); 37 38 printf("Observed %d server opening events\n", stats.server_opening_events); 39 40 mongoc_cleanup(); 41 42 return EXIT_SUCCESS; 43 }
Al realizar una operación de base de datos, el controlador establece una nueva conexión con el servidor y el suscriptor registra el evento de apertura del servidor. El código genera mensajes similares a los siguientes:
Server opening: <host>:<port number>
Descripciones de eventos
Puede suscribirse a eventos SDAM definiendo la función de devolución de llamada de APM correspondiente. La siguiente tabla proporciona el nombre de cada evento SDAM, enlaces a la documentación de la API del tipo y describe cuándo se publica el evento:
Tipo de evento | Descripción |
|---|---|
Se crea cuando cambia la descripción del servidor, por ejemplo cuando el tipo de servidor cambia de secundario a principal. | |
Se crea cuando se agrega un nuevo servidor a la topología. Para ver un ejemplo de aplicación que se suscribe a este evento SDAM, consulte Suscríbete a los eventos en esta página. | |
Se crea cuando se elimina un servidor existente de la topología. | |
Se crea cuando cambia la descripción de la topología, como cuando hay una elección de un nuevo primario. | |
Se crea cuando el controlador se conecta por primera vez al clúster. | |
Se crea cuando el controlador se desconecta del clúster. | |
Se crea cuando el monitor del servidor envía un comando | |
Se crea cuando el latido tiene éxito. | |
Se crea cuando falla el latido del corazón. |
Puede encontrar información sobre cada tipo de suscriptor de monitoreo y método de evento en la sección Monitoreo del rendimiento de la aplicación de la documentación de la API.
Documentación de la API
Para obtener más información sobre las funciones analizadas en esta guía, consulte la siguiente documentación de API: