StatsD

Тема дорожной карты · Observability

StatsD — лёгкий демон агрегации метрик на основе UDP, изначально разработанный в Etsy для сбора метрик приложений с минимальными накладными расходами. Приложения отправляют метрики в StatsD по простому текстовому протоколу — например, api.request.duration:42|ms — а демон агрегирует их (вычисляя скорости, средние значения и перцентили) перед пересылкой результатов в бэкенд, такой как Graphite, InfluxDB или Prometheus через statsd_exporter. StatsD поддерживает счётчики, датчики, таймеры и наборы, что делает его универсальным инструментом для пользовательских метрик приложений в конвейерах наблюдаемости. Поскольку StatsD использует UDP без подтверждения доставки, он добавляет пренебрежимо малую задержку в инструментированные пути выполнения кода, что важно для высокопроизводительных сервисов. Хотя новые стеки наблюдаемости отдают предпочтение OpenTelemetry для стандартизированного инструментирования, StatsD по-прежнему широко используется в устаревших системах и легко внедряется без каких-либо зависимостей от SDK.

Как это работает

StatsD — числовые агрегаты по времени: counters, gauges, histograms. Дёшево хранить, быстро запрашивать, идеально для дашбордов + алертов. Стандарт: Prometheus (де факто), VictoriaMetrics (совместимый, часто проще эксплуатировать), формат OpenMetrics. Инструментируйте приложения client-библиотеками (prom-client для Node, prometheus_client для Python и т.д.). Конвенция имён: <namespace>_<subsystem>_<name>_<unit>. Labels = измерения; cardinality важна.

Когда применять

По дефолту Prometheus-формат метрик везде. 4 золотых сигнала (rate, error, latency-percentile, saturation) на каждый сервис. Histograms — для latency (per-replica + агрегируемые). Pre-aggregate через recording rules для дашбордов с частыми запросами. Cardinality labels ограниченная — высокая cardinality убивает Prometheus.

Типичные ошибки

Ловушки StatsD: per-user-id labels (взрыв cardinality); Counter где должен быть Histogram (http_requests не говорит про latency); короткий retention без long-term storage backend (когда исследуете "что было на прошлой неделе", данных уже нет).

Связанные понятия

Полезные ресурсы