Skip to content

Metrics reference ​

The server exposes Prometheus metrics at GET /metrics. Access fails closed: the endpoint answers 401 unless METRICS_AUTH_TOKEN is set (scrapers then send it as a bearer token) or METRICS_ALLOW_ANONYMOUS=true. See Monitoring for the scrape configuration and how to read the families.

Labelled metrics only appear after their first observation. Gauges of the database pools and of federation peers are read at scrape time.

The Go runtime (go_*) and process (process_*) metrics of the standard client library are exposed as well and not listed here.

Audit log ​

MetricTypeLabelsHelp
openartifact_audit_dropped_totalcounternoneTotal number of audit events dropped due to backpressure.
openartifact_audit_retention_deleted_totalcounternoneTotal number of audit log entries deleted for being older than audit.retentionDays.
openartifact_audit_retention_last_run_timestamp_secondsgaugenoneUnix time the last audit retention pass finished without error on this replica (a pass that found nothing to delete counts).

Blob store ​

MetricTypeLabelsHelp
openartifact_blob_bytes_totalcounteroperationTotal bytes transferred to/from the blob store.
openartifact_blob_deletions_pendinggaugenoneBlob copies queued for deletion (in their grace period, or held back by a running backup).
openartifact_blob_deletions_swept_totalcounterresultQueued blob deletions the sweeper finished, by result: deleted (bytes removed) or kept (the blob was re-uploaded or the copy is authoritative again).
openartifact_blob_downloads_totalcountermode, reasonBlob download GET requests by delivery mode: mode=redirect (307 to a presigned URL) or mode=stream (served by this server); reason says why a download was streamed.
openartifact_blob_operation_duration_secondshistogramoperation, resultBlob store operation latency by operation (put, get, exists, exists_by_sha256, delete, size, metadata) and result (ok, error).

Buckets of openartifact_blob_operation_duration_seconds: 0.0005, 0.001, 0.0025, 0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 10, 60.

Database connection pools ​

MetricTypeLabelsHelp
openartifact_db_pool_acquire_canceled_totalcounterpoolAcquisitions abandoned because the caller's context ended while waiting (pgx pool only).
openartifact_db_pool_acquire_seconds_totalcounterpoolCumulative time spent acquiring connections, including waits (pgx pool only).
openartifact_db_pool_acquire_wait_seconds_totalcounterpoolCumulative time acquisitions spent waiting for a connection.
openartifact_db_pool_acquire_waits_totalcounterpoolConnection acquisitions that had to wait because every connection was in use.
openartifact_db_pool_acquires_totalcounterpoolSuccessful connection acquisitions (pgx pool only; database/sql does not count them).
openartifact_db_pool_connectionsgaugepool, stateEstablished database connections by state: in_use (checked out) or idle.
openartifact_db_pool_connections_closed_totalcounterpool, reasonConnections closed by the pool, by reason: max_lifetime or max_idle (connection churn).
openartifact_db_pool_connections_created_totalcounterpoolConnections the pool has opened (pgx pool only).
openartifact_db_pool_max_connectionsgaugepoolConfigured connection limit of the pool.
openartifact_db_pool_open_connectionsgaugepoolDatabase connections that exist (in use, idle, and for the pgx pool those being opened).

Federation ​

MetricTypeLabelsHelp
openartifact_federation_applied_totalcounterrepo, peer, resultLog entries pulled from a peer, by result: applied, skipped (already up to date), deferred (set aside for retry) or failed.
openartifact_federation_backlog_unitsgaugerepo, peerLog positions of a peer that have not been pulled yet.
openartifact_federation_conflicts_totalcounterrepo, peerLocal changes superseded by a different state of the same unit from a peer (last writer wins).
openartifact_federation_lag_secondsgaugerepo, peerAge of the oldest change of a peer that has not been applied yet (0 when caught up).
openartifact_federation_last_success_timestamp_secondsgaugerepo, peerUnix time of the last successful pull of a peer (0 when it never succeeded).
openartifact_federation_partial_bytesgaugenoneBytes of interrupted blob downloads kept in the federation spool for resuming.
openartifact_federation_pull_errors_totalcounterrepo, peerPull attempts of a peer that ended in an error.
openartifact_federation_resumed_totalcounterrepo, peerBlob transfers from a peer resumed with a Range request after the connection dropped (or from a partial download of an earlier pull).

HTTP ​

MetricTypeLabelsHelp
openartifact_http_request_duration_secondshistogrammethod, pathHTTP request latency in seconds.
openartifact_http_requests_totalcountermethod, path, statusTotal number of HTTP requests by method, route template (never the raw URL) and status.

Buckets of openartifact_http_request_duration_seconds: 0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10.

