Docs Menu
Docs Home
/ / /
Java Reactive Streams ドライバー
/

JMX モニタリング

項目一覧

  • コマンド監視
  • クラスター モニタリング
  • 接続プールの監視

ドライバーは JTX を使用します で macOS を作成する ドライバーのさまざまな側面を監視できるようになります。

ドライバーは、単一のタイプConnectionPoolStatisticsMBean MXBeanインスタンスを作成します。 ドライバーは、接続するサーバーごとに 1 つのConnectionPoolStatisticsMBeanインスタンスを登録します。 たとえば、レプリカセットに接続すると、ドライバーはレプリカセットの非表示でないメンバーごとに インスタンスを作成します。

MXBeanインスタンスは、ドメインと名前付きプロパティのセットで構成される一意のオブジェクト名で登録する必要があります。 ドライバーによって作成されたすべてのMXBeanインスタンスは、ドメインorg.mongodb.driverの下にあります。 ConnectionPoolStatisticsMBeanのインスタンスには次のプロパティがあります。

  • clusterId: クライアントが生成した一意の識別子で、アプリケーションが同じ MongoDB サーバー配置に接続されている複数のMongoClientインスタンスがある状況でオブジェクト名の一意性を確保するために必要です。

  • host: サーバーのホスト名

  • port: サーバーがリッスンしているポート

  • minSize: アイドル状態と使用中のノードを含む、プールの最小許可サイズ

  • maxSize: アイドル状態と使用中のノードを含む、プールの最大許容サイズ

  • size: アイドル状態と使用中のノードを含むプールの現在のサイズ

  • checkedOutCount: 現在使用中の接続の現在の数

JTX 接続プールのモニタリングはデフォルトで無効になっています。 これを有効にするには、 MongoClientSettingsインスタンスの作成時にcom.mongodb.management.JMXConnectionPoolListenerインスタンスを追加する必要があります。

MongoClientSettings settings =
MongoClientSettings.builder()
.applyToConnectionPoolSettings(builder -> builder.addConnectionPoolListener(new JMXConnectionPoolListener()))
.build();

ドライバーは コマンド監視仕様を実装し、コマンドが開始されたときとコマンドが成功または失敗したときにアプリケーションに通知できるようにします。

アプリケーションは、 CommandListenerインターフェースを実装するクラスのインスタンスを含むMongoClientSettingsインスタンスを構成することで、コマンド リスナーをMongoClientに登録します。 次の例は、 CommandListenerインターフェースの簡単な実装です。

public class TestCommandListener implements CommandListener {
@Override
public void commandStarted(final CommandStartedEvent event) {
System.out.println(String.format("Sent command '%s:%s' with id %s to database '%s' "
+ "on connection '%s' to server '%s'",
event.getCommandName(),
event.getCommand().get(event.getCommandName()),
event.getRequestId(),
event.getDatabaseName(),
event.getConnectionDescription()
.getConnectionId(),
event.getConnectionDescription().getServerAddress()));
}
@Override
public void commandSucceeded(final CommandSucceededEvent event) {
System.out.println(String.format("Successfully executed command '%s' with id %s "
+ "on connection '%s' to server '%s'",
event.getCommandName(),
event.getRequestId(),
event.getConnectionDescription()
.getConnectionId(),
event.getConnectionDescription().getServerAddress()));
}
@Override
public void commandFailed(final CommandFailedEvent event) {
System.out.println(String.format("Failed execution of command '%s' with id %s "
+ "on connection '%s' to server '%s' with exception '%s'",
event.getCommandName(),
event.getRequestId(),
event.getConnectionDescription()
.getConnectionId(),
event.getConnectionDescription().getServerAddress(),
event.getThrowable()));
}
}

次の例では、 TestCommandListenerのインスタンスで構成されたMongoClientSettingsのインスタンスを作成します。

MongoClientSettings settings = MongoClientSettings.builder()
.addCommandListener(new TestCommandListener())
.build();
MongoClient client = MongoClients.create(settings);

これらのオプションで構成されたMongoClientは、各コマンドを MongoDB サーバーに送信する前にSystem.outにメッセージを出力し、各コマンドの成功または失敗時に別のメッセージを出力します。

ドライバーは SDAM モニタリング仕様を実装し、接続先の MongoDB クラスターのトポロジーに対する変更をドライバーが検出したときにアプリケーションに通知できるようにします。

