Overview
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.
Tipos de eventos
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 |
Eventos de Descubrimiento y Supervisión de Servidores (SDAM) | Eventos relacionados con cambios en el estado de la implementación de MongoDB. |
Supervisar eventos
Para monitorear eventos, debe realizar las siguientes acciones:
Crea un suscriptor de eventos: Crea una clase que implemente el comando o el suscriptor de eventos SDAM
Registrar un suscriptor de eventos: Registrar un suscriptor de eventos de supervisión en su
MongoDB\Client
Tip
Para ver una lista de eventos de supervisión a los que puede suscribirse, consulte Clases de supervisión y funciones de suscripción sección del manual de PHP.
Crear un suscriptor de eventos
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 comandoMongoDB\Driver\Monitoring\SDAMSubscriberque se suscribe a los eventos de SDAM
Ejemplo de suscripción a eventos de comandos
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 { } }
Ejemplo de suscriptor de eventos SDAM
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 { } }
Registrar un suscriptor de eventos
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.
Ejemplo
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" : ... }
Eliminar un suscriptor
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);
Documentación de la API
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: