Docs Menu
Docs Home
/ / /
PHP ライブラリ マニュアル
/

アプリケーション イベントの監視

このガイドでは、 MongoDB PHPライブラリで監視を設定および構成する方法を学習できます。

モニタリングとは、アプリケーションの実行における動作に関する情報を収集するプロセスです。この情報は、アプリケーションの設計とデバッグ時に情報に基づいた決定を行う際に役立ちます。また、モニタリング イベントの情報を使用して、アプリケーションのパフォーマンスとリソース使用量を追跡できます。

MongoDB PHPライブラリは、アプリケーション情報を提供するコマンド イベントと、SDAM(Server Discovery and Monitoring)イベントを出力します。これらのイベントをリッスンして、アプリケーションをモニター できます。

注意

このページでは、コード内でアプリケーションを監視する方法について説明します。この情報を外部ログにレコード方法については、「 ログ ドライバー イベントのガイド 」を参照してください。

ドライバーが発行するイベントの種類は、実行されている操作によって異なります。 次の表では、ドライバーが発行するイベントの種類を説明しています。

eventType
説明

コマンド イベント

MongoDBデータベースコマンドに関連するイベント(find insert、 、deletecount など)。 PHPライブラリを使用してデータベースコマンドを実行する方法については、「 データベースコマンドの実行 」を参照してください。 MongoDBデータベースコマンドの詳細については、 MongoDB Serverマニュアルの「 データベースコマンド 」を参照してください。

サーバー検出とモニタリング(SDAM)イベント

MongoDBデプロイの状態の変更に関連するイベント。

イベントを監視するには、次のアクションを実行する必要があります。

  1. イベント サブスクリプションの作成 : コマンドまたは SDAMイベントサブスクライブを実装するクラスを作成します

  2. イベント サブスクライブを登録する : を使用してモニタリングイベントサブスクライブを登録しますMongoDB\Client

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イベントをサブスクライブするには、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ドキュメントを参照してください。

サブスクライブのクラスとメソッドの詳細については、 PHPマニュアルの次のページを参照してください。

戻る

ログ記録とモニタリング

項目一覧