アプリケーションは、 ClusterListenerServerListener 、またはServerMonitorListenerインターフェースのいずれかを実装するクラスのインスタンスでMongoClientSettingsを構成することで、 MongoClientでリスナーを登録します。

次のコードは、クラスター リスナーの作成方法を示しています。

public class TestClusterListener implements ClusterListener {
private final ReadPreference readPreference;
private boolean isWritable;
private boolean isReadable;
public TestClusterListener(final ReadPreference readPreference) {
this.readPreference = readPreference;
}
@Override
public void clusterOpening(final ClusterOpeningEvent clusterOpeningEvent) {
System.out.println(String.format("Cluster with unique client identifier %s opening",
clusterOpeningEvent.getClusterId()));
}
@Override
public void clusterClosed(final ClusterClosedEvent clusterClosedEvent) {
System.out.println(String.format("Cluster with unique client identifier %s closed",
clusterClosedEvent.getClusterId()));
}
@Override
public void clusterDescriptionChanged(final ClusterDescriptionChangedEvent event) {
if (!isWritable) {
if (event.getNewDescription().hasWritableServer()) {
isWritable = true;
System.out.println("Writable server available!");
}
} else {
if (!event.getNewDescription().hasWritableServer()) {
isWritable = false;
System.out.println("No writable server available!");
}
}
if (!isReadable) {
if (event.getNewDescription().hasReadableServer(readPreference)) {
isReadable = true;
System.out.println("Readable server available!");
}
} else {
if (!event.getNewDescription().hasReadableServer(readPreference)) {
isReadable = false;
System.out.println("No readable server available!");
}
}
}
}

次の例では、 TestClusterListenerのインスタンスで構成されたMongoClientSettingsのインスタンスを作成します。

List<ServerAddress> seedList = ...
MongoClientSettings settings = MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.addClusterListener(new TestClusterListener(ReadPreference.secondary())))
.build();
MongoClient client = MongoClients.create(settings);

これらのオプションで構成されたMongoClientは、 MongoClientがこれらのオプションを使用して作成され、かつMongoClientが閉じられたときに、 System.outにメッセージを出力します。 さらに、クライアントが次のいずれかの状態になったときにメッセージが出力されます。

  • 書込み (write) を受け入れる使用可能なサーバーがあること

  • 書込み (write) を受け入れる使用可能なサーバーがありません

  • 構成された を使用して読み取りを受け入れる使用可能なサーバーがある ReadPreference

  • 構成された を使用して読み取りを受け入れる使用可能なサーバーがない ReadPreference

ドライバーは、接続プール関連のイベントの監視をサポートしています。

アプリケーションは、 ConnectionPoolListenerインターフェースを実装するクラスのインスタンスでMongoClientSettingsを構成することで、 MongoClientでリスナーを登録します。

次のコードは、接続プール リスナーの作成方法を示しています。

public class TestConnectionPoolListener implements ConnectionPoolListener {
@Override
public void connectionPoolOpened(final ConnectionPoolOpenedEvent event) {
System.out.println(event);
}
@Override
public void connectionPoolClosed(final ConnectionPoolClosedEvent event) {
System.out.println(event);
}
@Override
public void connectionCheckedOut(final ConnectionCheckedOutEvent event) {
System.out.println(event);
}
@Override
public void connectionCheckedIn(final ConnectionCheckedInEvent event) {
System.out.println(event);
}
@Override
public void connectionAdded(final ConnectionAddedEvent event) {
System.out.println(event);
}
@Override
public void connectionRemoved(final ConnectionRemovedEvent event) {
System.out.println(event);
}
}

次の例では、 TestConnectionPoolListenerのインスタンスで構成されたMongoClientSettingsのインスタンスを作成します。

List<ServerAddress> seedList = ...
MongoClientSettings settings = MongoClientSettings.builder()
.applyToConnectionPoolSettings(builder ->
builder.addConnectionPoolListener(new TestConnectionPoolListener()))
.build();
MongoClient client = MongoClients.create(settings);

これらのオプションで構成されたMongoClientは、MongoClient が接続されている各 MongoDB サーバーの接続プール関連のイベントごとにSystem.outにメッセージを出力します。

戻る

ログ記録