Операционный гайд: runtime и метрики
Гайд описывает, где смотреть состояние MARV в проде: какие эндпоинты уже отдают готовые метрики, как читать runtime-блоки в ACP и какие флаги включают дополнительный экспорт.
Источники телеметрии
| Источник | Что содержит | Как включить/получить |
|---|---|---|
GET /acp/system/metrics | JSON c секциями host/cache/db/http/controllers/tasks/streams/traffic_flows | Доступно всем ACP-операторам (авторизация обязательна) |
GET /acp/cron_tasks/list | Помимо списка задач содержит блок runtime с running, running_since, runs, failures, p95 | Уже включено, обновляется в реальном времени |
GET /acp/streams/list и /acp/traffic_flows/list | В ответе есть runtime (per-handler latencies/errors) и commit (сборка сервера) | Можно использовать для health-check’ов UI |
/metrics (Prometheus) | marv_controller_*, marv_task_*, marv_http_client_* в формате Prometheus | В config.{mode}.yml выставить observability.metrics.prometheus_enabled: true |
Быстрые процедуры
Проверка cron-задач
- Открой
/acp/cron_tasks/list. - Отсортируй по
running == true, чтобы увидеть задачи, которые всё ещё исполняются (полеrunning_sinceпокажет момент старта). - Сравни
runs/failuresс задачами прошлого часа; резкий рост Failures => проверить логи задачи и параметры HTTP вызова (URL, headers, payload). - В
/acp/system/metrics→ секцияtasksищиp95_duration_msиlast_error. Еслиp95> SLA — возможно, задача цепляется за внешний сервис. - Для пост-мортема доступны сырые длительности в Prometheus (
marv_task_last_duration_millisecondsи bucket’ы контроллеров). - У каждой задачи есть
execution_scope:leaderозначает запуск только на лидере,all— на каждом сервере. Если таск неожиданно не исполняется, убедись, что текущий узел лидер или что scope выставлен корректно.
Мониторинг потоков и трафика
/acp/streams/listи/acp/traffic_flows/listвозвращаютruntimeccount,errors,avg_ms,p95_ms. Это тот же recorder, что и в/acp/system/metrics.controllers.- Проверяй
commit→ легко понять, какая версия кода отдает страницу. - Если
errors > 0, сразу смотриcontroller_metricsпо маршруту (пример:/acp/system/metrics→controllers["/acp/streams/list"]).
HTTP‑клиенты и ретраи
http.total_requests/errors/duration_ms_sumвидны в/acp/system/metrics.http.- Buckets задаются через
observability.metrics.http_buckets_ms; они же попадут в Prometheus (marv_http_client_duration_milliseconds_sum+ счетчики по bucket’ам). - Даже при использовании
internal/infrastructure/http/retryстатистика берётся с базового клиента, поэтому повторные запросы учитываются.
Трассировка запросов
- Middleware
RequestIDдобавляетX-Request-Idв каждый ответ и записывает его вgin.Contextкакrequest_id. ControllerMetricsMiddlewareпрокидываетtrace_id=request_idв логгер (zerolog) и вgin.Context.- В логах ищи
trace_id=<request-id>→ это тот же ID, что вернул клиенту HTTP-слой. - Если нужен признак страны клиента, смотри заголовок
X-Client-Country-Code(проксируется изCF-IPCountryCloudflare’а). - Для идентификации конкретного узла/процесса используй заголовок
X-Server-Id: значение берётся изapp.server.id(если не задан, контейнер сгенерирует ID сам) и синхронизируется с лидер-выборами (app.server.is_leaderв runtime-конфиге показывает текущее состояние).
Настройка Prometheus
yaml
observability:
metrics:
prometheus_enabled: true # включает /metrics
http_buckets_ms: [50,100,200,500,1000,2000,5000]После включения:
/metricsвозвращает текстовый снапшот (см.pkg/engine/prometheus.go).- рекомендуемые алерты:
rate(marv_controller_errors_total[5m]) > 0для критичных маршрутов ACP/V2.marv_task_running{tag="..."} == 1иtime() - marv_task_last_run_timestamp_seconds > X— зависшие cron-задачи.rate(marv_http_client_errors_total[5m]) / rate(marv_http_client_requests_total[5m]) > 0.05.
Чек-лист on-call
- Падение UI / ACP →
GET /acp/system/metrics, убедиться, что контроллерные метрики приходят, посмотретьhost.uptime_seconds. - Жалобы на задания →
/acp/cron_tasks/list+tasksсекция в системных метриках. - Проблемы со стримами/трафиком → runtime-блоки в соответствующих списках; фильтруем по
errors. - Внешние интеграции → HTTP секция (
total_requests, кастомные buckets) + логи поtrace_id. - Аудит версии → поле
commitв ACP-ответах +version(если выставлен) в/acp/system/metrics.
Этот гайд дополняет документ по наблюдаемости и план развития метрик/CI: первый описывает, какие метрики собираются, второй — как они попадают в CI. Здесь собраны именно операционные процедуры.
