文档菜单
文档首页
/ / /
PHP 库手册
/

集群监控

在本页

  • 概述
  • 订阅事件
  • 事件描述
  • 移除订阅者
  • 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 文档,以及事件发布时的描述

事件类型
描述
ServerChangedEvent
在服务器描述更改时创建,例如服务器类型从辅助更改为主要。
在拓扑中添加新服务器时创建。
在拓扑中移除现有服务器时创建。
在拓扑描述更改时创建,例如在选举新主要时。
在驱动程序首次连接到集群时创建。
在驱动程序从集群断开连接时创建。
在服务器监控器向服务器发送 hello 命令时创建。此操作称为心跳。
在心跳成功时创建。
在心跳失败时创建。

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

在你的应用中,你可能不会想继续订阅SDAM事件。要取消客户端中的订阅者注册,请使用MongoDB\Client::removeSubscriber()方法。如果你尝试移除一个不存在的订阅者,该方法不会执行任何操作。

以下代码演示了如何移除在订阅事件部分注册的订阅者

$client->removeSubscriber($subscriber);

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

  • MongoDB\Client::addSubscriber()

  • MongoDB\Client::removeSubscriber()

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

上一页

监控您的应用程序