Skip to main content

Metrics

Prometheus exposition format via GET /metrics endpoint (no auth required on this endpoint).

Core Metrics

HTTP

arcan_http_requests_total{method, path, status}                    counter
arcan_http_request_duration_seconds{method, path} histogram

Secrets

arcan_secrets_total{realm, operation}                              counter
# operation: set, get, delete, list, export, encrypt

Leases

arcan_active_leases{realm, engine}                                 gauge
arcan_leases_total{realm, engine, operation} counter
# operation: create, revoke, renew, expire

Plugin Metrics

arcan_plugin_calls_total{plugin, method, status}                   counter
arcan_plugin_call_duration_seconds{plugin, method} histogram
arcan_plugin_status{plugin} gauge
# 1 = healthy, 0 = unhealthy, -1 = not loaded

Store Metrics

arcan_store_operations_total{store, operation, status}             counter
arcan_store_operation_duration_seconds{store, operation} histogram
# store: sqlite | postgres
# operation: read, write, delete, list, migrate

Auth Metrics

arcan_auth_attempts_total{method, status}                          counter
# method: token, oidc, k8s
# status: success, failure

Audit Metrics

arcan_audit_events_total{event_type}                               counter
arcan_audit_sink_errors_total{sink_type} counter

Implementation Approach

Start with a simple metrics collector that uses Go's expvar or a lightweight Prometheus client. No heavy framework. The point is placing counter increments in the right places from the start, so adding a full Prometheus client later is trivial.