Мониторинг Go-сервисов с Prometheus и client_golang
Сервис без метрик — чёрный ящик: падает RPS, растут очереди, утекает память, а вы узнаёте об этом от пользователей. Prometheus и client_golang — стандарт мониторинга Go-проектов, который поднимается за вечер.
Курс учит думать метриками: типы Counter и Gauge, гистограммы латентности, лейблы и их коварная кардинальность. Собираем свой /metrics endpoint, оборачиваем HTTP-хендлеры, добавляем бизнес-метрики, читаем PromQL и рисуем дашборды в Grafana. Финал — полный мониторинг веб-сервиса: трафик, ошибки, латентность и бизнес.
Чему научитесь
Чему научитесь
- Понимать четыре типа метрик и выбирать правильный
- Экспортировать метрики из Go через promhttp
- Инструментировать HTTP-запросы и бизнес-события
- Писать PromQL-запросы: rate, sum, p99
- Строить дашборды и различать метрики от алертов
- Не утопить Prometheus кардинальностью лейблов
Для кого курс
- Backend-разработчикам, чьи сервисы уже в проде
- DevOps и SRE, которым нужен мост в код приложения
- Тем, кто хочет отвечать «что сломалось» за минуту, а не за час
Что понадобится
- Базовый Go и хотя бы один написанный HTTP-сервис
- Знакомство с chi или Gin — примеры будут на них
Программа курса: 25 уроков
- 1Знакомство: почему сервис молчит, а падаетSLI, SLO и pull-модель Prometheus: язык наблюдаемости.~16 мин · мониторинг go, prometheus golang
- 2Четыре типа метрик: Counter, Gauge, Histogram, SummaryСчётчик против датчика: как не измерять температуру счётчиком.~18 мин · типы метрик prometheus, counter gauge histogram
- 3client_golang: первый /metrics endpointpromhttp.Handler, go get и страница метрик за минуту.~18 мин · client_golang установка, promhttp handler
- 4Counter: считаем то, что только растётNewCounter, Inc, Add: запросы, ошибки, перезапуски.~18 мин · prometheus counter go, newcounter golang
- 5Gauge: текущее состояние системыSet, Inc, Dec: размер очереди, активные пользователи.~16 мин · prometheus gauge go, gauge метрика пример
- 6Лейблы: срезы по маршрутам и статусамWithLabelValues и CounterVec: одна метрика, много измерений.~18 мин · prometheus labels go, countervec пример
- 7Histogram: латентность и bucket'ыObserve, осмысленные бакеты и p99: время ответа сервиса.~20 мин · prometheus histogram go, латентность метрики
- 8Summary против HistogramКвантили на стороне клиента и почему histogram обычно лучше.~16 мин · prometheus summary, summary vs histogram
- 9Метрики HTTP: InstrumentHandlerГотовые обёртки promhttp и свой middleware: duration, размер, статусы.~20 мин · http метрики go, instrumenthandler
- 10Бизнес-метрики: заказы и оплатыСчётчик заказов, суммы, конверсии: метрики, понятные продукту.~18 мин · бизнес метрики go, метрики заказа
- 11Встроенные метрики процесса GoGoroutines, GC, память: что уже есть в /metrics бесплатно.~16 мин · go метрики процесса, goroutines метрика
- 12PromQL: первая пара запросовrate, sum by, увеличение за окно: читаем свои метрики.~20 мин · promql запросы, rate prometheus
- 13Grafana: дашборд из запросовПанели, ряды, переменные: как рисуют мониторинг.~18 мин · grafana дашборд go, панели grafana
- 14Алерты: правила и дежурствоВ чём разница с метриками, Alertmanager и тишина ночью.~16 мин · алерты prometheus, alertmanager обзор
- 15Таймеры: prometheus.NewTimer и deferОбёртка для латентности функций: измеряем не только HTTP.~16 мин · prometheus newtimer, таймер функции go
- 16Горутины и память: свои сборщикиNumGoroutine в Gauge: ловим утечку до OOM.~18 мин · метрики goroutine, утечка горутин
- 17Кардинальность: тихий убийца PrometheususerID в лейбле и тысячи серий: где граница разумного.~18 мин · кардинальность лейблов, prometheus лимиты
- 18Свой Collector: Describe и CollectИнтерфейс сборщика: метрики из сторонних систем на лету.~20 мин · prometheus collector go, свой сборщик метрик
- 19Health-check: liveness и readinesshealthz и readyz для оркестратора и их связь с метриками.~16 мин · health check go, readiness probe
- 20Стресс-тест: метрики под нагрузкойНагружаем сервис и смотрим, как растут серии и латентность.~18 мин · стресс тест go, нагрузочное тестирование
- 21Логи и метрики: одна историяZap-поля и метрики ошибок: корреляция при разборе инцидента.~16 мин · логи и метрики, корреляция инцидентов
- 22Реестры и namespace метрикNamespace, Subsystem, свой Registry: дисциплина имён.~16 мин · prometheus namespace, registry go
- 23Скрейпинг: prometheus.yml и сервис-дискавериКак Prometheus находит ваш /metrics и с каким интервалом.~18 мин · prometheus.yml настройка, scrape interval
- 24Эксплуатация: что мониторить в первую очередьКрасный метод: трафик, ошибки, латентность — порядок внедрения.~16 мин · красный метод мониторинг, что мониторить сервис
- 25Итоговый проект: мониторинг веб-сервисаПолный набор: HTTP-метрики, бизнес, память и дашборд.~24 мин · мониторинг веб сервиса go, prometheus итоговый проект
Вопросы о курсе
Нужен ли сам сервер Prometheus для курса?
Нет. Код метрик пишется и изучается в браузере. Для полного цикла со скрейпом и Grafana в середине курса есть пошаговая инструкция Docker Compose — но она опциональна.
Это курс DevOps или Go?
Go в первую очередь: вы учитесь писать код, который удобно мониторить. PromQL и Grafana даются ровно настолько, чтобы ваши метрики кто-то увидел.
Чем курс отличается от урока про /metrics?
Глубиной: типы метрик, кардинальность, собственный Collector, связка логов с метриками и бизнес-события — тема на книгу, сжатая до 25 уроков.