Overview
在本指南中,您可以学习;了解如何在MongoDB C++驱动程序中设立和配置监控。
监控包括收集运行的程序的活动信息,您可以将这些信息与应用程序性能管理库一起使用。
通过监控C++驾驶员,可以了解驱动程序的资源使用情况和性能。这些信息可以帮助您在设计和调试应用程序时做出明智的决策。
本指南介绍如何执行以下任务:
监控命令事件
当客户端运行数据库命令时, C++驾驶员会创建命令事件。示例,find、insert、delete 和 count 命令会生成命令事件。您可以通过运行驱动程序的标准创建、读取、更新或删除操作,或直接使用数据库命令来启动这些命令。
您可以通过在应用程序中订阅命令事件来访问权限有关命令事件的详细信息。要订阅命令事件,请创建 mongocxx::options::apm对象来存储应用程序性能监控 (APM) 配置。然后,将选项传递给您的 mongocxx::client对象。对 mongocxx::options::apm对象调用以下方法以设立命令监控行为:
方法 | 说明 |
|---|---|
| 指定命令启动时客户端如何响应,该命令会生成
|
| 指定命令不成功时客户端如何响应,这会生成 |
| 指定命令成功时客户端如何响应,这会生成 |
以下代码通过执行以下操作来监控命令启动的事件:
在
mongocxx::options::apm对象上调用on_command_started()方法将回调给
on_command_started(),以打印每个命令的名称和请求ID使用这些选项配置客户端
1 2 3 4 5 6 7 int main() { 8 mongocxx::instance instance{}; 9 10 int command_started_events = 0; 11 12 mongocxx::options::apm apm_opts; 13 apm_opts.on_command_started([&command_started_events](const mongocxx::events::command_started_event& event) { 14 command_started_events++; 15 std::cout << "Command started: " << event.command_name() 16 << " (request_id: " << event.request_id() << ")" << std::endl; 17 }); 18 19 mongocxx::uri uri("<connection string URI>"); 20 mongocxx::options::client client_opts; 21 client_opts.apm_opts(apm_opts); 22 23 mongocxx::client client{uri, client_opts}; 24 25 // Perform database operations 26 27 std::cout << "Observed " << command_started_events << " command started events" << std::endl; 28 29 return 0; 30 }
运行find 命令时,代码会打印类似于以下示例输出的消息:
Command started: find (request_id: 3)
监控服务器发现和监控 (SDAM) 事件
当您连接到的实例或集群的状态发生变化时, C++驾驶员会创建拓扑结构事件(也称为 SDAM 事件)。示例,当您建立新连接或集群选举新的主节点 (primary node in the replica set)节点时,驾驶员会创建一个事件。
要学习;了解有关拓扑结构事件的更多信息,请参阅服务器手册中的复制指南。
您可以通过在应用程序中订阅SDAM 事件来访问权限有关这些事件的详细信息。要订阅SDAM事件,请创建一个 mongocxx::options::apm对象来存储您的 APM 配置。然后,将选项传递给您的 mongocxx::client对象。对 mongocxx::options::apm对象调用以下方法以设立SDAM监控行为:
方法 | 说明 |
|---|---|
| 指定当服务器描述更改时客户端如何响应,这会生成 |
| 指定在拓扑结构中添加新服务器时客户端如何响应,这会生成 |
| 指定从拓扑结构中删除服务器时客户端如何响应,这会生成 |
| 指定当拓扑结构描述发生变化时客户端如何响应,这会生成 |
| 指定当驾驶员首次连接到集群时客户端如何响应,这会生成 |
| 指定当驾驶员与集群断开连接时客户端如何响应,这会生成 |
| 指定向服务器发送心跳时客户端如何响应,服务器生成 |
| 指定心跳成功时客户端如何响应,这会生成 |
| 指定心跳失败时客户端如何响应,这会生成 |
以下代码通过执行以下操作来监控服务器打开事件:
在
mongocxx::options::apm对象上调用on_server_opening()方法将回调给
on_server_opening(),以打印每个服务器的托管和端口使用这些选项配置客户端
1 2 3 4 5 6 7 int main() { 8 mongocxx::instance instance{}; 9 10 int server_opening_events = 0; 11 12 mongocxx::options::apm apm_opts; 13 apm_opts.on_server_opening([&server_opening_events](const mongocxx::events::server_opening_event& event) { 14 server_opening_events++; 15 std::cout << "Server opening: " << event.host() << ":" << event.port() << std::endl; 16 }); 17 18 mongocxx::uri uri("<connection string URI>"); 19 mongocxx::options::client client_opts; 20 client_opts.apm_opts(apm_opts); 21 22 mongocxx::client client{uri, client_opts}; 23 24 // Perform database operations 25 26 std::cout << "Observed " << server_opening_events << " server opening events" << std::endl; 27 28 return 0; 29 }
当您执行数据库操作时,驾驶员会建立与服务器的新连接,并且您的订阅者会记录服务器打开事件。该代码输出类似于以下内容的消息:
Server opening: <host>:<port number>
事件描述
您可以通过创建接受事件类对象作为参数的回调函数来订阅监控事件。下表提供了每个事件类的名称、该类型的API文档链接并描述了事件的发布时间:
事件处理程序类 | 说明 |
|---|---|
启动命令时创建。 | |
命令成功时创建。 | |
命令失败时创建。 | |
在服务器描述发生更改时创建,例如当服务器类型从从节点(secondary node from replica set)更改为主节点 (primary node in the replica set)。 | |
在拓扑结构中添加新服务器时创建。 | |
从拓扑结构中删除现有服务器时创建。 | |
在拓扑结构描述更改时创建,例如选举新的主节点 (primary node in the replica set)节点时。 | |
在驱动程序首次连接到集群时创建。 | |
当驱动程序与集群断开连接时创建。 | |
当服务器监控向服务器发送 | |
当心跳成功时创建。 | |
当 heartbeat 失败时创建。 |
您可以在API文档的应用程序性能监控部分找到有关每种监控订阅者类型和事件方法的信息。
API 文档
要学习;了解有关本指南中讨论的类和方法的更多信息,请参阅以下API文档: