Sending EdgeGuard's events somewhere else: a SIEM, Elasticsearch, Splunk, a syslog collector, or an HTTP endpoint of your own.
A log connector is a destination. EdgeGuard keeps every security event and every administrative action in its own database and shows them in Security Events and Audit Log; a connector copies them, as they arrive, to the system your organisation already watches.
Nothing is moved. A connector never removes anything from EdgeGuard, and turning one off changes nothing except that shipping stops.
The console answers questions about EdgeGuard. A SIEM answers questions across everything: this address was refused at the WAF — did it also authenticate anywhere, touch a file share, appear in a VPN log? That correlation is the whole reason the destination exists, and it is why events are shipped with their identifiers intact (the ray ID, the site, the agent node) rather than as prose.
Two other reasons come up in practice:
Security events always: one JSON object per event, with id, ray_id, timestamp, tenant_id and tenant_name, node_id, client_ip, country, method, uri, action, rule_name, score, user_agent and the details object the event carries.
Audit entries optionally, when Ship audit logs is on: actor, action, resource_type, resource_id, ip_address, user_agent and details — who changed what in the console.
The two travel separately, on separate cursors, so a destination that rejects one does not lose the other.

Each row carries the destination, its scope, whether audit entries are included, how many events it has shipped, its status and the last error if there is one.
Page actions: Add Connector · Test a connector · Backfill a period · enable, disable or delete one.
Click Add Connector.

Production Syslog, Splunk HEC.| Type | Where it sends | What it needs |
|---|---|---|
| Syslog / SIEM (CEF) | a TCP or UDP socket | host, port (514), protocol, facility |
| Elasticsearch / ELK | the _bulk endpoint |
endpoint URL, index, and either an API key or a username and password |
| Splunk HEC | the HTTP Event Collector | endpoint URL, HEC token, and optionally index, source, sourcetype |
| Webhook | any HTTP endpoint | URL, method, headers, bearer token or basic auth |
| Custom | the same as Webhook | as above |
Syslog and SIEM ship CEF, not JSON. One line per event, RFC 3164 framing, with the anomaly score as the CEF severity:
<14>2026-09-26T00:12:44Z edgeguard CEF:0|Artica|EdgeGuard|1.0|sqli|block|9|src=203.0.113.4 request=/login act=block
An audit entry maps idiomatically rather than being forced into the event fields — suser is the actor, cs1 is the resource:
<14>2026-09-26T00:13:02Z edgeguard CEF:0|Artica|EdgeGuard|1.0|audit:firewall_rule|update firewall_rule|3|suser=ana@example.com src=10.0.0.9 act=update cs1Label=resource cs1=firewall_rule:42
Elasticsearch gets two indices, not one. The index you configure gains a suffix: edgeguard-security_events and edgeguard-audit_logs. The two documents have nothing in common, and sharing an index would make Elasticsearch's own mapping reject one of them.
Splunk and the webhook types receive the JSON array — up to 100 events per request.
id if that matters to you.1. Test the connection. Test on the row sends one synthetic event — uri /test-connectivity, rule_name test-connectivity, client IP 0.0.0.0. It travels the real path to the real destination, so a failure here is a genuine failure, and the error it returns is the far end's own words.
2. Watch it with no destination software at all. For syslog, before pointing it at the SIEM:
# On the collector host — prints whatever arrives
nc -u -l 514
# or for TCP
nc -l 514
3. Look at the row. After one interval: Status connected, Events shipped climbing, Last error empty. A connector that stays at zero with no error is shipping nothing because nothing matched — check the scope.
4. Prove it end to end with real traffic. Make a request that will certainly be refused, then look for it at the destination by its ray ID:
curl -s -o /dev/null -w '%{http_code}\n' "https://site.example.com/?id=1' OR '1'='1"
The block page carries an EdgeGuard ID. That is the ray_id field; searching for it in Splunk or Kibana is the shortest proof that the whole chain works.
5. Fill in the past. Backfill ships a date range that predates the connector, 100 events a second. Progress is reported while it runs; it is not resumed if central restarts, so a large range is best done in a few smaller ones.
| What you see | What it usually is |
|---|---|
| Status error, "connection refused" | nothing listening, or a firewall between central and the collector. Test with nc from the central host. |
| Status connected, count not moving | no events match the scope. A site-scoped connector on a quiet site is the common case. |
| ELK accepts everything, Kibana shows nothing | the index pattern. Look for <your index>-security_events, not <your index>. |
| Splunk returns HTTP 403 | the HEC token, or HEC not enabled on that port. |
| Audit entries never arrive | Ship audit logs is off, or the connector is scoped to one site, where they are not available. |
| Events arrive twice | expected after a failure — delivery is at least once. Deduplicate on id. |
| A TLS error against your own collector | Skip TLS verification exists for a self-signed collector. Prefer trusting the CA. |
A customer's own feed. Add a webhook connector, scope it to that customer's site, point it at their endpoint with a bearer token. They receive their events and nothing else — not other sites', not the audit trail.
PCI retention without a SIEM. An Elasticsearch connector with a one-year ILM policy on the index, EdgeGuard's own retention left at 90 days. The console stays fast and the evidence lives as long as the standard requires.
Alert on a single rule. Ship everything to the SIEM and alert there, rather than trying to express the condition here. A connector has no filter beyond its scope: it is a pipe, deliberately, and the destination is where the questions are asked.