SIP-exporter — eBPF-based SIP monitoring service written in Go

Hi everyone,

I built a SIP monitoring service that uses eBPF to capture SIP traffic directly in the Linux kernel and exports metrics to Prometheus-compatible systems (Prometheus, VictoriaMetrics, Grafana Cloud, etc.).

How it works:

SIP Traffic → NIC → eBPF socket filter → ringbuf → Go poller → SIP parser → Prometheus

The eBPF program (C) is compiled with clang and loaded via cilium/ebpf. It attaches as a socket filter, intercepts UDP packets on SIP ports (5060/5061), and pushes them to userspace through a ring buffer. The Go side polls the ring buffer, parses raw SIP messages, and updates Prometheus counters.

What it tracks:

  • ~30 Prometheus counters: per-method (INVITE, BYE, REGISTER, OPTIONS, etc.), per-status code (1xx–6xx), active dialog count
  • RFC 6076 Session Establishment Ratio — success rate of INVITE→200OK, excluding 3xx redirects per spec
  • Dialog lifecycle: created on 200 OK to INVITE, terminated on 200 OK to BYE

Performance (userspace only, i7-8665U):

Operation Latency Throughput
Packet parsing ~124ns/op 8M pkt/sec
Full processing with metrics ~3μs/op 300k pkt/sec

Implementation highlights:

  • Zero-copy packet transfer from kernel via ringbuf
  • VLAN-tagged frame support
  • E2E tests with SIPp via testcontainers-go — real traffic generation, metric verification, dialog cleanup validation
  • Single container deployment, no external dependencies

Known limitation: The eBPF verifier doesn’t allow variable-length bpf_skb_load_bytes, so packets are copied in 64-byte blocks. I’m planning to migrate to AF_PACKET with PACKET_RX_RING for arbitrary packet sizes.

Repo: GitHub - aibudaevv/sip-exporter: High-performance eBPF-based SIP monitoring service that captures and exports telephony metrics to Prometheus-compatible systems (Prometheus, VictoriaMetrics, etc.). Designed for sub-microsecond packet processing with zero-copy capture directly in the Linux kernel. · GitHub

Happy to answer questions about the eBPF integration, SIP dialog state machine, or the Prometheus metric design.

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.