Events
The Events interface provides visibility into events across your Santa-protected fleet. This feature lets administrators track, analyze, and respond to what Santa saw and decided throughout your organization.
Events vs. telemetry
Workshop collects endpoint data in two separate streams, and they are easy to mix up. The short version: events tell you what to allow, telemetry tells you what happened.
Events
An event is something Santa decided and thought you should know about. Executions are only part of it. The Events section has a tab for each kind:
| Tab | What it holds | Rules it informs |
|---|---|---|
| Execution | Binary execution attempts and the allow or block decision | Execution Rules |
| File Access | Reads and writes against paths you have chosen to watch | File Access Rules |
| Network | Network flows seen by Santa’s network extension | Network Rules |
| Removable Media | USB and SD card mounts | Removable media settings |
| Network Mount | SMB, NFS and other network volume mounts | Network mount settings |
| Signals | Reports from your own CEL detection rules | Signal definitions |
Whatever the kind, the shape is the same. An event is a small record built around the identifiers you need to write or change a rule: CDHash, binary SHA-256, Signing ID, Team ID, certificate, path, remote peer. Workshop stores them and you search them from this console. Rules, Approval Workflows and the Risk Engine all run off them. Event Export pushes them into a bucket of your own.
Execution events arrive out of the box. The rest appear only after you set up a policy that watches for them. An empty File Access or Network tab means nothing is configured, not that nothing is happening.
Signals are the odd one out. A signal is a CEL detection rule that runs on the host against telemetry. A match produces a signal report, and the report lands here in Events. Signals need telemetry enabled, so they are the one place where the two streams meet.
Telemetry
Telemetry is the raw record of what the machine did, with no policy applied. It covers forks and exits, every file write and rename, logins, SSH sessions, TCC changes, disk mounts, launch items and network activity. Executions are in there too, whether or not Santa had an opinion about them.
Each record holds more than an event does: the full argument vector, environment variables, entitlements, the parent process chain, the whole certificate chain. Telemetry lands in your own cloud storage bucket and you query it with SQL. Use it when something has already happened and you need to reconstruct it.
How often Santa uploads an event
Santa doesn’t upload an event for every execution. There would be far too many, so it drops repeats on the host. The throttling changes what the numbers in this console mean.
Blocks are never throttled. When Santa stops an execution, it sends the event straight away instead of waiting for the next sync. Blocked file access events work the same way.
Allowed executions are filtered twice.
First, most of them never become an event.
By default Santa records an allowed execution only when the binary was unknown, which is what happens in Monitor mode, or when an audit rule matched.
An execution that matched a rule you already wrote records nothing. You already know about it.
Set EnableAllEventUpload if you want every allow recorded.
Second, whatever is left is throttled to one event per binary per host every 4 hours. Santa keeps an in-memory cache keyed on the binary’s SHA-256. A repeat inside that window is dropped, not queued. A tool that runs a thousand times a day produces at most six events on that host. Restarting the Santa daemon clears the cache.
Allowed events don’t go up straight away either. They wait in the host’s event table for the next sync, which runs every 10 minutes by default.
Other event types have their own windows:
| Event | How often it can be uploaded |
|---|---|
| Execution, blocked | Every time, sent straight away |
| Execution, allowed | Once per binary SHA-256 per host per 4 hours, and only for unknown binaries unless EnableAllEventUpload is set |
| File access, denied | Every time |
| File access, audit-only allow | Once per rule and process SHA-256 per host per 4 hours, whichever path was touched |
| Network flow | Once per process and rule per host per 10 minutes, allowed or denied |
| Removable media and network mounts | Once per mount per host per 10 minutes |
| Signals | Once per signal name per host per 10 minutes |
:::warning Event counts are not execution counts
Counting rows in the events table won’t tell you how often a binary ran. Use telemetry, the aggregate counts in Reports, or the binary’s own execution history.
:::
Apple platform binaries produce no individual events unless you ask for them. They are the highest-volume decision, so Workshop keeps aggregate counts only. Those counts show up in reports, dashboard charts and a binary’s execution history. See Platform binaries to store each one instead.
Telemetry has none of these windows. Every occurrence of every event is recorded. The only thing that removes records is you. Filter Expressions drop or redact events on the host before upload, so if you configure any, your bucket holds what survived them.
Which one to use
| Events | Telemetry | |
|---|---|---|
| Answers | Should this be allowed? | What happened here? |
| Covers | Executions, file access, network flows, mounts, signal reports | Everything Santa can see |
| Completeness | Every block, allowed executions at most once per 4 hours | Everything, no throttling, minus anything your Filter Expressions drop |
| Detail per record | Enough to write a rule | Process, signing, file and network detail |
| Lives in | Workshop | Your own cloud storage bucket |
| Query it with | The events tables and filter expressions | SQL, see Telemetry |
| Availability | Executions always on, the rest follow your policy | Off by default, ask support to turn it on |
| Good for | Writing rules, approvals, triaging blocks | Incident response, threat hunting, audits |
Most work uses both. A block shows up in Events, you look at the binary, you write a rule. Later you want to know what else that process touched, or which other hosts saw it. That’s telemetry.
To cut telemetry volume before it leaves the host, see Filter Expressions.
Execution events
The execution events table displays information about each execution event:
- Host Name: The name of the endpoint where the event occurred
- File Name: The name of the executed binary
- Decision: Whether the execution was allowed or blocked
- Reason: The reason for the decision
- Timestamp: When the execution attempt occurred
Platform binaries
Executions that Santa allowed because the binary ships with the operating system are the highest-volume decision by a wide margin. By default Workshop records only their aggregate counts and does not retain or export the individual events.
To store each one instead, enable Platform binary events in the Sync section of a tag’s settings. The setting is per tag, so you can turn it on for a subset of your fleet. Expect a large increase in stored events: turn it on when you need platform binary executions to be searchable, filterable and exportable, and scope it to the hosts that need it.
Once stored, the events appear in the execution events table with a Reason of Platform. Filter the table by that reason to see them on their own.
The aggregate counts are recorded either way, so turning the setting on or off never changes the numbers in reports or charts. It only changes whether the individual events are kept.
A change can take up to 5 minutes to take effect on each host, because Workshop caches the resolved setting per host while it processes a host’s uploads.
Event details
Click a file name in the events table to open a detailed view with additional information about the binary:
- SHA-256: The cryptographic hash of the binary
- CDHash: The code directory hash used by macOS for code signing verification
- Team ID: The Apple Developer Team ID associated with the binary
- Signing ID: The signing identity used to sign the binary
- Entitlements: A list of entitlements granted to the binary
- First Seen: When this binary was first observed in your environment
Creating rules from event details
From the event details page, you can create execution rules directly using the Create Rule dropdown. The dropdown lets you pick which identifier type to use (CDHash, Binary SHA-256, Signing ID, Certificate SHA-256, or Team ID) based on the event’s binary.