Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Supervisar eventos de aplicaciones

En esta guía, aprenderá a usar el controlador de Scala para supervisar los eventos que ocurren durante su funcionamiento. La supervisión implica recopilar información sobre las actividades de un programa en ejecución, la cual puede utilizarse con una aplicación o una biblioteca de gestión del rendimiento de aplicaciones.

Puedes supervisar los eventos de la aplicación para comprender el uso de recursos y el rendimiento del controlador, lo que te ayuda a tomar decisiones informadas al diseñar y depurar tu aplicación.

El controlador Scala organiza los eventos que puede monitorear en las siguientes categorías:

  • Eventos de comandos: Eventos relacionados con los comandos de la base de datos MongoDB.

  • Eventos de detección y supervisión de servidores (SDAM): Eventos relacionados con cambios en el estado de la instancia o clúster de MongoDB al que está conectado.

  • Eventos delgrupo de conexiones: Eventos relacionados con el grupo de conexiones que el controlador mantiene con una instancia de MongoDB.

Las siguientes secciones describen cada categoría de evento y muestran cómo supervisarlos. Para aprender a registrar los eventos del controlador en un archivo de registro, consulte la guía de registro.

Un evento de comando es un evento relacionado con un comando de la base de datos MongoDB. Algunos ejemplos de comandos de base de datos que generan eventos de comando son find, insert, delete y count.

El controlador Scala no publica eventos para los comandos que ejecuta internamente. Esto incluye los comandos que el controlador utiliza para supervisar el clúster y los comandos relacionados con el establecimiento de la conexión, como el comando inicial hello.

Para supervisar los eventos de comando, crea una clase que implemente la interfaz CommandListener y registra una instancia de esa clase en tu instancia de MongoClient.

Importante

Salida redactada

Como medida de seguridad, el controlador oculta el contenido de algunos eventos de comando para proteger la información confidencial. Para obtener una lista completa de los eventos de comando ocultos, consulte la sección de Seguridad de la especificación de Registro y Monitoreo de Comandos de MongoDB.

Para obtener más información sobre los comandos de la base de datos MongoDB, consulte Comandos de la base de datos.

El siguiente ejemplo define la clase CommandCounter, que implementa la interfaz CommandListener. Esta clase registra la cantidad de veces que el controlador ejecuta correctamente cada comando de la base de datos e imprime esta información cada vez que finaliza un comando.

case class CommandCounter() extends CommandListener {
private val commands =
scala.collection.mutable.Map[String, Int]()
override def commandStarted(event: CommandStartedEvent): Unit = {}
override def commandSucceeded(
event: CommandSucceededEvent
): Unit = {
val commandName = event.getCommandName
commands(commandName) =
commands.getOrElse(commandName, 0) + 1
println(commands.toMap)
}
override def commandFailed(event: CommandFailedEvent): Unit = {}
}

El siguiente código agrega una instancia de la clase CommandCounter a un objeto MongoClientSettings y configura una instancia MongoClient utilizando la configuración:

val settings: MongoClientSettings = MongoClientSettings
.builder()
.addCommandListener(CommandCounter())
.applyConnectionString(ConnectionString("<connection string>"))
.build()
val mongoClient: MongoClient = MongoClient(settings)

Al ejecutar la aplicación, el resultado se asemeja al siguiente:

Map(find -> 1)
Map(find -> 2)
Map(find -> 2, endSessions -> 1)

La siguiente tabla describe los eventos de comando que publica el controlador de Scala y la interfaz de escucha que los gestiona:

Tipo de evento
Interfaz de escucha
Descripción

Se publica cuando se inicia un comando de base de datos.

Se publica cuando un comando de base de datos se ejecuta correctamente.

Se publica cuando falla un comando de la base de datos.

Un evento de detección y monitorización de servidores (SDAM, por sus siglas en inglés) es un evento relacionado con un cambio en el estado de la instancia o clúster de MongoDB al que está conectado.

El controlador Scala define nueve eventos SDAM y proporciona las siguientes interfaces de escucha, cada una de las cuales escucha tres eventos SDAM:

  • ClusterListener: Escucha eventos relacionados con cambios de topología, o cambios en el estado y estructura del clúster

  • ServerListenerEscucha eventos relacionados con cambios individuales en el servidor

  • ServerMonitorListener: Escucha los eventos de latido, que informan sobre el estado de la comunicación entre los miembros del conjunto de réplicas.

Puede utilizar la información de los eventos de SDAM para comprender los cambios en el clúster, evaluar su estado o planificar la capacidad.

