Сбор и масштабирование метрик в PHP Symfony highload: 200k RPM, 50+ серверов и zero overhead с Telegraf UDP
Кейс с Habr: при 200k RPM и 50+ серверах классическая схема метрик в PHP/Symfony (prometheus_client_php + Redis, pull-скрейп Prometheus) упёрлась в пределы — Redis раздувается до 8 ГБ и 100% CPU, Prometheus не успевает скрейпить все инстансы за 15 секунд, дашборды в Grafana ловят timeouts. Команда перешла на push-модель: отправка метрик по UDP в Telegraf (fire&forget, минимальная задержка, устойчивость к сбоям). Потеря ~0,01% пакетов признана некритичной для наблюдаемости.
Реализация — TelegrafMetricsBundle: Symfony-сервис отправляет метрики в формате Influx Line Protocol по UDP; Telegraf агрегирует (basicstats, период 10 с) и экспортирует одновременно в Prometheus/VictoriaMetrics/Influx/Graphite. Результат — «zero overhead» и масштабирование без service discovery: добавление сервера за ~30 секунд. Снижение латентности инкремента метрик с ~3 ms до ~0,05 ms (×60) экономит около 10 минут CPU в час на 200k RPM и даёт до +15% пропускной способности. Система метрик изолирована: падение Telegraf не валит приложение.
- Практики: ограничение кардинальности тегов; контроль размера UDP-пакета (<65 КБ); мониторинг статуса самого Telegraf.
- Альтернатива: VictoriaMetrics как более эффективное хранилище при большом объёме данных.
- Статус: бандл год+ в проде (без автотестов), готов к Symfony 6.4/7.0.