对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

监控

本指南向您介绍如何使用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#include <stdio.h>
2#include <bson/bson.h>
3#include <mongoc/mongoc.h>
4
5typedef struct {
6 int server_opening_events;
7} stats_t;
8
9static void
10server_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
18int
19main(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)。

Created when a new server is added to the topology. For an example application that subscribes to this SDAM event, see Subscribe to Events on this page.

从拓扑结构中删除现有服务器时创建。

在拓扑结构描述更改时创建,例如选举新的主节点 (primary node in the replica set)节点时。

在驱动程序首次连接到集群时创建。

当驱动程序与集群断开连接时创建。

当服务器监控向服务器发送hello命令时创建。 此动作称为心跳。

当心跳成功时创建。

当 heartbeat 失败时创建。

您可以在API文档的应用程序性能监控部分找到有关每种监控订阅者类型和事件方法的信息。

要学习;了解有关本指南中讨论的函数的更多信息,请参阅以下API文档: