Monitoramento de aplicações PHP: métricas e alertas
As aplicações PHP modernas operam em ambientes distribuídos complexos, onde falhas e quedas de desempenho podem custar milhões aos negócios. Sem um sistema de monitoramento, você corre o risco de saber sobre um problema apenas através dos usuários. Neste artigo, vamos abordar como configurar um monitoramento completo de aplicações PHP, quais métricas acompanhar e como configurar alertas para uma resposta rápida.
Por que o monitoramento PHP é criticamente importante
O PHP continua sendo uma das linguagens mais populares para desenvolvimento web (de acordo com dados da W3Techs, mais de 75% dos sites usam PHP). No entanto, sua natureza interpretada e características específicas de gerenciamento de memória exigem atenção especial. Sem monitoramento, você não conseguirá:
- Detectar vazamentos de memória antes que eles causem a queda do servidor
- Identificar consultas lentas ao banco de dados
- Encontrar trechos de código ineficientes
- Prever a carga e escalar a infraestrutura
Um monitoramento eficaz consiste em três componentes: coleta de métricas, visualização e alertas. Vamos analisar cada etapa na prática.
Métricas-chave de aplicações PHP
Para um monitoramento completo, é necessário acompanhar os seguintes grupos de métricas:
Métricas de desempenho (APM)
- Tempo de resposta (percentis p50, p95, p99)
- Taxa de transferência (RPS – requisições por segundo)
- Tempo de execução do script (max_execution_time)
- Número de erros (5xx, exceções)
Métricas do sistema
- Uso de CPU e utilização de memória do PHP-FPM
- Número de processos ativos do PHP-FPM
- Uso de espaço em disco para logs
- Tráfego de rede e latências
Métricas de negócio
- Número de pagamentos bem-sucedidos
- Velocidade de carregamento de páginas
- Conversão no funil
Implementação prática: coleta de métricas com Prometheus
Vamos analisar um exemplo de integração de uma aplicação PHP com o Prometheus – uma das ferramentas de monitoramento mais populares. Para trabalhar com Prometheus em PHP, usamos a biblioteca promphp/prometheus_client_php.
Instalação via Composer:
composer require promphp/prometheus_client_phpExemplo de registro e uso de um contador (Counter) e um histograma (Histogram):
<?phpuse Prometheus\\CollectorRegistry;use Prometheus\\Storage\\InMemory;use Prometheus\\RenderTextFormat;
// Inicialização do armazenamento (em produção, use Redis ou APCu)$registry = new CollectorRegistry(new InMemory());
// Contador para rastrear o número de erros$errorCounter = $registry->registerCounter( 'app_errors_total', 'Total number of application errors', ['type', 'endpoint']);
// Histograma para tempo de resposta$requestDuration = $registry->registerHistogram( 'http_request_duration_seconds', 'HTTP request duration in seconds', ['method', 'endpoint'], [0.1, 0.5, 1, 2, 5, 10] // buckets);
// Middleware para coleta de métricasfunction monitorRequest(callable $handler) { global $requestDuration, $errorCounter; $start = microtime(true); try { $result = $handler(); $duration = microtime(true) - $start; // Registra o tempo de execução $requestDuration->observe($duration, [ $_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI'] ]); return $result; } catch (\\Throwable $e) { // Incrementa o contador de erros $errorCounter->inc([ get_class($e), $_SERVER['REQUEST_URI'] ]); throw $e; }}
// Endpoint para Prometheus (geralmente /metrics)function metricsEndpoint()