クラスター モニタリング
Overview
このガイドでは、 Scalaドライバーを使用して、 MongoDBインスタンス、レプリカセット、またはシャーディングされたクラスター内のサーバー検出とモニタリング(SDAM)イベントをモニターする方法を説明します。これらのイベントは、接続しているMongoDBインスタンスまたはクラスターの状態が変更されたときに発生します。
Scalaドライバーは 9 つの SDAM イベントを定義し、それぞれ 3 つの SDAM イベントをリッスンする次のリスナー インターフェースを提供します。
ClusterListener
:トポロジーの変更、またはクラスターの状態と構造の変更に関連するイベントをリッスンしますServerListener
: 個々のサーバーの変更に関連するイベントをリッスンServerMonitorListener
: ハートビート関連のイベントをリスニングしたり、レプリカセットノード間の通信ステータスを報告したりします
アプリケーション内の SDAM イベントに関する情報を使用すると、クラスターの変更の理解、クラスターの健全性の評価、またはキャパシティープランニングを実行できます。
イベントにサブスクライブ
SDAM イベントは、アプリケーションでサブスクライブすることで、その詳細にアクセスできます。イベントをサブスクライブするには、ClusterListener
、ServerListener
、または 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 | リスナー インターフェース | 説明 |
---|---|---|
新しいプライマリの選挙など、トポロジーの説明が変更されたときに作成されます。 | ||
ドライバーが最初にクラスターに接続したときに作成されます。 | ||
ドライバーがクラスターから切断されたときに作成されます。 | ||
サーバーの説明が変更されたときに作成されます。 | ||
新しいサーバーがトポロジーに追加されたときに作成されます。 | ||
既存のサーバーがトポロジーから削除されたときに作成されます。 | ||
サーバーモニターがサーバー に | ||
ハートビートが成功したときに作成されます。 | ||
ハートビートが失敗したときに作成されます。 |
イベントモニタリング クラスの完全なリストを表示するには、 Java APIドキュメントのイベントパッケージを参照してください。
API ドキュメント
このガイドで説明されているメソッドの詳細については、次の API ドキュメントを参照してください。