Start a workflow automatically when a syslog message arrives — the built-in UDP/TCP syslog listener, retention, how devices are pointed at Versus, how a rule matches on severity, device group, and regex, and exactly what the launched run receives.
Versus can receive syslog directly from your devices and start a workflow the moment a message matches a rule — a disk-space warning launches a cleanup diagnostic, a failover message opens an incident, a certificate error kicks off a renewal check. Rules are the syslog counterpart of a cron schedule: instead of firing on when, they fire on what the device just said.
It lives under Workflows → Syslog Alert Rules (/syslog-alert-rules) and requires administrator access. The listener itself is switched on under Versus Platform → System → Settings → Syslog.
Versus runs its own syslog receiver inside the backend — no separate collector or relay is required.
| Setting (Settings → Syslog) | Meaning | Default |
|---|---|---|
| Enable syslog listener | Starts the UDP and TCP listeners. Takes effect after the next backend restart, not live. | off |
| Syslog Target Host | The address devices should be told to send syslog to — must be reachable from the devices. Required before "Configure as syslog target" works. | — |
| UDP Port | Standard syslog. Use where the server has inbound UDP reachability (most on-prem installs). | 514 |
| TCP Port | For F5 High-Speed Logging (HSL) delivery, or hosting platforms that can only proxy TCP. | 1514 |
| Log retention (days) | Entries older than this are purged automatically; 0 keeps them indefinitely. | 30 |
Both listeners bind on all interfaces and set SO_REUSEPORT on Linux so every gunicorn worker can share the port. Settings are read once when the process starts.
Where it runs. The listener is an in-process background thread of any serving process (gunicorn, runserver, manage.py run_worker), never of a one-off management command. ENABLE_INPROC_SCHEDULERS=1 forces it on (the dedicated worker), DISABLE_INPROC_SCHEDULERS=1 forces it off (stateless web replicas), and PROCESS_ROLE=gateway disables it on a collector gateway — so on Kubernetes it lives on the single worker behind its own UDP 514 / TCP 1514 Service; see High Availability, DR, and Kubernetes.
HTTP push. A relay or shipper that can't reach the ports can POST lines to /api/syslog-ingest/ as {"lines": [...]} with an X-Versus-Token header matching the backend's SYSLOG_INGEST_TOKEN setting. Lines arriving this way are parsed, stored, and rule-matched identically.
For an F5 BIG-IP, Versus configures the device for you. The Syslog card on the device's Base Settings tab shows whether Versus is already a remote syslog server on that box and offers Configure as syslog target, which adds a remote server named versus (UDP, using the Syslog Target Host and UDP Port from Settings) through the standard sys syslog remote-servers configuration; Remove takes it out again. The Add Device wizard has the same step as an on-by-default checkbox for F5 devices, applied best-effort so a missing target host never blocks onboarding.
For any other vendor, point its remote-syslog configuration at the Syslog Target Host and port by hand.
Each line has its <PRI> header stripped and mapped to an RFC 3164 severity. Lines in F5's text format — Mon DD HH:MM:SS host severity process[pid]: message — also yield hostname, process, and message, with severity words normalised (err → error, warn → warning, emerg → emergency). Anything that fits neither shape is still stored as info with the raw text, so nothing silently disappears.
The hostname is matched against your inventory — exact hostname first, then a short-name match — to attach the entry to a Device. Browse stored entries on a device's Log tab (latest 500, auto-refreshing every 10 seconds) or query /api/syslog/ with device, hostname, search, and limit filters. An hourly job purges entries older than the retention window.
Click Add Rule. A rule has these fields:
| Field | Behaviour |
|---|---|
| Name | Required. |
| Workflow to trigger | Required — any workflow definition. |
| Minimum severity | debug, info, notice, warning, error, critical, alert, emergency. Matches this severity or anything more severe. Default warning. |
| Device group | Optional. Only entries from devices in this group match; an entry whose hostname didn't resolve to a device never matches a group-scoped rule. Blank = any device. |
| Message pattern | Optional regex, tested case-insensitively against the message body (a search, so it can match anywhere in the line). Blank = match on severity alone. An invalid regex is logged and the rule never fires. |
| Cooldown (seconds) | Minimum time between triggers, so a flapping condition doesn't spawn a run per log line. Default 300. |
| Description | Free-text notes. |
| Enabled | Toggle from the list without opening the rule. |
Through the API a rule also carries a context_template — a JSON object merged into every run it launches. The list shows each rule's threshold, group, target workflow, pattern, cooldown, and when it last fired.
Every stored line is checked against every enabled rule, in name order — severity → device group → pattern → cooldown — and every rule that passes fires; there is no first-match stop. A firing rule:
[Syslog] <rule> — <hostname> — <time>, attributed to syslog-rule:<id> and scoped to the rule's device group (or the device's own group).device_id, hostname, message, severity, facility, syslog_entry_id — on top of the rule's context_template, so a Python Script step can read exactly which device said what.Launching a workflow is the only action. Notifications, Desk incidents, ServiceNow records, or remediation all come from the workflow you point the rule at — build it in the Workflow Builder. Rule evaluation is isolated from ingestion: a broken rule or failing workflow is logged and never stops messages from being stored.
Rules only evaluate against syslog messages that actually reach Versus. Enable the listener, set the Syslog Target Host, and configure devices to send logs here first — the page reminds you of this at the bottom.
Syslog Alert Rules react to log lines from devices; Observe alert rules evaluate metrics from a datasource and route to contact points. Use a metric threshold for "CPU above 90% for five minutes" and a syslog rule for "the device just logged that tmm restarted".
| Item | Detail |
|---|---|
| Page | Workflows → Syslog Alert Rules, administrator only |
| Listener | UDP 514 + TCP 1514 (configurable); enable in Settings → Syslog; restart to apply |
| Retention | Log retention (days), default 30, purged hourly; 0 = keep forever |
| Match order | severity ≥ threshold → device group → regex (case-insensitive) → cooldown |
| Action | Start the bound workflow with the event in its context |
| F5 auto-config | Base Settings → Syslog → Configure as syslog target (needs Syslog Target Host) |