集群监控
Overview
本指南向您介绍如何使用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文档),以及事件发布时间的说明:
eventType | 说明 |
---|---|
在服务器描述更改时创建,例如服务器类型从从节点(secondary node from replica set)更改为主节点 (primary node in the replica set)。 | |
在拓扑结构中添加新服务器时创建。 | |
从拓扑结构中删除现有服务器时创建。 | |
在拓扑结构描述更改时创建,例如选举新的主节点 (primary node in the replica set)节点时。 | |
在驾驶员首次连接到集群时创建。 | |
当驾驶员与集群断开连接时创建。 | |
当服务器监控向服务器发送 | |
当心跳成功时创建。 | |
当 heartbeat 失败时创建。 |
删除订阅者
稍后在应用程序中,您可能不想订阅SDAM 事件。 要从客户端取消注册订阅者,请使用MongoDB\Client::removeSubscriber()
方法。 如果尝试删除不存在的订阅者,该方法不会执行任何动作。
以下代码显示如何删除在“订阅事件”部分中注册的订阅者:
$client->removeSubscriber($subscriber);
API 文档
要学习;了解有关本指南中讨论的任何类或方法的更多信息,请参阅以下API文档:
要学习;了解有关订阅者类和方法的更多信息,请参阅PHP手册中的以下页面: