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.