Visão geral
Neste guia, você pode aprender como configurar e configurar o monitoramento na Biblioteca PHP do MongoDB .
Monitoramento é o processo de coleta de informações sobre o comportamento do seu aplicativo durante a execução. Estas informações podem ajudá-lo a tomar decisões informadas ao projetar e depurar seu aplicação. Você também pode usar informações de eventos de monitoramento para acompanhar o desempenho do seu aplicativo e o uso de recursos.
A Biblioteca MongoDB emite eventos de comando e eventos de Descoberta e Monitoramento do Servidor (SDAM) que fornecem informações do aplicação . Você pode ouvir esses eventos para monitorar seu aplicação.
Tipos de evento
O tipo de evento que o driver emite depende da operação que está sendo executada. A tabela a seguir descreve os tipos de eventos que o driver emite:
eventType | Descrição |
---|---|
Eventos de comando | Eventos relacionados aos comandos do banco de dados MongoDB , |
Eventos de descoberta e monitoramento de servidor (SDAM) | Eventos relacionados a alterações no estado da implantação do MongoDB . |
Monitorar eventos
Para monitorar eventos, você deve executar as seguintes ações:
Criar um assinante de evento : Crie uma classe que implemente o comando ou assinante de evento SDAM
Registre um assinante de eventos: Registre um assinante de evento de monitoramento com seu
MongoDB\Client
Dica
Para visualizar uma lista de eventos de monitoramento que você pode assinar, consulte a seção Monitoramento de classes e funções de assinante do manual do PHP.
Criar um assinante de eventos
Para assinar um evento de monitoramento, crie uma classe que implemente a interface do assinante de evento . É possível implementar as seguintes interfaces:
MongoDB\Driver\Monitoring\CommandSubscriber
, que assina eventos de comandoMongoDB\Driver\Monitoring\SDAMSubscriber
, que assina eventos SDAM
Exemplo de assinante de eventos de comando
Para assinar um evento SDAM, crie uma classe que implemente a interface MongoDB\Driver\Monitoring\CommandSubscriber
. Na sua classe, defina cada um dos métodos CommandSubscriber
. A tabela a seguir descreve esses métodos e os eventos de comando para os quais eles recebem notificações:
Método | Evento de comando | Descrição |
---|---|---|
Chamado quando um comando não é bem-sucedido | ||
Chamado quando um comando é enviado ao servidor | ||
Chamado quando um comando é bem-sucedido |
O seguinte código cria a classe MyCommandSubscriber
, que implementa a interface CommandSubscriber
. A classe define cada método CommandSubscriber
e inclui lógica personalizada para o método commandStarted()
, que imprime detalhes sobre cada novo comando que o servidor recebe:
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 { } }
Exemplo de assinante de evento SDAM
Para assinar um evento SDAM, crie uma classe que implemente a interface MongoDB\Driver\Monitoring\SDAMSubscriber
. Na sua classe, defina cada método SDAMSubscriber
. A tabela a seguir descreve esses métodos e os eventos de comando para os quais eles recebem notificações:
Método | Evento SDAM | Descrição |
---|---|---|
Chamado quando a descrição de um servidor muda | ||
Chamado quando um servidor é removido da topologia | ||
Chamado quando uma pulsação do servidor não tem êxito | ||
Chamado quando o servidor recebe uma pulsação | ||
Chamado quando uma pulsação do servidor é bem-sucedida | ||
Chamado quando um novo servidor é adicionado à topologia | ||
Chamado quando a descrição da topologia muda | ||
Chamado quando a topologia é fechada | ||
Chamado quando a topologia é aberta |
O seguinte código cria a classe MySDAMSubscriber
, que implementa a interface SDAMSubscriber
. A classe define cada método SDAMSubscriber
e inclui lógica personalizada para o método serverOpening()
, que imprime detalhes sobre os servidores adicionados à topologia:
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 um assinante de evento
Depois de criar uma classe que implemente sua interface de assinante, você deve registrar essa classe com um MongoDB\Client
para receber notificações de evento para seu cliente. Para registrar um assinante, chame o método MongoDB\Client::addSubscriber()
e passe uma instância da sua classe de assinante como parâmetro.
Exemplo
O código a seguir registra o comando e os assinantes de evento SDAM criados na seção Criar um assinante de eventos desta página com MongoDB\Client
um:
$commandSub = new MyCommandSubscriber(STDERR); $sdamSub = new MySDAMSubscriber(STDERR); $client->addSubscriber($commandSub); $client->addSubscriber($sdamSub);
Quando você inicia o aplicação e executa um comando de inserção, seus assinantes registram os eventos e mensagens de saída semelhantes às seguintes:
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" : ... }
Remover um assinante
Para cancelar o registro de um assinante do seu cliente, use o método MongoDB\Client::removeSubscriber()
.
O código a seguir mostra como remover o assinante criado na seção Exemplo de assinante de eventos de comando desta página:
$client->removeSubscriber($commandSub);
Documentação da API
Para saber mais sobre qualquer uma das classes ou métodos discutidos neste guia, consulte a seguinte documentação da API:
Para saber mais sobre classes e métodos de assinante, consulte as seguintes páginas no manual PHP: