Arc
Running it

Metrics and logs

What Arc reports, and what to watch when it is under pressure.

GET /metrics serves Prometheus text. Set ARC_METRICS_AUTH_TOKEN to require a bearer token.

MetricTypeLabels
arc_connections_activegaugeapp_id, node
arc_connections_totalcounterapp_id
arc_connection_duration_secondshistogramapp_id
arc_channels_occupiedgaugeapp_id, type
arc_subscriptions_activegaugeapp_id
arc_presence_membersgaugeapp_id
arc_messages_sent_totalcounterapp_id, source
arc_messages_received_totalcounterapp_id
arc_broadcast_duration_secondshistogramapp_id
arc_api_requests_totalcounterapp_id, endpoint, status
arc_api_request_duration_secondshistogramendpoint
arc_auth_failures_totalcounterapp_id, reason
arc_rate_limit_hits_totalcounterapp_id, kind
arc_webhook_deliveries_totalcounterstatus
arc_webhook_queue_depthgauge

Standard BEAM metrics are exported too: memory by type, run queue lengths, process and port counts, and scheduler utilisation.

No channel names in labels

Nothing is labelled with a channel, socket or user id. An app with 50,000 channels would otherwise produce 50,000 time series per metric and take Prometheus down. Per-channel numbers belong in the dashboard, queried on demand.

What to watch

  • Run queue length is the first number to move when a node is in trouble, before latency shows it.
  • Binary memory is where leaks appear, since every frame is a binary.
  • arc_rate_limit_hits_total tells you whether a client is being throttled before anyone reports it as "messages going missing".
  • arc_webhook_queue_depth rising means your endpoint is slow or failing.

Logs

Production logs are JSON. Connections are logged at debug, auth failures at info with the app id and reason, webhook failures at warning, crashes at error. Secrets, signatures and event payloads are never logged.

On this page