Monitoramento de aplicações PHP: métricas e alertas de A a Z
\n\nNo desenvolvimento web moderno, a estabilidade e o desempenho de uma aplicação não são apenas um desejo, mas um requisito crítico. O PHP, apesar de sua maturidade, exige atenção cuidadosa ao monitoramento. Sem ele, você corre o risco de descobrir a queda do site pelos usuários, e não pelo sistema de alerta. Neste artigo, vamos analisar como construir um sistema completo de monitoramento de aplicações PHP: desde a coleta de métricas-chave até a configuração de alertas que salvarão seu projeto de paralisações.
\n\nPor que monitorar o PHP? Métricas-chave
\n\nO monitoramento permite responder a três perguntas principais: "A aplicação está funcionando?", "Quão rápido ela está funcionando?" e "Algo anormal está acontecendo?". Para aplicações PHP, os seguintes grupos de métricas são criticamente importantes:
\n\n- \n
- Métricas de disponibilidade (Uptime): Verificar se o servidor web e o PHP-FPM respondem às requisições. A maneira mais simples é um endpoint de health check. \n
- Métricas de desempenho: Tempo de execução da requisição (Response Time), capacidade de processamento (Requests per Second), tempo de operação do banco de dados e APIs externas. \n
- Métricas de recursos: Consumo de memória (Memory Usage), carga da CPU, número de processos ativos do PHP-FPM. \n
- Métricas de erros: Número de erros HTTP (5xx, 4xx), exceções (Exceptions), erros fatais e warnings. \n
- Métricas de negócio: Velocidade de finalização do pedido, número de registros — tudo que é importante para o seu negócio. \n
Essas métricas podem ser coletadas de diferentes maneiras: desde o simples registro em arquivo de log até o uso de sistemas avançados de observabilidade, como Prometheus + Grafana ou soluções comerciais (Datadog, New Relic).
\n\nColeta de métricas: do simples ao complexo
\n\nVamos começar com a abordagem básica — criar um health check simples e coletar métricas no formato Prometheus.
\n\n1. Endpoint de Health Check
\nCrie um endpoint simples que verifica a conexão com o banco de dados e o cache:
\n\n<?php\n// health.php\n$checks = [\n 'database' => false,\n 'redis' => false,\n 'status' => 'unhealthy'\n];\n\ntry {\n new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');\n $checks['database'] = true;\n} catch (PDOException $e) {\n // Registra o erro no log\n}\n\nif ($checks['database'] && $checks['redis']) {\n $checks['status'] = 'healthy';\n http_response_code(200);\n} else {\n http_response_code(503);\n}\n\nheader('Content-Type: application/json');\necho json_encode($checks);\n\n\n2. Coleta de métricas para Prometheus
\nPrometheus é um sistema popular de coleta de métricas. Sua aplicação deve fornecer dados no formato /metrics. Exemplo de um exportador simples:
<?php\n// metrics.php\nheader('Content-Type: text/plain; version=0.0.4');\n\n$metrics = [];\n\n// Contador de requisições\n$metrics[] = '# HELP http_requests_total Total number of HTTP requests.';\n$metrics[] = '# TYPE http_requests_total counter';\n$metrics[] = 'http_requests_total{method="GET",route="/home"} 1024';\n\n// Histograma do tempo de resposta\n$metrics[] = '# HELP http_request_duration_seconds Request duration in seconds.';\n$metrics[] = '# TYPE http_request_duration_seconds histogram';\n$metrics[] = 'http_request_duration_seconds_bucket{le="0.1"} 500';\n$metrics[] = 'http_request_duration_seconds_bucket{le="0.5"} 800';\n$metrics[] = 'http_request_duration_seconds_bucket{le="+Inf"} 1024';\n\n// Métricas do PHP (memória, tempo)\n$metrics[] = '# HELP php_memory_bytes Current memory usage.';\n$metrics[] = '# TYPE php_memory_bytes gauge';\n$metrics[] = 'php_memory_bytes ' . memory_get_usage(true);\n\necho implode("\\n", $metrics) . "\\n";\n\n\nConfiguração de alertas: quando e como notificar
\n\nMétricas sem alertas são apenas números. Os alertas devem ser configurados com base em limites (thresholds). As regras principais:
\n\n<