クラスター モニタリング
Overview
このガイドでは、 MongoDB PHPライブラリを使用して、 MongoDBインスタンス、レプリカセット、または シャーディングされたシャーディングされたクラスターのサーバー検出とモニタリング(SDAM)イベントをモニターする方法について説明します。 これらのイベントは、接続しているMongoDBインスタンスまたはクラスターの状態が変更されたときに発生します。
アプリケーション内の SDAM イベントに関する情報を使用して、クラスターの変更を理解し、クラスターの健全性を評価したり、キャパシティープランニングを実行したりできます。
イベントにサブスクライブ
SDAM イベントは、アプリケーションでサブスクライブすることで、その詳細にアクセスできます。 イベントをサブスクライブするには、 MongoDB\Driver\Monitoring\SDAMSubscriber
インターフェースを実装するクラスを作成し、 MongoDB\Client::addSubscriber()
メソッドを使用してイベントサブスクライブをMongoDB\Client
インスタンスに登録します。
次のコードでは、 SDAMSubscriber
インターフェースを実装するMySubscriber
クラスが作成されます。 クラスは、サーバーによって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
イベントの説明
SDAM イベントをサブスクライブするには、 SDAMSubscriber
インターフェースから対応するメソッドを実装します。 次の表は、クラスのAPIドキュメントにリンクされた各 SDAMイベントの名前と、イベントが公開されるタイミングの説明を示しています。
eventType | 説明 |
---|---|
サーバーのタイプがセカンダリからプライマリに変わるなど、サーバーの説明が変更されたときに作成されます。 | |
新しいサーバーがトポロジーに追加されたときに作成されます。 | |
既存のサーバーがトポロジーから削除されたときに作成されます。 | |
新しいプライマリの選挙など、トポロジーの説明が変更されたときに作成されます。 | |
ドライバーが最初にクラスターに接続したときに作成されます。 | |
ドライバーがクラスターから切断されたときに作成されます。 | |
サーバーモニターがサーバー に hello コマンドを送信したときに作成されサーバー。 このアクションは、ハートビートと呼ばれます。 | |
ハートビートが成功したときに作成されます。 | |
ハートビートが失敗したときに作成されます。 |
モニタリング サブスクライブ クラスとイベントメソッドのリストは、「 モニタリング クラスとサブスクライブ関数 」を参照してください。 セクションをPHPしてください。
サブスクリプションを削除する
アプリケーションの後半では、SDAM イベントをサブスクライブしない場合がある場合があります。 クライアントからサブスクライブの登録を解除するには、 MongoDB\Client::removeSubscriber()
メソッドを使用します。 存在しないサブスクライブを削除しようとした場合、メソッドはアクションを実行しません。
次のコードは、「イベントへのサブスクライブ 」セクションで登録したサブスクライブを削除する方法を示しています。
$client->removeSubscriber($subscriber);
API ドキュメント
このガイドで説明するクラスやメソッドの詳細については、次のAPIドキュメントを参照してください。
サブスクライブのクラスとメソッドの詳細については、 PHPマニュアルの次のページを参照してください。