Overview
このガイドでは、 MongoDB PHPライブラリで監視を設定および構成する方法を学習できます。
モニタリングとは、アプリケーションの実行における動作に関する情報を収集するプロセスです。この情報は、アプリケーションの設計とデバッグ時に情報に基づいた決定を行う際に役立ちます。また、モニタリング イベントの情報を使用して、アプリケーションのパフォーマンスとリソース使用量を追跡できます。
MongoDB PHPライブラリは、アプリケーション情報を提供するコマンド イベントと、SDAM(Server Discovery and Monitoring)イベントを出力します。これらのイベントをリッスンして、アプリケーションをモニター できます。
注意
このページでは、コード内でアプリケーションを監視する方法について説明します。この情報を外部ログにレコード方法については、「 ログ ドライバー イベントのガイド 」を参照してください。
イベントの種類
ドライバーが発行するイベントの種類は、実行されている操作によって異なります。 次の表では、ドライバーが発行するイベントの種類を説明しています。
イベントの監視
イベントを監視するには、次のアクションを実行する必要があります。
Tip
サブスクライブできるモニタリング イベントのリストを表示するには、 PHPマニュアルの「 モニタリング クラスとサブスクライブ関数 」セクションを参照してください。
イベント サブスクリプションの作成
モニタリングイベントをサブスクライブするには、イベントサブスクライブ インターフェースを実装するクラスを作成します。次のインターフェースを実装できます。
MongoDB\Driver\Monitoring\CommandSubscriber
は、コマンド イベントをサブスクライブしますMongoDB\Driver\Monitoring\SDAMSubscriber
は、SDAM イベントをサブスクライブします
コマンド イベント サブスクリプションの例
SDAMイベントをサブスクライブするには、MongoDB\Driver\Monitoring\CommandSubscriber
インターフェースを実装するクラスを作成します。クラスで、各 CommandSubscriber
メソッドを定義します。次の表では、これらのメソッドと、それらが通知を受信するコマンド イベントについて説明しています。
方式 | コマンド イベント | 説明 |
---|---|---|
コマンドが成功しない場合に呼び出されます | ||
コマンドがサーバーに送信されたときに呼び出されます | ||
コマンドが成功したときに呼び出されます |
次のコードでは、CommandSubscriber
インターフェースを実装する MyCommandSubscriber
クラスが作成されます。クラスは各 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 イベント サブスクリプションの例
SDAMイベントをサブスクライブするには、MongoDB\Driver\Monitoring\SDAMSubscriber
インターフェースを実装するクラスを作成します。クラスで、各 SDAMSubscriber
メソッドを定義します。次の表では、これらのメソッドと、それらが通知を受信するコマンド イベントについて説明しています。
方式 | SDAM イベント | 説明 |
---|---|---|
サーバーの説明が変更されたときに呼び出されます | ||
サーバーがトポロジーから削除されたときに呼び出されます | ||
サーバーのハートビートが失敗した場合に呼び出されます | ||
サーバーがハートビートを受信したときに呼び出される | ||
サーバーのハートビートが成功したときに呼び出されます | ||
新しいサーバーがトポロジーに追加されたときに呼び出されます | ||
トポロジーの説明が変更されたときに呼び出されます | ||
トポロジーが閉じられたときに呼び出されます | ||
トポロジーが開かれたときに呼び出される |
次のコードでは、SDAMSubscriber
インターフェースを実装する MySDAMSubscriber
クラスが作成されます。クラスは各 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 ドキュメント
このガイドで説明するクラスやメソッドの詳細については、次のAPIドキュメントを参照してください。
サブスクライブのクラスとメソッドの詳細については、 PHPマニュアルの次のページを参照してください。