Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Supervisar eventos de aplicaciones

En esta guía, puedes aprender cómo configurar y ajustar la supervisión en la librería PHP de MongoDB.

La monitorización es el proceso de recopilar información sobre el comportamiento de su aplicación durante su ejecución. Esta información puede ayudarle a tomar decisiones informadas al diseñar y depurar su aplicación. También puede usar la información de los eventos de monitorización para monitorizar el rendimiento y el uso de recursos de su aplicación.

La librería PHP de MongoDB emite eventos de comandos y eventos de Descubrimiento y Supervisión de Servidores (SDAM) que proveen información sobre la aplicación. Puedes escuchar estos eventos para supervisar tu aplicación.

Nota

Esta página explica cómo supervisar la aplicación en el código. Para aprender cómo registrar esta información en un registro externo, consulta la Guía sobre Eventos de registro del controlador.

El tipo de evento que el controlador emite depende de la operación que se realice. En la siguiente tabla se describen los tipos de eventos que emite el controlador:

Tipo de evento
Descripción

Eventos de comando

Eventos relacionados con comandos de la base de datos MongoDB, como find; insert, delete y count. Para aprender a usar la librería PHP para ejecutar un comando de base de datos, consulta el apartado Ejecutar un comando de base de datos. Para obtener más información sobre los comandos de bases de datos de MongoDB, consulta Comandos de base de datos en el manual de MongoDB Server.

Eventos de Descubrimiento y Supervisión de Servidores (SDAM)

Eventos relacionados con cambios en el estado de la implementación de MongoDB.

Para monitorear eventos, debe realizar las siguientes acciones:

  1. Crea un suscriptor de eventos: Crea una clase que implemente el comando o el suscriptor de eventos SDAM

  2. Registrar un suscriptor de eventos: Registrar un suscriptor de eventos de supervisión en su MongoDB\Client

Tip

Para suscribirse a un evento de monitorización, cree una clase que implemente la interfaz de suscriptor de eventos. Puede implementar las siguientes interfaces:

  • MongoDB\Driver\Monitoring\CommandSubscriber, que se suscribe a eventos de comando

  • MongoDB\Driver\Monitoring\SDAMSubscriberque se suscribe a los eventos de SDAM

Para suscribirse a un evento SDAM, cree una clase que implemente la interfaz MongoDB\Driver\Monitoring\CommandSubscriber. En tu clase, define cada uno de los métodos CommandSubscriber. La siguiente tabla describe estos métodos y los eventos de comando para los que reciben notificaciones:

Método
Evento de comando
Descripción

Se llama cuando un comando no tiene éxito

Se llama cuando se envía un comando al servidor

Se llama cuando un comando tiene éxito

El siguiente código crea la clase MyCommandSubscriber, que implementa la interfaz CommandSubscriber. La clase define cada método CommandSubscriber e incluye una lógica personalizada para el método commandStarted(), el cual imprime detalles sobre cada nuevo comando que el servidor recibe:

class MyCommandSubscriber implements MongoDB\Driver\Monitoring\CommandSubscriber
{
/** @param resource $stream */
public function __construct(private $stream)
{
}
public function commandStarted(MongoDB\Driver\Monitoring\CommandStartedEvent $event): void
{
fwrite($this->stream, sprintf(
'Started command #%d "%s": %s%s',
$event->getRequestId(),
$event->getCommandName(),
MongoDB\BSON\Document::fromPHP($event->getCommand())->toCanonicalExtendedJSON(),
PHP_EOL,
));
}
public function commandSucceeded(MongoDB\Driver\Monitoring\CommandSucceededEvent $event): void
{
}
public function commandFailed(MongoDB\Driver\Monitoring\CommandFailedEvent $event): void
{
}
}

Para suscribirse a un evento SDAM, cree una clase que implemente la interfaz MongoDB\Driver\Monitoring\SDAMSubscriber. En tu clase, define cada método SDAMSubscriber. La siguiente tabla describe estos métodos y los eventos de comando para los que reciben notificaciones:

