集群监控
概述
本指南展示了如何使用MongoDB PHP库来监控MongoDB实例、副本集或分片集群中的服务器发现和监控(SDAM)事件。这些事件发生在您连接到的MongoDB实例或集群状态发生任何变化时。
您可以在应用程序中使用SDAM事件的信息来了解集群变化、评估集群健康或进行容量规划。
订阅事件
您可以通过在应用程序中订阅它们来访问SDAM事件的详细信息。要订阅事件,创建一个实现了MongoDB\Driver\Monitoring\SDAMSubscriber
接口的类,然后使用MongoDB\Client::addSubscriber()
方法将事件订阅者注册到您的MongoDB\Client
实例上。
以下代码创建了一个名为MySubscriber
的类,该类实现了SDAMSubscriber
接口。该类定义了一个方法,当服务器生成ServerOpeningEvent
时输出一条消息
class MySubscriber implements MongoDB\Driver\Monitoring\SDAMSubscriber { private $stream; public function __construct($stream) { $this->stream = $stream; } public function serverOpening(MongoDB\Driver\Monitoring\ServerOpeningEvent $event): void { fprintf( $this->stream, 'Server opening on %s:%s\n', $event->getHost(), $event->getPort(), ); } public function serverClosed(MongoDB\Driver\Monitoring\ServerClosedEvent $event): void {} public function serverChanged(MongoDB\Driver\Monitoring\ServerChangedEvent $event): void {} public function serverHeartbeatFailed(MongoDB\Driver\Monitoring\ServerHeartbeatFailedEvent $event): void {} public function serverHeartbeatStarted(MongoDB\Driver\Monitoring\ServerHeartbeatStartedEvent $event): void {} public function serverHeartbeatSucceeded(MongoDB\Driver\Monitoring\ServerHeartbeatSucceededEvent $event): void {} public function topologyChanged(MongoDB\Driver\Monitoring\TopologyChangedEvent $event): void {} public function topologyClosed(MongoDB\Driver\Monitoring\TopologyClosedEvent $event): void {} public function topologyOpening(MongoDB\Driver\Monitoring\TopologyOpeningEvent $event): void {} }
注意
如前述代码所示,即使对于您不订阅的事件,也必须实现SDAMSubscriber
接口的所有方法。该示例将额外方法定义为空的,以便应用程序不输出这些事件的任何消息。
然后,使用 addSubscriber()
方法将 MySubscriber
注册到客户端,如下代码所示
$subscriber = new MySubscriber(STDERR); $client->addSubscriber($subscriber);
当运行应用程序时,您的订阅者将记录 SDAM 事件并输出如下信息
Server opening on ac-rmuag0v-shard-00-00.gh0qg50.mongodb.net:27017 Server opening on ac-rmuag0v-shard-00-01.gh0qg50.mongodb.net:27017 Server opening on ac-rmuag0v-shard-00-02.gh0qg50.mongodb.net:27017
事件描述
您可以通过实现 SDAMSubscriber
接口的相应方法来订阅 SDAM 事件。以下表格提供了每个 SDAM 事件名称,链接到类的 API 文档,以及事件发布时的描述
事件类型 | 描述 |
---|---|
在服务器描述更改时创建,例如服务器类型从辅助更改为主要。 | |
在拓扑中添加新服务器时创建。 | |
在拓扑中移除现有服务器时创建。 | |
在拓扑描述更改时创建,例如在选举新主要时。 | |
在驱动程序首次连接到集群时创建。 | |
在驱动程序从集群断开连接时创建。 | |
在服务器监控器向服务器发送 hello 命令时创建。此操作称为心跳。 | |
在心跳成功时创建。 | |
在心跳失败时创建。 |
您可以在 PHP 手册的 监控类和订阅函数 部分找到监控订阅者类和事件方法的列表。
移除订阅者
在你的应用中,你可能不会想继续订阅SDAM事件。要取消客户端中的订阅者注册,请使用MongoDB\Client::removeSubscriber()
方法。如果你尝试移除一个不存在的订阅者,该方法不会执行任何操作。
以下代码演示了如何移除在订阅事件部分注册的订阅者
$client->removeSubscriber($subscriber);
API文档
要了解更多关于本指南中讨论的任何类或方法的信息,请参阅以下API文档
要了解更多关于订阅者类和方法的信息,请参阅以下PHP手册中的页面