> Как следить за работой оркестратора и какие метрики использовать для проверки корректности (Go)
Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: InDrive
Стек: Go
> Пример ответа
Для мониторинга оркестратора (например, Kubernetes, Nomad или собственного решения на Go) важно отслеживать как инфраструктурные, так и бизнес-метрики. Основные метрики:
-
Состояние задач и воркеров:
- Количество активных, завершённых, упавших и зависших задач (через
prometheus.CounterилиGauge). - Время выполнения задачи (гистограмма
prometheus.Histogramдля p50/p99). - Частота перезапусков воркеров (если используется
runtime.Goexitили краш).
- Количество активных, завершённых, упавших и зависших задач (через
-
Производительность оркестратора:
- Задержка планирования (latency от постановки задачи до её запуска).
- Пропускная способность (количество задач в секунду).
- Размер очереди задач (если есть буферизация).
-
Ресурсы:
- Потребление CPU, памяти, горутин (через
runtime.ReadMemStatsиruntime.NumGoroutine). - Количество открытых соединений (например, к базе данных или очереди).
- Потребление CPU, памяти, горутин (через
-
Проверка корректности:
- Health checks: эндпоинт
/healthс проверкой зависимостей (БД, очередь). - Readiness probe: готовность принимать новые задачи (например, если очередь переполнена).
- Логирование: структурированные логи (JSON) с уровнем
errorдля критических сбоев. - Трассировка: распределённая трассировка (OpenTelemetry) для отслеживания цепочек вызовов.
- Health checks: эндпоинт
Пример реализации в Go:
GOvar (tasksScheduled = promauto.NewCounter(prometheus.CounterOpts{Name: "orchestrator_tasks_scheduled_total",Help: "Total number of scheduled tasks.",})taskDuration = promauto.NewHistogram(prometheus.HistogramOpts{Name: "orchestrator_task_duration_seconds",Help: "Duration of task execution.",Buckets: prometheus.DefBuckets,}))func monitorTask(task func()) {tasksScheduled.Inc()start := time.Now()defer taskDuration.Observe(time.Since(start).Seconds())task()}
Для алертинга используйте правила: если error_rate > 5% за 5 минут или queue_size > 1000 - срабатывает оповещение.
> Похожие задачи по Go
Вы используете один кластер или геораспределенную систему?
Как исправлять застрявшие платежи вручную при наличии реконсайл-джобы
Как задаются стратегии для каждого платежа: через API или иначе
Почему вы сменили PHP на Go, что было мотиватором
> Похожие задачи по backend
Вы используете один кластер или геораспределенную систему?
Как исправлять застрявшие платежи вручную при наличии реконсайл-джобы
Как задаются стратегии для каждого платежа: через API или иначе
Как реализовать коллекцию для хранения связи между customerId, accountNumber и статусом ареста счета без использования объектов?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью