集群监控
Overview
本指南向您介绍如何使用Scala驾驶员监控MongoDB实例、副本集或分片集群中的服务器发现和监控(SDAM) 事件。当您连接的MongoDB实例或集群的状态发生任何变化时,就会发生这些事件。
Scala驾驶员定义了 9 个 SDAM 事件,并提供以下监听器接口,每个接口监听 3 个 SDAM 事件:
ClusterListener
:侦听与拓扑结构更改或集群状态和结构更改相关的事件ServerListener
:侦听与单个服务器更改相关的事件ServerMonitorListener
:监听与心跳相关的事件,或报告副本集成员之间的通信状态
您可以使用有关应用程序中 SDAM 事件的信息来了解集群更改、评估集群运行状况或执行容量规划。
订阅事件
您可以通过在应用程序中订阅SDAM 事件来访问权限有关这些事件的详细信息。要订阅事件,请创建一个实现 ClusterListener
、ServerListener
或 ServerMonitorListener
接口的类。然后,通过配置 MongoClientSettings
的实例并将其传递给 MongoClient
构造函数,将侦听器添加到客户端。
以下代码创建 TestClusterListener
类,该类实现 ClusterListener
接口。该类包含以下用于处理拓扑相关事件的方法:
clusterOpening()
:当驾驶员首次连接到集群时打印一条消息clusterClosed()
:当驾驶员与集群断开连接时打印一条消息clusterDescriptionChanged()
:打印有关集群读取和写入可用性更改的消息
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 | 监听器接口 | 说明 |
---|---|---|
在拓扑结构描述更改时创建,例如选举新的主节点 (primary node in the replica set)节点时。 | ||
在驾驶员首次连接到集群时创建。 | ||
当驾驶员与集群断开连接时创建。 | ||
在服务器描述更改时创建。 | ||
在拓扑结构中添加新服务器时创建。 | ||
从拓扑结构中删除现有服务器时创建。 | ||
当服务器监控向服务器发送 | ||
当心跳成功时创建。 | ||
当 heartbeat 失败时创建。 |
API 文档
要进一步了解本指南所讨论的任何方法,请参阅以下 API 文档: