集群监控
Overview
本指南向您介绍如何使用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文档的链接,并描述了事件的发布时间:
eventType | 说明 |
---|---|
在服务器描述更改时创建,例如服务器类型从从节点(secondary node from replica set)更改为主节点 (primary node in the replica set)。 | |
从拓扑结构中删除现有服务器时创建。 | |
在拓扑结构描述更改时创建,例如选举新的主节点 (primary node in the replica set)节点时。 | |
在驾驶员首次连接到集群时创建。 | |
当驾驶员与集群断开连接时创建。 | |
当服务器监控向服务器发送 | |
当心跳成功时创建。 | |
当 heartbeat 失败时创建。 |
API 文档
要学习;了解有关本指南中讨论的函数的更多信息,请参阅以下API文档: