Разработка кастомных Grafana-дашбордов для приложений

Когда пользователи жалуются на медленную работу, а инфраструктурные метрики в порядке, диагностика превращается в поиск иголки в стоге сена. Мы разрабатываем кастомные Grafana-дашборды, которые показывают метрики приложения: латентность, ошибки и состояние пулов соединений. Наша команда реализует проект под ключ — от аудита метрик до внедрения и последующей поддержки, чтобы вы могли находить причины проблем за минуты.
Часто задаваемые вопросы

Разработка кастомных Grafana-дашбордов для приложений

Мы часто сталкиваемся с ситуацией: инфраструктурные метрики в порядке, а пользователи жалуются на медленную работу API. Без дашборда приложения приходится греп-логить и надеяться на лучшее. С правильно настроенным дашбордом — 2 минуты на диагностику. Наш опыт показывает, что для сервиса с 50 000 RPS правильно спроектированный дашборд сокращает MTTR с 30 минут до 3-5.

Инфраструктурный дашборд показывает состояние железа: CPU, память, диск. Дашборд приложения — это метрики, важные для разработчика: количество запросов, процент ошибок, латентность по эндпоинтам, состояние пулов соединений. Разберем, как мы создаем такие дашборды под ключ для микросервисов.

Почему инфраструктурного дашборда недостаточно?

Типичный пример: CPU загружен на 30%, память свободна, но p95 latency скачет до 2 секунд. Инфраструктурный дашборд не покажет, что проблема в медленном SQL запросе или блокировке в пуле соединений. Только дашборд приложения с метриками бизнес-логики позволяет локализовать проблему за минуты.

Параметр Инфраструктурный дашборд Дашборд приложения
Фокус Ресурсы (CPU, RAM, IO) Бизнес-метрики (латентность, ошибки)
Владелец Администратор Разработчик / SRE
Метрики Системные счетчики Application metrics (RED method)
Время на отладку Часы, если проблема не в ресурсах Минуты

Какие метрики нужно экспортировать?

Приложение должно самостоятельно экспортировать метрики. Для Go используем prometheus/client_golang, для Python — prometheus_client, для Node.js — prom-client, для Java — Micrometer с Prometheus registry. Без инструментирования нет данных, без данных нет дашборда.

Минимальный набор метрик, который должно экспортировать каждое HTTP-приложение:

var (
	httpRequestsTotal = prometheus.NewCounterVec(
		prometheus.CounterOpts{
			Name: "http_requests_total",
			Help: "Total number of HTTP requests",
		},
		[]string{"method", "path", "status_code"},
	)
	httpRequestDuration = prometheus.NewHistogramVec(
		prometheus.HistogramOpts{
			Name: "http_request_duration_seconds",
			Help: "HTTP request duration in seconds",
			Buckets: []float64{0.01, 0.05, 0.1, 0.5, 1, 2, 5},
		},
		[]string{"method", "path", "status_code"},
	)
)

Именно с этими метриками строится основная часть application dashboard.

Ключевые панели дашборда приложения

Request rate — количество запросов в секунду, разбитое по статус-кодам. Быстро виден рост ошибок:

sum by (status_code) ( rate(http_requests_total{service="$service"}[5m]) ) 

Error rate — процент 5xx от общего трафика. Этот показатель часто вешают как stat panel с пороговой подсветкой: зелёный до 1%, жёлтый до 5%, красный выше:

sum(rate(http_requests_total{service="$service", status_code=~"5.."}[5m])) / sum(rate(http_requests_total{service="$service"}[5m])) * 100 

Latency percentiles — p50, p95, p99. Среднее значение latency почти всегда обманывает. p99 — то, что видит 1% самых невезучих пользователей:

histogram_quantile(0.99, sum by (le, method) ( rate(http_request_duration_seconds_bucket{service="$service"}[5m]) ) ) 

Saturation — состояние ресурсов приложения: размер connection pool, горутины, очередь запросов. Без этого можно видеть нормальные latency прямо до момента, когда сервис ляжет под нагрузкой.

Типичные SLO thresholds:

SLO Threshold Alert if
Availability >=99.9% <99.9%
Latency p99 <=500ms >500ms
Error rate <=1% >1%

Drill-down структура

Хороший набор дашбордов для сервиса строится в три уровня.

Overview — состояние всех инстансов сервиса на одном экране. Если что-то красное — понятно, где смотреть дальше.

Instance detail — один инстанс с полным набором метрик: request rate, latency breakdown по endpoint, error rate, JVM heap (если Java), goroutines (если Go), DB connection pool usage.

Endpoint detail — конкретный HTTP endpoint. Latency distribution (histogram heatmap), размер payload запросов/ответов, downstream зависимости. Этот уровень нужен при дебаге конкретной медленной операции.

Переход между уровнями через data link — клик по инстансу на overview открывает instance detail с правильными переменными. Это не настраивается автоматически, нужно прописывать вручную через Data links в panel settings.

Аннотации деплоев

Деплой приложения должен быть виден на дашборде. Аннотация через Grafana Annotations API или Prometheus event:

curl -X POST http://grafana:3000/api/annotations \
  -H "Content-Type: application/json" \
  -d '{ "time": '"$(date +%s000)"', "tags": ["deployment", '"$SERVICE_NAME"'], "text": "Deploy '"$VERSION"' to production" }'

В Grafana это отображается как вертикальная линия на всех time series панелях. Если после деплоя p99 latency выросла — это видно немедленно, без ручного сопоставления времени деплоя с графиком.

Процесс разработки дашборда

Начинаем с инвентаризации метрик: что экспортирует приложение, какие labels доступны, есть ли SLO которые нужно отражать. Без понимания доступных метрик дашборд не получится.

Дальше — структура дашборда согласуется с командой разработки: они лучше знают, какие endpoint критичны, какие downstream зависимости важны, какие метрики они сами смотрят при отладке.

Реализация: панели, переменные, data links между уровнями, threshold colors, единицы измерения (не «значение 0.045», а «45 ms»). Финально — provisioning JSON в git и документация по добавлению новых метрик.

Что входит в работу (deliverables)

  • Аудит существующих метрик и экспортеров
  • Проектирование структуры дашбордов (макет)
  • Реализация панелей, переменных, data links
  • Настройка аннотаций деплоев
  • Документация по эксплуатации (README, provisioning JSON)
  • Обучение команды (1 час)
  • Гарантия на результат: мы не сдаем дашборд, пока не получим подтверждение, что все метрики корректны

Сроки: дашборд для одного сервиса с тремя уровнями детализации — 2-3 дня. Стандартизированный шаблон для типового микросервиса — 1-2 дня, дальше адаптация под конкретные сервисы быстрее.

Как ускорить разработку дашбордов с помощью шаблонов?

Мы подготовили шаблоны для типовых микросервисов (Go, Python, Java). Они покрывают 80% типовых метрик. Адаптация под специфические требования занимает всего день. Более 5 лет опыта в DevOps позволяют нам гарантировать, что дашборд будет соответствовать лучшим практикам Prometheus и Grafana.

Хотите такой же дашборд для своего сервиса? Свяжитесь с нами — оценим проект за 1 день и предложим подходящее решение.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1141