Ответ
Для обеспечения наблюдаемости (Observability) Go-приложений обычно используют комбинацию из трёх основных компонентов: метрик, логов и трассировок.
-
Метрики (Metrics) — числовые данные о состоянии системы в реальном времени.
-
Prometheus: Де-факто стандарт для сбора метрик. Приложение предоставляет метрики по HTTP-эндпоинту (
/metrics
), а Prometheus-сервер их периодически собирает.import ( "net/http" "github.com/prometheus/client_golang/prometheus/promhttp" ) func main() { http.Handle("/metrics", promhttp.Handler()) http.ListenAndServe(":2112", nil) }
expvar
: Встроенный в Go пакет для экспорта публичных переменных (счетчиков, статистик) в формате JSON через HTTP (/debug/vars
). Проще, чем Prometheus, но менее гибок.
-
-
Логирование (Logging) — запись событий, происходящих в приложении.
- Структурированное логирование: Вместо простого текста логи пишутся в формате JSON или key-value, что упрощает их парсинг и анализ.
- Популярные библиотеки:
zap
(очень быстрый) иzerolog
(быстрый, с удобным API).
-
Трассировка (Tracing) — отслеживание жизненного цикла запроса через несколько сервисов (в микросервисной архитектуре).
- OpenTelemetry: Современный стандарт для сбора трассировок, метрик и логов. Позволяет отправлять данные в различные бэкенды (Jaeger, Zipkin, Datadog).
- Помогает находить узкие места и понимать взаимодействие между компонентами системы.
-
Профилирование (Profiling) — анализ производительности и потребления ресурсов.
-
pprof
: Мощнейший встроенный инструмент в Go. Позволяет анализировать CPU, память, горутины и многое другое.import _ "net/http/pprof" func main() { go func() { // Эндпоинты будут доступны по :6060/debug/pprof/ http.ListenAndServe("localhost:6060", nil) }() }
-
-
Проверки состояния (Health Checks)
- Специальные HTTP-эндпоинты (
/health
,/ready
), которые сообщают внешним системам (например, Kubernetes или балансировщику), готово ли приложение принимать трафик.
- Специальные HTTP-эндпоинты (
Итог: Комплексный подход, сочетающий Prometheus для метрик, Zap/Zerolog для структурированных логов и OpenTelemetry для трассировок, является современным стандартом для наблюдаемости Go-приложений.