El siguiente ejemplo define la clase TestClusterListener, que implementa la interfaz ClusterListener. La clase contiene métodos que imprimen mensajes en respuesta a los siguientes eventos relacionados con la topología:

  • clusterOpening(): Imprime un mensaje cuando el controlador se conecta por primera vez a un clúster

  • clusterClosed()Imprime un mensaje cuando el controlador se desconecta de un clúster

  • clusterDescriptionChanged(): Imprime un mensaje sobre cambios en la disponibilidad de lectura y escritura del clúster

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")
}
}
}
}

El siguiente código agrega una instancia de la clase TestClusterListener a un objeto MongoClientSettings y configura una instancia MongoClient utilizando la configuración:

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)

Al ejecutar la aplicación, el resultado se asemeja al siguiente:

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

La siguiente tabla describe cada evento SDAM, la interfaz de escucha que lo gestiona y cuándo lo publica el controlador:

Tipo de evento
Interfaz de escucha
Descripción

Se publica cuando cambia la descripción de la topología, por ejemplo, cuando se eligen unas nuevas primarias.

Se publica cuando el controlador se conecta por primera vez al clúster.

Se publica cuando el controlador se desconecta del clúster.

Se publica cuando cambia la descripción del servidor.

Se publica cuando se agrega un nuevo servidor a la topología.

Se publica cuando se elimina un servidor existente de la topología.

Se publica cuando el monitor del servidor envía un comando hello al servidor. Esta acción se denomina latido.

Se publicará cuando el latido del corazón se haya detenido.

Publicado cuando el corazón deja de latir.

Un evento de grupo de conexiones es un evento relacionado con el grupo de conexiones que el controlador mantiene con una instancia de MongoDB. Un grupo de conexiones es un conjunto de conexiones TCP abiertas que el controlador mantiene con una instancia de MongoDB. Los grupos de conexiones reducen la cantidad de protocolos de enlace de red que su aplicación necesita realizar y pueden ayudar a que su aplicación se ejecute más rápido.

Para supervisar los eventos del grupo de conexiones, cree una clase que implemente la interfaz ConnectionPoolListener y registre una instancia de esa clase con su instancia MongoClient.

Tip

Pools de conexiones

Para obtener más información sobre los pool de conexiones, consulta la guía pool de conexiones.

El siguiente ejemplo define la clase ConnectionPoolLibrarian, que implementa la interfaz ConnectionPoolListener. Esta clase imprime un mensaje cada vez que el controlador obtiene una conexión del grupo de conexiones.

case class ConnectionPoolLibrarian()
extends ConnectionPoolListener {
override def connectionCheckedOut(
event: ConnectionCheckedOutEvent
): Unit =
println(
s"Let me get you the connection with id " +
s"${event.getConnectionId.getLocalValue}..."
)
override def connectionCheckOutFailed(
event: ConnectionCheckOutFailedEvent
): Unit = {}
}

El siguiente código agrega una instancia de la clase ConnectionPoolLibrarian a un objeto MongoClientSettings y configura una instancia MongoClient utilizando la configuración:

val settings: MongoClientSettings = MongoClientSettings
.builder()
.applyToConnectionPoolSettings(
(builder: ConnectionPoolSettings.Builder) =>
builder.addConnectionPoolListener(
ConnectionPoolLibrarian()
)
)
.applyConnectionString(ConnectionString("<connection string>"))
.build()
val mongoClient: MongoClient = MongoClient(settings)

Al ejecutar la aplicación, el resultado se asemeja al siguiente:

Let me get you the connection with id 1...

La siguiente tabla describe los eventos del pool de conexiones que publica el controlador de Scala y la interfaz de escucha que los gestiona:

Tipo de evento
Interfaz de escucha
Descripción

Se publica cuando se crea el grupo de conexiones.

Se publica cuando el grupo de conexiones está listo para su uso.

Se publica cuando se cierra el grupo de conexiones.

Se publica cuando se crea una conexión en el grupo.

Se publica cuando una conexión completa el proceso de establecimiento de la conexión y está lista para su uso.

Se publica cuando se cierra la conexión.

Se publica cuando el conductor comienza a comprobar la conexión.

Se publica cuando el controlador comprueba correctamente la conexión.

Se publica cuando el controlador no logra comprobar la conexión.

Se publica cuando el controlador comprueba la conexión de vuelta al grupo.

Se publica cuando se vacía el grupo de conexiones.

Para obtener más información sobre los métodos y tipos tratados en esta guía, consulta la siguiente documentación de la API: