集群监控
概述
本指南展示了如何使用C驱动程序来监控MongoDB实例、副本集或分片集群中的服务器发现和监控(SDAM)事件。这些事件发生在您连接的MongoDB实例或集群状态发生变化时。
您可以在应用程序中使用SDAM事件的信息来理解集群变化、评估集群健康或进行容量规划。
订阅事件
您可以通过在应用程序中订阅它们来访问SDAM事件的详细信息。要订阅一个事件,定义一个应用程序性能监控(APM)回调函数来处理您想要订阅的每个事件类型。传递一个mongoc_apm_callbacks_t
对象到mongoc_client_set_apm_callbacks()
函数,以将APM回调列表注册到客户端。
以下代码通过执行以下操作来监控服务器打开事件
定义一个
server_opening()
APM回调函数创建一个
mongoc_apm_callbacks_t
对象来存储回调调用
mongoc_apm_set_server_opening_cb()
函数,该函数将提供的APM回调函数的指针存储在mongoc_apm_callbacks_t
对象中调用
mongoc_client_set_apm_callbacks()
函数,该函数将回调注册到mongoc_apm_callbacks_t
对象中的客户端
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 }
当您执行数据库操作时,驱动程序会与服务器建立新的连接,并且您的订阅者会记录服务器打开事件。代码输出类似以下信息
Server opening: <host>:<port number>
事件描述
您可以通过定义相应的APM回调函数来订阅SDAM事件。下表提供了每个SDAM事件的名称、类型API文档的链接以及事件发布时的描述。
事件类型 | 描述 |
---|---|
当服务器描述更改时创建,例如服务器类型从次要更改为主要。 | |
当新服务器添加到拓扑结构时创建。有关订阅此SDAM事件的示例应用程序,请参阅本页上的订阅事件。 | |
当从拓扑结构中删除现有服务器时创建。 | |
当拓扑结构描述更改时创建,例如当进行新主选举时。 | |
当驱动程序首次连接到集群时创建。 | |
当驱动程序从集群断开连接时创建。 | |
当服务器监控器向服务器发送 hello 命令时创建。这一动作被称为心跳。 | |
当心跳成功时创建。 | |
当心跳失败时创建。 |
您可以在API文档的应用程序性能监控部分找到每个监控订阅器类型和事件方法的详细信息。
API 文档
要了解更多关于本指南中讨论的功能,请参阅以下 API 文档