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

监控应用程序事件

在本指南中,您可以学习;了解如何在MongoDB PHP库中设立和配置监控。

监控是在应用程序运行时收集有关应用程序行为的信息的进程。这些信息可以帮助您在设计和调试应用程序时做出明智的决策。您还可以使用监控事件中的信息来追踪应用程序的性能和资源使用情况。

MongoDB PHP库会发出命令事件以及提供应用程序信息的服务器发现和监控 (SDAM) 事件。您可以侦听这些事件以监控您的应用程序。

注意

本页介绍如何在代码中监控应用程序。要学习;了解如何将此信息记录到外部日志中,请参阅 日志驱动程序事件指南。

驾驶员发出的事件类型取决于正在执行的操作。 下表描述了驾驶员发出的事件类型:

eventType
说明

命令事件

与MongoDB 数据库命令相关的事件,例如findinsertdeletecount 。要学习;了解如何使用PHP库运行数据库命令,请参阅运行数据库命令。有关MongoDB 数据库命令的更多信息,请参阅MongoDB Server手册中的 数据库命令。

服务器发现和监控 (SDAM) 事件

与MongoDB 部署状态更改相关的事件。

要监控事件,您必须执行以下操作:

  1. 创建事件订阅器:创建用于实施命令或 SDAM事件订阅器的类

  2. 注册事件订阅者:使用您的 注册监控事件订阅者MongoDB\Client

提示

要查看可以订阅的监控事件列表,请参阅PHP手册的“监控类和订阅者函数” 部分。

要订阅监控事件,请创建一个实现事件订阅者接口的类。您可以实现以下接口:

  • MongoDB\Driver\Monitoring\CommandSubscriber,订阅命令事件

  • MongoDB\Driver\Monitoring\SDAMSubscriber,订阅 SDAM 事件

要订阅SDAM事件,请创建一个实现 MongoDB\Driver\Monitoring\CommandSubscriber 接口的类。在您的类中,定义每个 CommandSubscriber 方法。下表描述了这些方法以及它们接收通知的命令事件:

方法
命令事件
说明

命令不成功时调用

在向服务器发送命令时调用

命令成功时调用

以下代码创建 MyCommandSubscriber 类,该类实现 CommandSubscriber 接口。该类定义了每个 CommandSubscriber 方法,并包含 commandStarted() 方法的自定义逻辑,该逻辑会打印服务器收到的每个新命令的详细信息:

class MyCommandSubscriber implements MongoDB\Driver\Monitoring\CommandSubscriber
{
/** @param resource $stream */
public function __construct(private $stream)
{
}
public function commandStarted(MongoDB\Driver\Monitoring\CommandStartedEvent $event): void
{
fwrite($this->stream, sprintf(
'Started command #%d "%s": %s%s',
$event->getRequestId(),
$event->getCommandName(),
MongoDB\BSON\Document::fromPHP($event->getCommand())->toCanonicalExtendedJSON(),
PHP_EOL,
));
}
public function commandSucceeded(MongoDB\Driver\Monitoring\CommandSucceededEvent $event): void
{
}
public function commandFailed(MongoDB\Driver\Monitoring\CommandFailedEvent $event): void
{
}
}

要订阅SDAM事件,请创建一个实现 MongoDB\Driver\Monitoring\SDAMSubscriber 接口的类。在您的类中,定义每个 SDAMSubscriber 方法。下表描述了这些方法以及它们接收通知的命令事件:

方法
SDAM 事件
说明

在服务器描述更改时调用

从拓扑结构中删除服务器时调用

服务器心跳不成功时调用

在服务器收到心跳时调用

服务器心跳成功时调用

在拓扑结构中添加新服务器时调用

拓扑结构描述更改时调用

在拓扑结构关闭时调用

打开拓扑结构时调用

以下代码创建 MySDAMSubscriber 类,该类实现 SDAMSubscriber 接口。该类定义了每个 SDAMSubscriber 方法,并包含 serverOpening() 方法的自定义逻辑,该逻辑会打印有关添加到拓扑结构中的服务器的详细信息:

class MySDAMSubscriber implements MongoDB\Driver\Monitoring\SDAMSubscriber
{
/** @param resource $stream */
public function __construct(private $stream)
{
}
public function serverOpening(MongoDB\Driver\Monitoring\ServerOpeningEvent $event): void
{
fprintf(
$this->stream,
'Server opening on %s:%s\n',
$event->getHost(),
$event->getPort(),
PHP_EOL,
);
}
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
{
}
}

创建实现订阅者接口的类后,必须向 MongoDB\Client 注册此类,才能接收客户端的事件通知。要注册订阅者,请调用 MongoDB\Client::addSubscriber() 方法并将订阅者类的实例作为参数传递。

以下代码使用 注册此命令以及在此页面的“创建事件订阅者”部分中创建的 SDAM事件订阅者:MongoDB\Client

$commandSub = new MyCommandSubscriber(STDERR);
$sdamSub = new MySDAMSubscriber(STDERR);
$client->addSubscriber($commandSub);
$client->addSubscriber($sdamSub);

当您启动应用程序并运行插入命令时,您的订阅者记录类似于以下内容的事件并输出消息:

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
Started command #3 "insert": { "insert" : ... }

要从客户端端取消注册订阅者,请使用 MongoDB\Client::removeSubscriber() 方法。

以下代码展示了如何删除在本页的“命令事件订阅者示例”部分中创建的订阅者:

$client->removeSubscriber($commandSub);

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

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

后退

日志记录和监控

在此页面上