Forwarding Raw Audit Events from the ECA
Introduction
This is a different mechanism from alarm forwarding: that page forwards Eyeglass alarms (operational events, alarm codes). This page forwards the raw PowerScale audit event stream the ECA ingests for Data Auditing — the same underlying events queried through Data Auditing — to an external system for long-term retention or SIEM ingestion, independent of the audit database itself.
The ECA runs an optional Docker container, syslogpublisher, that consumes this event stream and can be configured to deliver it two ways:
- To an external syslog server over UDP, for direct SIEM ingestion.
- To an S3 bucket, by writing events to a rolling log file on an NFS mount, then archiving that file to S3 using Data Orchestration.
Both use the same syslogpublisher container and configuration file, just with a different output appender.
Forwarding to an External Syslog Server
-
SSH to each ECA node that should forward events, as
ecaadmin. Each node forwards independently, so repeat this on every node you want to enable (a common pattern is all nodes except node 1). -
Edit the syslog appender configuration:
vim /opt/superna/eca/conf/syslogpublisher/log4j2.xmlSet the syslog server's IP address and UDP port (default syslog port is
514; the file ships with a placeholder port of5140— change it to match your syslog server). -
Enable the container to start on the desired nodes by adding it to the Docker Compose overrides file:
vim /opt/superna/eca/docker-compose.overrides.ymlAdd a
syslogpublisherservice entry witheca.cluster.launch.all: onunder its labels, matching the indentation of existing entries. -
Push the configuration to all nodes:
ecactl cluster push-config -
Start the container on the nodes that should forward:
ecactl cluster exec "ecactl containers up -d syslogpublisher"noteThis starts the container on every node, including node 1. If node 1 should not forward, stop and remove it there specifically:
ecactl containers stop syslogpublisher
ecactl containers rm syslogpublisher -
Monitor forwarding activity from any node running the container:
ecactl logs --tail 200 --follow syslogpublisherThis reports the rate of events received and sent, updated roughly every minute.
Example Forwarded Event
2019-07-07T20:59:40.816Z syslogpublisher.node1.demoeca.eca.local ECA 1 AuditLogs - {"eventCode":"0x40","path":"\\\\<cluster-guid>\\System\\ifs\\data\\policy1\\search\\cow.txt","protocol":"SMB2","server":"node001","clientIP":"..."}
Filtering Before Forwarding
To forward only a subset of events (for example, a specific path), add a RegexFilter to the Syslog appender in log4j2.xml:
<Syslog name="SupernaSyslog" format="RFC5424" facility="LOCAL0"
host="<syslog-server-ip>" port="514" protocol="UDP" appName="ECA"
messageId="AuditLogs" id="Event" connectTimeoutMillis="10000"
newLine="true" mdcId="mdc" includeMDC="true" enterpriseNumber="18060">
<RegexFilter regex=".*ifs.*data.*smb01.*test123.*" useRawMsg="true" onMatch="ACCEPT" onMismatch="DENY"/>
</Syslog>
To exclude a path instead of matching one (for example, excluding internal /ifs/.ifsvar housekeeping events), use a negative-lookahead pattern:
<RegexFilter regex="^((?!.*ifsvar.*).)*$" useRawMsg="true" onMatch="ACCEPT" onMismatch="DENY"/>
Path is the most common filter field, but the same RegexFilter approach works against any field present in the raw event JSON (user SID, event code, and so on) — review the example event above to build a pattern for other fields.
After any change to log4j2.xml, push the configuration and restart the container on all nodes:
ecactl cluster push-config
ecactl cluster services restart --container syslogpublisher --all
Troubleshooting
If your syslog server isn't receiving messages, first confirm firewall access and the configured port, then:
-
Use the monitoring command above to confirm which ECA node(s) are actively forwarding.
-
On that node, capture UDP traffic directly:
sudo -s
zypper in tcpdump
tcpdump -i eth0 udp port 514A successful send appears as an outbound
SYSLOGpacket to your configured destination host.
Archiving to an S3 Bucket via Data Orchestration
For long-term, low-cost retention (for example, to meet HIPAA, PCI, or FedRAMP audit-log retention requirements), route the same event stream to an NFS-mounted rolling log file instead of a syslog server, then use Data Orchestration to archive that file to S3.
This requires a Data Security license with Data Auditing, and a Data Orchestration license — the Dropbox archiving feature specifically requires the Pipeline license key.
1. Create the NFS Export on PowerScale
SSH to the PowerScale cluster as root and create an export in the System Access Zone, with every ECA node IP as both client and root client:
mkdir -p /ifs/syslogpublisher
isi nfs exports create /ifs/syslogpublisher --zone system \
--root-clients="<ECA_IP_1>,<ECA_IP_2>,...,<ECA_IP_N>" \
--clients="<ECA_IP_1>,<ECA_IP_2>,...,<ECA_IP_N>" \
--description "ECA Syslog Publisher Logs"
2. Mount the Export on the ECA Cluster
-
SSH to ECA node 1 as
ecaadminand create the local mount point on all nodes:ecactl cluster exec "mkdir -p /opt/superna/eca/logs/syslogpublisher" -
Add an entry to the ECA's automount configuration, using a SmartConnect name for an IP pool in the System Access Zone (NFSv3 or NFSv4 both work):
echo -e "\n/opt/superna/eca/logs/syslogpublisher --fstype=nfs,nfsvers=4,soft <FQDN>:/ifs/syslogpublisher" >> /opt/superna/eca/data/audit-nfs/auto.nfs -
Push the configuration and mount:
ecactl cluster push-config
ecactl cluster exec "sudo systemctl restart autofs"
ecactl cluster exec "sudo mount -a -t autofs"The
autofsentry is picked up automatically on subsequentecactl cluster upruns.
3. Configure syslogpublisher as a Rolling File Appender
-
On ECA node 1, back up the existing syslog-forwarding config (if configured) and create a new one:
ecactl cluster exec "mv /opt/superna/eca/conf/syslogpublisher/log4j2.xml /opt/superna/eca/conf/syslogpublisher/log4j2.xml.original"
touch /opt/superna/eca/conf/syslogpublisher/log4j2.xml
vim /opt/superna/eca/conf/syslogpublisher/log4j2.xml -
Configure a
RollingFileappender, adjusting the roll-over size to your requirement (100 MB shown):<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Properties>
<Property name="nodeID">${env:ECA_THIS_NODE_ID}</Property>
</Properties>
<Appenders>
<RollingFile name="RollingFile" fileName="logs/${nodeID}/app.log"
filePattern="logs/${nodeID}/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<Pattern>%m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="ALL">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>Rolled-over files are compressed and named by node and date, for example
logs/6/2025-10/app-10-02-2025-1.log.gzfor node 6. -
Enable the container on all nodes via the Docker Compose overrides file:
vim /opt/superna/eca/docker-compose.overrides.ymlversion: '2.4'
services:
syslogpublisher:
labels:
eca.cluster.launch.all: on -
Mount the config and log directories into the container by editing
docker-compose.yml'ssyslogpublisherservice, adding undervolumes:- "/opt/superna/eca/conf/syslogpublisher:/opt/superna/rda/conf:ro"
- "/opt/superna/eca/logs/syslogpublisher:/opt/superna/rda/logs:rw" -
Push the configuration:
ecactl cluster push-confignoteA
Permission deniedwarning on/opt/superna/eca/logs/syslogpublisherduring push-config is expected and does not affect functionality. To clear it:ecactl cluster exec "ecactl containers exec syslogpublisher chmod 755 logs" -
Start the container on all nodes:
ecactl cluster exec "ecactl containers up -d syslogpublisher" -
Confirm events are being written, for example on node 6:
/opt/superna/eca/logs/syslogpublisher/6/app.log.
4. Archive the NFS Export to S3 with Data Orchestration
Configure a Data Orchestration Dropbox folder definition pointed at the NFS export, so its contents are periodically moved to S3 (for example, with a DEEP_ARCHIVE storage tier for cost-optimized long-term retention):
searchctl archivedfolders add --isilon <source-name> --folder /ifs/syslogpublisher \
--accesskey <access-key> --secretkey <secret-key> \
--endpoint s3.<region>.amazonaws.com --region <region> \
--bucket <bucket-name> --cloudtype aws --delete-from-source \
--tier DEEP_ARCHIVE --type GC
Assign a daily schedule to this folder definition from the Data Orchestration GUI (for example, running at midnight), then test it on demand:
searchctl archivedfolders archive --id <folder-id> --follow
Once the job completes, /ifs/syslogpublisher should be empty — its contents have moved to the configured S3 bucket. See the Data Orchestration Configuration Guide for the full Dropbox/folder-definition workflow.
See Also
- Data Auditing — Query and analyze the same audit event stream directly from Eyeglass, rather than forwarding it externally.
- Disaster Recovery: Monitoring and Alerts — Forward Eyeglass alarms (a different event type) by syslog.
- Data Orchestration Configuration Guide — Full Dropbox/archived-folder configuration reference.