Audit
The Audit view provides comprehensive monitoring and tracking capabilities for all user activities within the DataStream platform. It enables administrators to monitor user actions, track system changes, and maintain detailed logs for compliance, security analysis, and operational oversight.
Overview
To access the Audit view
- Go to the Home > Organization pane
- Click
Audit
-or-
- Click the hamburger menu on the top left
- Select Organization > Audit
The view displays a chronological record of all system activities with the following essential components:
- Audit table: Comprehensive log display with User, User IP, User ID, Object type, Object, Action, Action Description, and Date columns
- Filter: Advanced filtering options to narrow down audit records by various criteria
- Search bar: Search field with the placeholder Search users or actions
- Pagination controls: Navigate through historical audit records with configurable items per page
- Export: Download the filtered trail as CSV or JSON. See Exporting the Audit Log
Reset button: Reload the audit log display with the latest activities
Audit Log Columns
The audit table provides detailed information for each recorded activity:
User Information
- User: Email address of the user who performed the action. A row the platform wrote itself, not a user, shows System here and has no user to open. Today that is a director-reported update, a director's lifecycle record and a rule action's notification.
- User IP: Source IP address from which the action was initiated
- User ID: Internal identifier assigned to the user account
Action Details
-
Object type: Category of the system component affected (User, Pipeline, Device, Director, AdvancedRoute, AlertRule)
-
Object: Specific target of the action (user email, content name, pipeline identifier)
-
Action: Type of operation performed (UserCreated, UserDeleted, UserUpdated, LoginSuccess, LoginFailed, TemplateInstalled, PipelineCreated, PermissionDenied, SensitiveDataPolicyUpdated).
This is a clickable link, the pop-up displays further details of the tracked activity.
Actions on an object are named
<Object><PastTense>—UserCreated,DirectorDeleted,RoleUpdated. Names that used to follow the older verb-first form, such asCreateUser,DeletedDirectororInstalledContentHub, now appear under their new spelling on every row, including rows recorded before the change. Event names that never described an object, such asLoginSuccess,LoginFailedandPermissionDenied, are unchanged. The Action filter still accepts an old name, so a bookmarked filter or a/api/v1/audit?action=DeleteDeviceclient keeps returning the same rows asDeviceDeleted. The names returned in the table, the export and theactionfield of the REST API are always the new ones, so anything that matches on action values downstream — a SIEM rule over exported rows, a script reading/api/v1/audit— has to use the new spellings. A Content Hub install used to be filed under object typeContentHub, the feature it was started from rather than what it created; it is now filed under the type of object it created —Pipelinefor an installed pack or an installed child pipeline,AdvancedRoutefor an installed route — including rows recorded before the change. An operator who filters Object type = ContentHub to find pack installs will no longer find them there; look under Pipeline (or AdvancedRoute for a route install) instead.Data access. Starting a capture is recorded: a live data, console log, replay discovery or BACnet discovery capture, and a profiler capture. The row is filed under the object that was read, so it also appears in that object's activity log. Actions are
<Object>LiveDataCaptureStarted(Director, Cluster, Device, Target, AdvancedRoute),<Object>ConsoleLogCaptureStarted(Director, Cluster, Device, Target),DeviceReplayDiscoveryStarted,DeviceBacnetDiscoveryStarted, andDirectorProfilerCaptureStarted/DeviceProfilerCaptureStarted. An agent is filed as a Device.Each capture also writes one row when it ends, under the same object:
<Object>LiveDataCaptureEnded,<Object>ConsoleLogCaptureEnded,DeviceReplayDiscoveryEndedorDeviceBacnetDiscoveryEnded. Its outcome says how it ended:completed,stopped(from the console),restarted(another capture was started in its place),disconnected(the console closed first) ortimed_out(a director it reached never reported back). The pop-up shows the capture id, which pairs the row with its start row, the lines the console received, the duration in milliseconds, how many of the director connections it reached reported back and, for a device, its type. A capture that was refused or reached no director writes neither row.The start row's pop-up shows the capture's settings: duration, line count, pipeline stage, severity filter and search text. It also shows the screen the capture was started from (
detail,pipeline-editor,replay-runs,bacnet-objectsorsmart-engine) and, for a device, its type. Rows are written per capture, not per page visit. Searches on the Search page are not recorded as captures.Director lifecycle. A director reports why it last stopped and whether it came back. Each report is filed under object type
Director, against the director that sent it, with System as its user and the director's name as its Object, so it also appears on that director's Activity Logs tab. There are four actions:Action When it is written DirectorLifecycleRequestedThe director accepted a reload or restart and is shutting down for it. Rarely seen: the director writes it just before it goes down and usually cannot send it in time. DirectorLifecycleCompletedThe director is back after a reload or restart the platform asked for, or after a restart to apply an update. DirectorCrashRecoveredThe director started after a crash. It knows it crashed because it found the lock file its previous process left behind. DirectorStartedUnexpectedlyThe director started without a request and with no evidence of a crash, for example after a host reboot, a service manager restart, an OOM kill or a recreated container. The Action Description says what happened, for example
Director restart completed; back after 12s,Director started after a crashorDirector started without a request (host reboot, service restart or OOM kill).Director reload refused: <reason>means the director refused the reload and was never down.The pop-up shows the record's metadata:
reason—reload_requested,restart_requested,update_applied,crash_recoveredorunknownstate—requestedorcompletedrequestId— the platform's reload or restart request, for one the platform asked fordetail,generationandtimestampdowntimeSeconds— the time from the request to the director being back. It is counted from when the request was made, not from when the service actually stopped.
A reload or restart started from the console also writes a
DirectorReloadedorDirectorRestartedrow under the user who started it. That row and the director'sDirectorLifecycleCompletedrow carry the samerequestId, which pairs the request with the director's return. ADirectorReloadedorDirectorRestartedrow with noDirectorLifecycleCompletedrow for itsrequestIdis a director that never came back. Do not rely onDirectorLifecycleRequestedfor this: it rarely arrives, so its absence proves nothing.The rows worth investigating are
DirectorStartedUnexpectedlyandDirectorCrashRecovered: a restart someone asked for already has its reason. Agents do not report lifecycle records.PowerShell and Cloud Shell. Sign-ins from the PowerShell module and Cloud Shell are filed under object type
CliSession, with four actions:CliSignInApproved— a user approved a device code sign-in or authorized a browser sign-inCliSignInDenied— a user denied a device code sign-inCliSessionCreated— a session was created: by a device code, an authorization code, a tenant switch, or opening Cloud ShellCliSessionRevoked— a session was ended early, with the reason
A token refresh writes no row. Every command run in Cloud Shell writes a
CliCommandExecutedrow, grouped with the rest of its session, with the command line and its outcome: completed, failed, refused, invalid or cancelled. Secret values in the command line are masked as***, and the pop-up shows the command. A change made from PowerShell or Cloud Shell is recorded as the same change made in the web interface would be, under the user's email, with the client (powershellorcloudshell) in its details.Rule action notifications. The outcome of every notification a rule action was due to send is filed under object type
AlertRule, against the rule, once its outcome is final, with System as its user and one of three actions:RuleActionNotificationDelivered— every recipient was reachedRuleActionNotificationFailed— at least one recipient was not reached; a partial delivery counts as failed, and the description says how many were missedRuleActionNotificationNotSent— no recipient was tried, because a quota stopped it, or the action was detached, deleted or disabled before its notification went out
The pop-up shows the reason, error code, attempts, recipients and provider reference. The same rows appear on the rule's Activity Logs tab.
-
Action Description: Human-readable explanation of what occurred
-
Date: Precise timestamp of when the action took place
Search Functionality
Use the search feature to quickly locate specific audit records. The search functionality provides:
- Real-time filtering: Search results update as you type
- Multi-field search: Searches across usernames, actions, and descriptions
- Clear search: Use the
X button to quickly clear the search criteria - Case-insensitive matching: Finds results regardless of letter case
Searching for specific user accounts filters the audit log to show only activities related to that user, making it easy to track individual user behaviors and actions.
Search matches the action name as it was recorded, so a search for an old spelling such as DeleteDevice is not a reliable way to find every deletion. To find every row of one action, whichever name it was recorded under, use the Action filter instead — it matches both spellings.
Advanced Filtering
Apply sophisticated filters to analyze specific aspects of system activity with multiple filter criteria:
Exporting the Audit Log
The
Export needs the AUDIT_EXPORT permission, which is not the one that grants access to the view. AUDIT_READ lets an account page through the trail; taking a bulk copy of it is a separate, narrower grant carried only by the AUDIT_MANAGER permission set, and by none of the four built-in roles. An account that can read the audit log therefore cannot necessarily export it.
Applied Filters Display
The active filters are shown as removable tags:
- User: Filter by specific user account — selected in the filter form via the
Select user field. Optional; leaving it unset returns every account - From/To dates: The audit period. Both are always set — the form opens with a rolling seven-day range — so the filter is never date-less. The
To picker stays disabled until aFrom date is chosen - Object type: Filter by object category
- Object: Filter by specific object target
- Action: Filter by action type. The dropdown lists each action once, under its current name; an old name typed into the filter or carried in a bookmarked URL is still accepted and returns the same rows
Filter Management
Modify button: Edit existing filter criteriaClear all button: Remove all applied filters to return to full audit view- Filter persistence: Applied filters remain active until manually removed
Filter Results
When filters are applied, you can see focused results such as:
- User login sessions from different IP addresses
- Failed login attempts for security monitoring
- Successful authentication events with timestamps
The filtered view displays the narrowed results from the full audit log.