Syslog Ingest Guide
ServiceRadar collects log events through serviceradar-log-collector, publishes
them to NATS JetStream, normalizes them with in-process Zen rules in core-elx,
and stores them in CNPG/Timescale. Pair this quick guide with the
Device Configuration Reference
and the Kubernetes External Ingestion guide when
onboarding new platforms.
Provision the Gateway
- Expose
serviceradar-log-collectoron UDP 514. In Kubernetes, prefer a shared Gateway API UDP listener plusgatewayApi.syslog.enabledwhen the cluster already has a shared Envoy Gateway. UselogCollector.externalService.enabledonly when you need a dedicated LoadBalancer or NodePort. - Allocate dedicated volumes if you need to buffer bursts; CNPG ingests events in near real time, but disk headroom protects against traffic spikes.
- Attach
site,account, or other metadata using Settings -> Integrations so logs stay filterable in SRQL and dashboards.
TCP Syslog
The default serviceradar-log-collector deployment listens for syslog over UDP 514. To accept syslog over TCP 514, enable the separate serviceradar-log-collector-tcp deployment via logCollector.tcpCollector.enabled in the Helm values. It runs the same log-collector binary with only the flowgger input enabled (OTEL disabled) and a TCP-mode flowgger input:
logCollector:
tcpCollector:
enabled: true
listen: "0.0.0.0:514" # TCP
format: "auto" # RFC3164, RFC5424, or ClearPass standard
framing: "line"
TCP syslog is line-framed by default and publishes to the same NATS events
stream and logs.syslog subject as the UDP collector, so the downstream core-elx
pipeline is identical. Use TCP when devices need reliable delivery; UDP remains
the default for lightweight, fire-and-forget exporters.
Example Kubernetes Gateway API values:
gatewayApi:
enabled: true
mode: attach
syslog:
enabled: true
parentRefs:
- group: gateway.networking.k8s.io
kind: Gateway
name: serviceradar-shared-gateway
namespace: serviceradar-system
sectionName: syslog-udp
Network devices should send syslog to <SYSLOG_GATEWAY_ADDRESS>:514/UDP. Keep the actual address in private operations material. NetFlow and sFlow stay on the flow collector address; see Kubernetes External Ingestion.
Configure Devices
- Prefer TCP or TLS transports where supported (see TCP Syslog). The log-collector's flowgger input supports
udp,tcp, andtls; it does not support RELP. When restricted to UDP, enforce ACLs and use an out-of-band management network. - Normalize time zones to UTC to keep SRQL queries aligned with SNMP and OTEL data.
- Leverage structured data fields (RFC 5424) for network appliances that support it; ServiceRadar stores them as JSON for easier filtering.
Accepted Formats
The default collector input format is auto. It tries RFC 5424, RFC 3164, and
the ClearPass standard header format for each message. ClearPass standard
messages use a full year and comma-separated milliseconds, for example
2026-07-15 14:24:44,270 10.84.180.34 CPPM_Session_Detail ....
CEF, LEEF, and other opaque payloads are accepted and retained as the log body
even when ServiceRadar does not yet extract their vendor-specific fields. A
message that does not match a known header is still published with its raw
body, receive timestamp, and fallback metadata so ingestion does not silently
drop it. Explicit rfc3164 or rfc5424 modes remain strict and are useful
when a sender is known to emit only one format.
For ClearPass and RADIUS integrations, select RFC 5424 when available. The ClearPass standard format is also supported when that is the format required by the deployment.
Source IP Preservation
For network transports, source_ip is the address observed by the collector.
The log detail view displays it as Source IP, SRQL can filter it with
source_ip:"10.208.254.4", and the original Flowgger _remote_addr value is
also retained in the log attributes for troubleshooting. If a Kubernetes
load balancer or Gateway performs source NAT, the observed value may be the
load balancer or Gateway address rather than the device address. Preserve the
source address at the load balancer and Gateway layer when device-level
attribution is required.
Event Pipeline
serviceradar-log-collectoraccepts syslog over UDP 514 (or TCP 514 via the optionalserviceradar-log-collector-tcpdeployment) and publishes each message to the NATS JetStream stream namedeventson thelogs.syslogsubject.- JetStream retains the raw envelope while
serviceradar_coreconsumes the same stream, evaluates the bundled Zen rules through a Rustler NIF, and persists the normalized log record. - Because the raw subject remains in the
eventsstream, you can replay ingestion after adjusting code or bundled rules.
Zen Rules
The default decision group for syslog chains two GoRules/zen flows that focus on Ubiquiti-style events:
strip_full_messageremoves the duplicatedfull_messagefield that UniFi devices emit so only the structured payload remains.cef_severityinspects the CEF header segment and maps the embedded numeric severity into the ServiceRadar priority scale (Low,Medium,High,Very High, orUnknown).
You can inspect the bundled JSON definitions under
elixir/serviceradar_core/priv/zen/rules/. See the
Rule Builder guide for the UI used to manage rule
templates.
Managing Rules
- Use Settings -> Events to manage rule templates for syslog.
- In normal operation, rule distribution is handled by the control plane. You should not need to write NATS keys by hand.
Parsing and Routing
- Core-elx now owns normalization before data lands in CNPG. Update the bundled rule files and redeploy core-elx to change default normalization behavior.
- Route noisy facilities (e.g.,
local7.debug) to lower retention tiers by adjusting ingestion mappings or by downsampling in CNPG (see the CNPG monitoring guide for helper queries). - Convert critical events into alerts through the Core API; use the Rule Builder UI to promote and route events (see Rule Builder).
Verification Checklist
-
If running in Kubernetes, confirm throughput via
kubectl logs deploy/serviceradar-log-collector -n <namespace> --since=10m. -
If using Gateway API, confirm the route is accepted with
kubectl describe udproute -n <namespace> serviceradar-syslog. -
Syslog logs land in the
logshypertable (CNPG/Timescale). Filter onsource = 'syslog', for example:SELECT timestamp, bodyFROM logsWHERE source = 'syslog'ORDER BY timestamp DESCLIMIT 20; -
Verify the collector-observed address with
SELECT timestamp, source_ip, body FROM logs WHERE source = 'syslog' ORDER BY timestamp DESC LIMIT 20;. -
Cross-link syslog and SNMP data in dashboards to highlight correlation during incidents.