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对象中
<stdio.h> <bson/bson.h> <mongoc/mongoc.h>
typedef struct { int server_opening_events;} stats_t;
static voidserver_opening(const mongoc_apm_server_opening_t *event){ stats_t *stats = (stats_t *) mongoc_apm_server_opening_get_context(event); stats->server_opening_events += 1;
printf("Server opening: %s\n", mongoc_apm_server_opening_get_host(event)->host_and_port);}
intmain(void){ mongoc_init();
stats_t stats = {0};
mongoc_client_t *client = mongoc_client_new("<connection string URI>"); { mongoc_apm_callbacks_t *cbs = mongoc_apm_callbacks_new(); mongoc_apm_set_server_opening_cb(cbs, server_opening); mongoc_client_set_apm_callbacks(client, cbs, &stats); mongoc_apm_callbacks_destroy(cbs); }
// Perform database operations
mongoc_client_destroy(client);
printf("Observed %d server opening events\n", stats.server_opening_events);
mongoc_cleanup();
return EXIT_SUCCESS;}当您执行数据库操作时,驱动程序会建立与服务器的新连接,并且您的订阅者会记录服务器打开事件。该代码输出类似于以下内容的消息:
Server opening: <host>:<port number>事件描述
您可以通过定义相应的 APM回调函数来订阅SDAM 事件。 下表提供了每个 SDAM事件的名称、该类型的API文档的链接并描述了事件的发布时间:
eventType | 说明 |
|---|---|
在服务器描述更改时创建,例如服务器类型从从节点(secondary node from replica set)更改为主节点 (primary node in the replica set)。 | |
在拓扑结构中添加新服务器时创建。有关订阅此 SDAM 事件的示例应用程序,请参阅本页上的订阅事件。 | |
从拓扑结构中删除现有服务器时创建。 | |
在拓扑结构描述更改时创建,例如选举新的主节点 (primary node in the replica set)节点时。 | |
在驱动程序首次连接到集群时创建。 | |
当驱动程序与集群断开连接时创建。 | |
当服务器监控向服务器发送 | |
当心跳成功时创建。 | |
当 heartbeat 失败时创建。 |
您可以在API文档的应用程序性能监控部分找到有关每种监控订阅者类型和事件方法的信息。
API 文档
要学习;了解有关本指南中讨论的函数的更多信息,请参阅以下API文档: