Network monitoring built for tens of thousands of nodes.
Yagra is an open-source NMS written in Rust. ICMP, SNMP v2c/v3, HTTP and API checks; distributed pollers; alerting that won’t flood your on-call. It ships as Docker containers and scales out by config, not rewrite.
Forward it onward: filtered tee to a SIEM, or rows into BigQuery
Traffic flow
NetFlow v5/v9, IPFIX and sFlow v5 into ClickHouse
Top talkers, ports and protocols
AS conversations (Sankey) with offline IP→ASN enrichment
Click any dimension to filter the flows
Operator UX
Customizable shared and per-user dashboards
Chart every metric a device reports, not only the anticipated ones
Topology and dependency maps
Reports to HTML, CSV and PDF, on a schedule
Full mobile parity, EN/日本語, light and dark
AI & automation
Built-in MCP server for AI assistants (opt-in, off by default)
Query status, metrics, flow and events; run Troubleshoot analyses
Audited write actions: ack, maintenance, poll — never device config
API tokens with role scope; per-tool RBAC
Architecture
Decoupled from day one.
Core and pollers talk only through the bus, so pollers are stateless, horizontally scalable, and deployable at remote sites across NAT and firewalls. They poll outward and receive passive intake inward — syslog, traps and flow exports — and each kind of data lands in the store built for it.
Core never calls a poller directly, and receives no device traffic of its own: syslog, SNMP traps and flow exports all land on a poller at the edge — including remote-site pollers behind NAT — and reach core over the bus. Inbound webhooks are the one exception, arriving straight on the API. NATS is the broker itself, a backing service like the stores; Bus is the client crate compiled into core and into every poller, which is why it appears in both.
Components
Every one of these appears in the diagram above. Core, Poller and the WebUI are the processes you deploy; the small boxes drawn inside them are the Rust crates each process is built from, and the tag repeats which process that is.
Corecore
Orchestration, scheduling, northbound REST API
Pollerpoller
ICMP/SNMP/API polling and passive intake — stateless, horizontally scalable
WebUIbrowser
Dashboards and visualization (React + TypeScript)
Buscore + poller
Job distribution and poller fan-out over NATS
Transportpoller
One abstraction over ICMP, SNMP and HTTP device I/O
Topologycore
Dependency graph powering suppression and the network map
Discoverycore + poller
Device discovery and classification
Alertcore
State machine, hysteresis, dependency suppression
Ingestpoller
Syslog, SNMP-trap and flow parsing; edge rate limiting
Forwardcore
Filtered tee of received events and flows to external collectors
Secretscore
Envelope-encrypted device credentials — only core holds the key
The MVP runs co-located in a few containers; the same build scales out to distributed pollers and highly available stores by configuration.
50,000nodes verified in load testing
Poolslocation-affinity poller assignment
Partitionride-out with metric backfill
HAcore leader election and failover
Pollers hold no per-target state, so the coordinator assigns nodes across live pollers by consistent hashing and reassigns on heartbeat loss. Remote pollers dial out to a central bus and buffer results through a network partition — replaying metrics on reconnect, while alerts are never backfilled so a recovered link can’t flood you with stale events.
Security posture
The WebUI is HTTPS out of the box — import your own certificate from the UI, with no restart. Monitoring credentials are envelope-encrypted (AES-256-GCM) with the key held outside the database. Single sign-on via OIDC — with guided setup for Microsoft Entra ID, Okta and Google Workspace that asks only for what each product needs — sign-in against LDAP or Active Directory, role-based access control, an immutable audit log, and per-poller-scoped bus credentials. The advanced distribution and HA features are opt-in — defaults stay conservative and backward-compatible.
Quickstart
Up and running in one command.
Bring up core, a poller, the WebUI and the backing stores (PostgreSQL, Redis, NATS, VictoriaMetrics) with Docker Compose.
Open beta: bug reports and questions go to GitHub Issues, the only contact channel for the project — there is no contact e-mail address. Pull requests are not being accepted at this time.