Metadata regeneration ​

MetricTypeLabelsHelp
openartifact_metadata_regeneration_duration_secondshistogramformatWall-clock time of metadata regeneration cycles.
openartifact_metadata_regenerations_totalcounterformatTotal number of metadata regeneration cycles completed.

Buckets of openartifact_metadata_regeneration_duration_seconds: 0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10.

Disaster-recovery journal ​

MetricTypeLabelsHelp
openartifact_recovery_failures_totalcounternoneJournal operations that failed and will be retried with backoff.
openartifact_recovery_journal_backloggaugenoneChanged rows waiting for their disaster-recovery sidecar to be written or deleted.
openartifact_recovery_oldest_dirty_age_secondsgaugenoneAge of the oldest changed row still waiting for its sidecar (0 when the journal is drained).
openartifact_recovery_reconcile_marked_totalcounternoneRows the journal reconcile marked dirty (rows without a sidecar, sidecars without a row).
openartifact_recovery_sidecars_deleted_totalcounternoneDisaster-recovery sidecar blobs deleted (their row is gone, or a newer sidecar superseded them).
openartifact_recovery_sidecars_written_totalcounternoneDisaster-recovery sidecar blobs written to the blob store.

Blob replication ​

MetricTypeLabelsHelp
openartifact_replication_backloggaugeopBlob replication operations waiting in the queue, by op (copy, delete).
openartifact_replication_enqueue_failures_totalcounternoneReplication operations that could not be queued; the verify pass catches such blobs.
openartifact_replication_failures_totalcounteropFailed replication attempts (they are retried with backoff), by op.
openartifact_replication_fallback_reads_totalcountercallReads answered by the replica because the primary could not, by call (get, size, exists, metadata).
openartifact_replication_last_verify_timestamp_secondsgaugenoneUnix time the last verify pass finished (0 = never).
openartifact_replication_missing_primary_totalcounternoneQueued copies whose blob was not on the primary store.
openartifact_replication_oldest_pending_age_secondsgaugenoneAge of the oldest queued replication operation (the replication lag); 0 when the queue is empty.
openartifact_replication_replicated_bytes_totalcounternoneBytes copied to the replica.
openartifact_replication_replicated_totalcounternoneBlobs copied to the replica.
openartifact_replication_verify_checked_totalcounternoneBlobs examined by verify passes.
openartifact_replication_verify_mismatched_totalcounternoneBlobs verify passes found with different sizes (or contents, with verifyDeep) on the two sides.
openartifact_replication_verify_missing_totalcountersideBlobs verify passes found missing, by side (replica, primary).
openartifact_replication_verify_repaired_totalcountersideBlobs verify passes and read repairs fixed, by side repaired (replica, primary).

Vulnerability scanners ​

MetricTypeLabelsHelp
openartifact_scanner_db_last_success_timestamp_secondsgaugescannerUnix time of the last successful vulnerability database refresh (or the database's age on disk after a restart), by scanner.
openartifact_scanner_db_update_attempts_totalcounterscanner, resultVulnerability database refreshes of the Trivy and Grype scanners, by scanner and result (success, failure).
openartifact_scanner_install_attempts_totalcounterscanner, resultRuntime installs of the Trivy and Grype binaries, by scanner and result (installed, reused, unsupported_platform, download_failed, checksum_mismatch, extract_failed, noexec, insecure_location, failed).

Storage tiering ​

MetricTypeLabelsHelp
openartifact_storage_tier_blobsgaugetierBlobs placed on each storage tier, refreshed by the tier mover.
openartifact_storage_tier_bytesgaugetierBytes of blobs placed on each storage tier, refreshed by the tier mover.
openartifact_storage_tier_moved_bytes_totalcounterfrom, toBytes of blobs moved between storage tiers.
openartifact_storage_tier_moves_pendinggaugenoneTier moves left in the journal (interrupted or failed, awaiting recovery).
openartifact_storage_tier_moves_totalcounterfrom, to, resultBlob moves between storage tiers by outcome (moved, failed, skipped).
openartifact_storage_tier_reads_totalcountertierBlob reads served from each storage tier.

Telemetry ​

MetricTypeLabelsHelp
openartifact_telemetry_log_records_dropped_totalcounterscopeLog records not exported over OTLP because the export queue was full (collector slow or unreachable), by instrumentation scope.

Trash ​

MetricTypeLabelsHelp
openartifact_trash_purged_totalcounterkindTotal number of trashed items permanently removed by the retention purge, by kind.

Uploads ​

MetricTypeLabelsHelp
openartifact_uploads_totalcounterformat, resultHosted upload requests by package format and result (success, error).

Free software under the AGPL-3.0-or-later.