Método
Evento SDAM
Descripción

Se llama cuando cambia la descripción de un servidor

Se llama cuando un servidor se elimina de la topología

Se llama cuando un latido del servidor no tiene éxito

Se llama cuando el servidor recibe un latido

Se llama cuando un latido del servidor se realiza correctamente

Se llama cuando se agrega un nuevo servidor a la topología

Se invoca cuando la descripción de la topología cambia

Se llama cuando se cierra la topología

Se llama cuando se abre la topología

El siguiente código crea la clase MySDAMSubscriber, que implementa la interfaz SDAMSubscriber. La clase define cada método SDAMSubscriber e incluye una lógica personalizada para el método serverOpening(), el cual imprime detalles sobre los servidores añadidos a la topología:

class MySDAMSubscriber implements MongoDB\Driver\Monitoring\SDAMSubscriber
{
/** @param resource $stream */
public function __construct(private $stream)
{
}
public function serverOpening(MongoDB\Driver\Monitoring\ServerOpeningEvent $event): void
{
fprintf(
$this->stream,
'Server opening on %s:%s\n',
$event->getHost(),
$event->getPort(),
PHP_EOL,
);
}
public function serverClosed(MongoDB\Driver\Monitoring\ServerClosedEvent $event): void
{
}
public function serverChanged(MongoDB\Driver\Monitoring\ServerChangedEvent $event): void
{
}
public function serverHeartbeatFailed(MongoDB\Driver\Monitoring\ServerHeartbeatFailedEvent $event): void
{
}
public function serverHeartbeatStarted(MongoDB\Driver\Monitoring\ServerHeartbeatStartedEvent $event): void
{
}
public function serverHeartbeatSucceeded(MongoDB\Driver\Monitoring\ServerHeartbeatSucceededEvent $event): void
{
}
public function topologyChanged(MongoDB\Driver\Monitoring\TopologyChangedEvent $event): void
{
}
public function topologyClosed(MongoDB\Driver\Monitoring\TopologyClosedEvent $event): void
{
}
public function topologyOpening(MongoDB\Driver\Monitoring\TopologyOpeningEvent $event): void
{
}
}

Después de crear una clase que implemente su interfaz de suscriptor, debe registrar esta clase con un MongoDB\Client para recibir notificaciones de eventos para su cliente. Para registrar un suscriptor, llama al método MongoDB\Client::addSubscriber() y pasa una instancia de su clase de suscriptor como un parámetro.

El siguiente código registra el comando y los suscriptores de eventos SDAM creados en la sección Crear un suscriptor de eventos de esta página con MongoDB\Client un:

$commandSub = new MyCommandSubscriber(STDERR);
$sdamSub = new MySDAMSubscriber(STDERR);
$client->addSubscriber($commandSub);
$client->addSubscriber($sdamSub);

Cuando inicias la aplicación y ejecutas un comando de inserción, tus suscriptores registran los eventos y emiten mensajes similares a los siguientes:

Server opening on ac-rmuag0v-shard-00-00.gh0qg50.mongodb.net:27017
Server opening on ac-rmuag0v-shard-00-01.gh0qg50.mongodb.net:27017
Server opening on ac-rmuag0v-shard-00-02.gh0qg50.mongodb.net:27017
Started command #3 "insert": { "insert" : ... }

Para cancelar el registro de un suscriptor de su cliente, utilice el método MongoDB\Client::removeSubscriber().

El siguiente código muestra cómo remover el suscriptor creado en la sección Ejemplo de suscriptor de eventos de comandos de esta página:

$client->removeSubscriber($commandSub);

Para obtener más información sobre cualquiera de las clases o métodos tratados en esta guía, consulta la siguiente documentación de la API:

Para obtener más información sobre clases y métodos de suscriptores, consulte las siguientes páginas en el manual de PHP:

Volver

Búsqueda vectorial de MongoDB

En esta página