AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

クラスター モニタリング

このガイドでは、 Scalaドライバーを使用して、 MongoDBインスタンス、レプリカセット、またはシャーディングされたクラスター内のサーバー検出とモニタリング(SDAM)イベントをモニターする方法を説明します。 これらのイベントは、接続しているMongoDBインスタンスまたはクラスターの状態が変更されたときに発生します。

Scalaドライバーは 9 つの SDAM イベントを定義し、それぞれ 3 つの SDAM イベントをリッスンする次のリスナー インターフェースを提供します。

  • ClusterListener:トポロジーの変更、またはクラスターの状態と構造の変更に関連するイベントをリッスンします

  • ServerListener: 個々のサーバーの変更に関連するイベントをリッスン

  • ServerMonitorListener: ハートビート関連のイベントをリスニングしたり、レプリカセットノード間の通信ステータスを報告したりします

アプリケーション内の SDAM イベントに関する情報を使用すると、クラスターの変更の理解、クラスターの健全性の評価、またはキャパシティープランニングを実行できます。

SDAM イベントは、アプリケーションでサブスクライブすることで、その詳細にアクセスできます。 イベントをサブスクライブするには、ClusterListenerServerListener、または ServerMonitorListener インターフェースを実装するクラスを作成します。 次に、MongoClientSettings のインスタンスを構成し、それを MongoClient コンストラクターに渡して、クライアントにリスナーを追加します。

次のコードでは、ClusterListener インターフェースを実装する TestClusterListenerクラスが作成されます。 クラスには、トポロジー関連のイベントを処理するための次のメソッドが含まれています。

  • clusterOpening(): ドライバーが最初にクラスターに接続したときにメッセージを出力します

  • clusterClosed(): ドライバーがクラスターから切断されたときにメッセージを出力します

  • clusterDescriptionChanged(): クラスターの読み取りおよび書込み (write) の可用性の変更に関するメッセージを出力します

case class TestClusterListener(readPreference: ReadPreference) extends ClusterListener {
var isWritable: Boolean = false
var isReadable: Boolean = false
override def clusterOpening(event: ClusterOpeningEvent): Unit =
println(s"Cluster with ID ${event.getClusterId} opening")
override def clusterClosed(event: ClusterClosedEvent): Unit =
println(s"Cluster with ID ${event.getClusterId} closed")
override def clusterDescriptionChanged(event: ClusterDescriptionChangedEvent): Unit = {
if (!isWritable) {
if (event.getNewDescription.hasWritableServer) {
isWritable = true
println("Writable server available")
}
} else {
if (!event.getNewDescription.hasWritableServer) {
isWritable = false
println("No writable server available")
}
}
if (!isReadable) {
if (event.getNewDescription.hasReadableServer(readPreference)) {
isReadable = true
println("Readable server available")
}
} else {
if (!event.getNewDescription.hasReadableServer(readPreference)) {
isReadable = false
println("No readable server available")
}
}
}
}

次に、次のコードに示すように、MongoClientインスタンスの設定を構成して TestClusterListenerクラスをサブスクライブします。

val uri: ConnectionString = ConnectionString("<connection string>")
val settings: MongoClientSettings = MongoClientSettings
.builder()
.applyToClusterSettings((builder: ClusterSettings.Builder) =>
builder.addClusterListener(TestClusterListener(ReadPreference.secondary())))
.applyConnectionString(uri)
.build()
val client: MongoClient = MongoClient(settings)

アプリケーションを実行すると、サブスクライブは SDAMイベントを記録し、次のようなメッセージを出力します。

Cluster with ID ClusterId{value='...', description='...'} opening
Writable server available
Readable server available
Cluster with ID ClusterId{value='...', description='...'} closed

SDAM イベントをサブスクライブするには、イベントに対応するリスナー インターフェースを実装し、イベント を処理するメソッドを含むクラスを定義します。 次の表は、各 SDAMイベント、イベントを取り扱うリスナー インターフェイスの名前、およびイベントが公開されるタイミングの説明を示しています。

eventType
リスナー インターフェース
説明

新しいプライマリの選挙など、トポロジーの説明が変更されたときに作成されます。

ドライバーが最初にクラスターに接続したときに作成されます。

ドライバーがクラスターから切断されたときに作成されます。

サーバーの説明が変更されたときに作成されます。

新しいサーバーがトポロジーに追加されたときに作成されます。

既存のサーバーがトポロジーから削除されたときに作成されます。

サーバーモニターがサーバー にhelloコマンドを送信したときに作成されサーバー。 このアクションは、ハートビートと呼ばれます。

ハートビートが成功したときに作成されます。

ハートビートが失敗したときに作成されます。

イベントモニタリング クラスの完全なリストを表示するには、 Java APIドキュメントのイベントパッケージを参照してください。

このガイドで説明されているメソッドの詳細については、次の API ドキュメントを参照してください。