Docs 菜单
Docs 主页
/ / /
PHP 库手册
/

集群监控

在此页面上

  • Overview
  • 订阅事件
  • 事件描述
  • 删除订阅者
  • API 文档

本指南向您介绍如何使用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
说明

ServerChangedEvent

在服务器描述更改时创建,例如服务器类型从从节点(secondary node from replica set)更改为主节点 (primary node in the replica set)。

在拓扑结构中添加新服务器时创建。

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

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

在驾驶员首次连接到集群时创建。

当驾驶员与集群断开连接时创建。

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

当心跳成功时创建。

当 heartbeat 失败时创建。

您可以在 监控类和订阅者函数 中找到监控订阅者类和事件方法的列表。 PHP手册的 部分。

稍后在应用程序中,您可能不想订阅SDAM 事件。 要从客户端取消注册订阅者,请使用MongoDB\Client::removeSubscriber()方法。 如果尝试删除不存在的订阅者,该方法不会执行任何动作。

以下代码显示如何删除在“订阅事件”部分中注册的订阅者

$client->removeSubscriber($subscriber);

要学习;了解有关本指南中讨论的任何类或方法的更多信息,请参阅以下API文档:

  • MongoDB\Client::addSubscriber()

  • MongoDB\Client::removeSubscriber()

要学习;了解有关订阅者类和方法的更多信息,请参阅PHP手册中的以下页面:

后退

监控您的应用程序