Перейти к содержимому

Метрики Prometheus

NORA публикует Prometheus-совместимые метрики на эндпоинте /metrics. Аутентификация не требуется.

Окно терминала
curl http://localhost:4000/metrics
МетрикаТипМеткиОписание
nora_http_requests_totalCounterregistry, method, statusВсего обработано HTTP-запросов
nora_http_request_duration_secondsHistogramregistry, methodЗадержка запроса (корзины: от 1 мс до 10 с)

Метка registry определяется по пути запроса:

Префикс путиМетка
/v2*docker
/npm*npm
/simple*, /packages*pypi
/maven2*maven
/cargo*cargo
/go/*go
/raw/*raw
/gems/*gems
/terraform/*terraform
/ansible/*ansible
/nuget/*nuget
/pub/*pub
/conan/*conan
/ui*ui
(прочие пути)other
МетрикаТипМеткиОписание
nora_cache_requests_totalCounterregistry, resultОбращения к кэшу (hit или miss)
МетрикаТипМеткиОписание
nora_storage_operations_totalCounteroperation, statusОперации хранилища (get, put, delete, list) со статусом ok или error
nora_artifacts_totalGaugeregistryКоличество артефактов, хранящихся в данный момент по каждому реестру (растёт и уменьшается вместе с GC)
nora_storage_bytesGaugeregistryОбъём хранимых артефактов в байтах по каждому реестру (метка total = полный объём, включая метаданные)
nora_storage_get_bytesHistogramregistryРазмер тела буферизованных чтений Storage::get() (корзины: от 1 КБ до 512 МБ)
nora_storage_verify_duration_secondsHistogramregistryВремя проверки целостности SHA-256 по «настенным» часам на каждое буферизованное чтение, включая время ожидания в очереди блокирующего пула

Доступны при NORA_CB_ENABLED=true.

МетрикаТипМеткиОписание
nora_circuit_breaker_stateGaugeregistryТекущее состояние: 0 = closed, 1 = open, 2 = half-open
nora_circuit_breaker_rejections_totalCounterregistryЗапросы, отклонённые открытым предохранителем
МетрикаТипОписание
nora_gc_blobs_removed_totalCounterОсиротевшие blob-объекты, удалённые сборкой мусора
nora_gc_bytes_freed_totalCounterБайты, освобождённые сборкой мусора
nora_gc_duration_secondsHistogramДлительность запусков GC (корзины: от 0.1 с до 300 с)
nora_gc_last_run_timestampGaugeUnix-метка времени последнего запуска GC
nora_gc_metadata_phantoms_totalCounterФантомные записи версий, очищенные из метаданных
nora_gc_stat_failures_totalCounterОсиротевшие объекты, для которых GC не смог выполнить stat (сохранены, возраст неизвестен) — ненулевое значение означает, что GC, возможно, не может освободить место; настройте на это алерт
МетрикаТипОписание
nora_retention_versions_deleted_totalCounterВерсии, удалённые политиками хранения
nora_retention_bytes_freed_totalCounterБайты, освобождённые политиками хранения
nora_retention_duration_secondsHistogramДлительность запусков политик хранения (корзины: от 0.1 с до 300 с)
nora_retention_last_run_timestampGaugeUnix-метка времени последнего запуска политик хранения
МетрикаТипМеткиОписание
nora_downloads_totalCounterregistryВсего скачиваний артефактов
nora_uploads_totalCounterregistryВсего загрузок артефактов

Публикуются на пути прокси, когда NORA обращается к настроенному вышестоящему источнику.

МетрикаТипМеткиОписание
nora_upstream_request_duration_secondsHistogramregistry, statusЗадержка запроса к вышестоящему прокси (корзины: от 1 мс до 30 с)
nora_proxy_active_downloadsGauge(нет)Загрузки blob-объектов Docker, передаваемые потоком в данный момент
nora_proxy_download_bytes_totalCounter(нет)Всего байт, скачанных из вышестоящих реестров Docker (только проверенные скачивания)

Ревалидация по условным запросам (304) и коалесцирование запросов по схеме single-flight на пути прокси.

МетрикаТипМеткиОписание
nora_proxy_upstream_304_totalCounterregistryОтветы 304 Not Modified от вышестоящего источника при ревалидации
nora_proxy_revalidation_bytes_saved_totalCounterregistryБайты тела, которые не пришлось скачивать заново благодаря ревалидации 304
nora_proxy_revalidation_errors_totalCounterregistryПопытки ревалидации, завершившиеся откатом к полной загрузке
nora_proxy_coalesced_totalCounterregistryЗапросы-последователи, обслуженные от лидера single-flight без обращения к вышестоящему источнику
nora_proxy_inflightGaugeregistryРазличные ключи, скачиваемые в данный момент в рамках коалесцирования single-flight
nora_proxy_coalesce_fallthrough_totalCounterregistry, reasonПоследователи, которые вместо коалесцирования выполнили собственную загрузку (reasonleader, budget)
МетрикаТипМеткиОписание
nora_curation_decisions_totalCounterdecisionРешения курирования по фактическому результату (allow, block, audit, skip)
nora_quarantine_holds_totalCounterregistry, outcomeАртефакты, задержанные карантином по дайджесту (outcomeblocked, observed)
МетрикаТипМеткиОписание
nora_auth_namespace_scope_totalCounterprovider, decisionРешения об энфорсменте OIDC namespace_scope (allow, deny, would_deny)
nora_response_upstream_url_leak_totalCounterregistryИмя хоста вышестоящего источника обнаружено в теле исходящего ответа
nora_leak_detection_skipped_totalCounterreasonПропущенные проверки на утечки (тело слишком велико или размер неизвестен)
МетрикаТипМеткиОписание
nora_cache_write_errors_totalCounterregistry, operationОшибки записи в кэш в фоновых задачах кэширования
nora_metadata_corrupt_totalCounterregistryПовреждённые метаданные, обнаруженные при публикации (ошибка разбора существующих данных)
МетрикаТипМеткиОписание
nora_uptime_secondsGauge(нет)Время работы процесса в секундах
# Request rate by registry (5m window)
sum by (registry) (rate(nora_http_requests_total[5m]))
# Cache hit ratio
sum(rate(nora_cache_requests_total{result="hit"}[5m]))
/
sum(rate(nora_cache_requests_total[5m]))
# p99 latency per registry
histogram_quantile(0.99, sum by (le, registry) (rate(nora_http_request_duration_seconds_bucket[5m])))
# Circuit breaker alerts (open state)
nora_circuit_breaker_state == 1
# GC bytes freed per hour
increase(nora_gc_bytes_freed_total[1h])
prometheus.yml
scrape_configs:
- job_name: nora
scrape_interval: 15s
static_configs:
- targets: ['nora:4000']
metrics_path: /metrics