Monitoramento de aplicações PHP: métricas avançadas e alertas

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: Por que o monitoramento básico não é suficiente?

O monitoramento básico de aplicações PHP (verificação "vivo/morto" e carga da CPU) deixa de funcionar sob altas cargas. Quando sua aplicação processa milhares de requisições por segundo, as métricas padrão não mostram os gargalos: consultas lentas ao banco de dados, vazamentos de memória em processos longos ou picos repentinos de latência.

Neste artigo, abordaremos o nível avançado de monitoramento: coleta de métricas de negócio, profiling em tempo real, configuração de alertas baseados em percentis e integração com stacks modernas de observabilidade (Prometheus + Grafana). Você aprenderá a implementar ferramentas que permitirão não apenas ver que a aplicação "caiu", mas também prever problemas antes que eles ocorram.



1. Métricas avançadas: de códigos HTTP a indicadores de negócio

Contadores padrão (número de requisições, status 200/500) são o mínimo. Para uma análise aprofundada, é necessário coletar:

  • Latência: p50, p95, p99 do tempo de resposta. Anomalias no p99 indicam "picos" na operação.
  • Consumo de memória: não apenas o valor de pico, mas também a taxa de crescimento dentro de uma única requisição.
  • Tempo de execução de chamadas externas: Redis, MySQL, RabbitMQ — cada serviço deve ter sua própria métrica.
  • Métricas de negócio: número de pedidos realizados, erros de validação, velocidade das filas.

Exemplo de coleta de métricas usando promphp/prometheus_client_php:

use Prometheus\\CollectorRegistry;use Prometheus\\RenderTextFormat;use Prometheus\\Storage\\InMemory;

$registry = new CollectorRegistry(new InMemory());

// Histograma para o tempo de execução da requisição$histogram = $registry->registerHistogram( 'app', 'request_duration_seconds', 'Duração da requisição HTTP', ['method', 'endpoint'], [0.1, 0.5, 1.0, 2.0, 5.0]);

// Contador de eventos de negócio$counter = $registry->registerCounter( 'business', 'orders_total', 'Total de pedidos criados', ['status'] // success/failed);

// No middleware, medimos o tempo$start = microtime(true);// ... execução da requisição ...$duration = microtime(true) - $start;$histogram->observe($duration, ['GET', '/api/orders']);


2. Health Checks e Deep Probing: verificação de dependências

Um endpoint simples de ping não verifica a disponibilidade do banco de dados, cache ou filas. Crie um health check abrangente que simule requisições reais:

// health.php$checks = [    'database' => function () {        $db = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');        $db->query('SELECT 1');        return true;    },    'redis' => function () {        $redis = new Redis();        $redis->connect('127.0.0.1', 6379);        $redis->ping();        return true;    },    'queue' => function () {        // Verificamos se o RabbitMQ não está sobrecarregado        $channel = new AMQPChannel(new AMQPConnection());        $queue = new AMQPQueue($channel);        return $queue->declareQueue() !== false;    }];

$results = [];$healthy = true;foreach ($checks as $name => $check) { try { $check(); $results[$name] = 'ok'; } catch (\\Throwable $e) { $results[$name] = 'falhou: ' . $e->getMessage(); $healthy = false; }}

header('Content-Type: application/json');http_response_code($healthy ? 200 : 503);echo json_encode(['status' => $healthy ? 'saudável' : 'não saudável', 'checks' => $results]);

Esse endpoint pode ser conectado às sondas liveness/readiness do Kubernetes ou a um monitoramento externo (por exemplo, UptimeRobot), que verificará não apenas a disponibilidade, mas também a funcionalidade de todas as dependências.



3. Alertas baseados em percentis e anomalias

Alertas baseados no "tempo médio de resposta" frequentemente perdem

Blogs

Book Recommendations