Architecture
ServiceRadar is an IT operations and network management platform — covering network monitoring, observability, and security analytics — built on an Elixir/ERTS control plane and a single Go edge agent. The agent runs collectors and sandboxed Wasm plugins, then streams results to the platform over mTLS gRPC.
This page stays high-level on purpose. It aims to give you the correct mental model before you dive into specific protocol or deployment docs.
High-Level System Diagram
Control Plane (ERTS Cluster)
The core platform is an ERTS cluster of:
core: APIs, orchestration, ingestion, and persistence. The control-plane OTP application isserviceradar_core; thecoreservice runs it via theserviceradar_core_elxwrapper, which enables cluster mode and schedulers but starts no duplicate children of its own.web-ng: UI and HTTP API surface; SRQL is embedded via Rustler/NIFagent-gateway: edge ingress (agent connectivity and ingestion)
These components communicate internally over mTLS-secured Erlang distribution (ERTS), using RPC and PubSub semantics.
Edge Agent
serviceradar-agent is the single edge runtime. It connects outbound to agent-gateway and:
- runs built-in collectors and engines (for example sync integrations, SNMP polling, discovery/mapping, mDNS)
- executes sandboxed Wasm plugins using
wazero - streams results using unary and streaming gRPC (chunked payloads for large datasets)
- participates in a bidirectional control stream for control-plane signaling
See Edge Model.
Notification Availability And The Failure Domain
Notification availability is bounded by core availability, deliberately and by
construction.
The alert engine runs in core. A core outage therefore means there are no
alerts to notify about, so there is nothing an independently available delivery
path could deliver. Building notification delivery to survive a core outage
would be a high-availability story with no engine behind it.
This matters because of a distinction that is easy to lose. A notification
channel can be routed through a serviceradar-agent inside a customer network
(execution_route: edge_agent), and that looks like an availability feature. It
is not one. Agent routing exists for egress locality - so a notification
leaves from inside the customer's own network, reaching a destination the control
plane cannot see - and an agent-routed channel still depends on core to decide
that a notification should be sent at all.
A genuine high-availability answer requires an edge-resident rule engine, which
ServiceRadar does not have and which would be a different design. Until then,
plan core availability as the availability of alerting itself.
Bulk Telemetry Pipeline (NATS JetStream)
Collectors publish bulk telemetry into JetStream (commonly the events and
metrics streams). The platform runs:
- in-process Zen normalization and persistence workers inside
serviceradar_core log-promotion, an in-process JetStream pull consumer insideserviceradar_corethat promotes matching logs into OCSF-style events
See Data Pipeline.
Kubernetes HA Profile
The Helm chart defaults stay conservative, but a validated Kubernetes HA profile runs the control plane and ingest workers with multiple replicas. For the queue-backed services, the HA pattern is shared JetStream streams and shared durable pull consumers rather than local singleton disk state. See Helm Configuration for replica counts and JetStream sizing.
Identity And TLS
- Everything is mTLS by default.
- SPIFFE/SPIRE is supported in Kubernetes deployments.
- Docker Compose uses non-SPIFFE mTLS bootstrapping (cert generation + distribution via volumes).
See TLS / mTLS.