Docs 菜单
Docs 主页
/ / /
Scala
/

集群监控

在此页面上

  • Overview
  • 订阅事件
  • 事件描述
  • API 文档

本指南向您介绍如何使用Scala驾驶员监控MongoDB实例、副本集或分片集群中的服务器发现和监控(SDAM) 事件。当您连接的MongoDB实例或集群的状态发生任何变化时,就会发生这些事件。

Scala驾驶员定义了 9 个 SDAM 事件,并提供以下监听器接口,每个接口监听 3 个 SDAM 事件:

  • ClusterListener:侦听与拓扑结构更改或集群状态和结构更改相关的事件

  • ServerListener:侦听与单个服务器更改相关的事件

  • ServerMonitorListener:监听与心跳相关的事件,或报告副本集成员之间的通信状态

您可以使用有关应用程序中 SDAM 事件的信息来了解集群更改、评估集群运行状况或执行容量规划。

您可以通过在应用程序中订阅SDAM 事件来访问权限有关这些事件的详细信息。要订阅事件,请创建一个实现 ClusterListenerServerListenerServerMonitorListener 接口的类。然后,通过配置 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
监听器接口
说明

ClusterDescriptionChangedEvent

在拓扑结构描述更改时创建,例如选举新的主节点 (primary node in the replica set)节点时。

在驾驶员首次连接到集群时创建。

当驾驶员与集群断开连接时创建。

在服务器描述更改时创建。

在拓扑结构中添加新服务器时创建。

从拓扑结构中删除现有服务器时创建。

当服务器监控向服务器发送hello命令时创建。 此动作称为心跳。

当心跳成功时创建。

当 heartbeat 失败时创建。

要查看事件监控类的完整列表,请参阅Java API文档中的事件包。

要进一步了解本指南所讨论的任何方法,请参阅以下 API 文档:

后退

监控您的应用程序