Audit Log

Audit logs are records of what happens inside your GoodData environment. These logs help you track who did what, when they did it, how they did it, and what they changed.

The audit log can support you in several critical areas:

  • Security and fraud prevention – Monitor unauthorized or suspicious activity.
  • Compliance and legal requirements – Meet GDPR, HIPAA, or SOC2 standards.
  • Troubleshooting and support – Quickly trace issues and understand changes that impact your setup.

Audit Log Scope and AI-Initiated Actions

The audit log records events that GoodData considers relevant for security investigations, data access, and changes to the solution. It is not intended to contain every individual interaction with the platform.

For example, searching for a dashboard or visualization through the user interface, API, or AI Assistant does not create an audit log entry unless the action also triggers one of the events listed in the Audit Events section.

AI Assistant does not grant users additional permissions. If the AI Assistant performs an action on behalf of a user and the same action is covered by the audit log when performed directly through the UI or API, GoodData records the same audit event. Depending on the action, additional metadata may distinguish whether the action was initiated through the AI Assistant, for example by including an agent identifier.

Diagnostic identifiers such as traceId or X-GDC-TRACE-ID are used for internal troubleshooting. They are not intended as stable end-to-end audit correlation identifiers.

Setting up Audit Logging

Audit log messages are built into the existing logging system and are automatically collected along with logs from all other services and components. No additional setup is required.

You can filter audit log messages by using the field type=audit to extract only audit-related entries from your logs.

Once filtered, you can refine your search further by using additional fields, such as:

  • eventName=XYZ – to find specific event types (as listed in the Audit Events section)
  • categoryUid=XYZ – to filter by Open Cybersecurity Schema Framework (OCSF) event category
  • classUid=XYZ – to filter by OCSF event class

Audit Log Entries

Each audit log entry is saved in JSON format and includes a set of mandatory fields, which are standardized and present in every log entry, regardless of the event type:

FieldDescription
eventNameStandard name of the event
categoryUidCategory based on OCSF (Open Cybersecurity Schema Framework)
classUidClass based on OCSF
descriptionA short, human-readable summary of the event
tsTime the event happened (timestamp), e.g. 2023-01-20T18:55:32.466Z
orgIdID of the organization
workspaceIdID of the workspace (if applicable)
userIdWho triggered the event (user ID, service, or token)
targetWhat was affected (e.g. dashboard, user, group)
sourceIP address where the event came from (127.0.0.1 is used for events initiated by internal components)
errorCodeIf something went wrong (e.g. Access Denied)
sessionContextTypeType of session: JWT, API Token, OIDC, or automation
sessionContextIdentifierToken or automation identifier
typeType of message. The default value is audit.

Audit entries may include additional JSON fields specific to that event type. These extra fields provide more context for that particular action and are not standardized across all events. These include:

FieldDescription
agentIdID of the AI agent. Present only if the action was performed by the AI Assistant on behalf of the user.
conversationIdID of the AI Assistant conversation. Present only if the action was performed by the AI Assistant on behalf of the user.

Example Audit Log Entry:

{
  "eventName": "user_login",
  "categoryUid": "3",
  "classUid": "3002",
  "description": "User XY logged in",
  "ts": "2023-01-20T18:55:32.466Z",
  "orgId": "org_abc123",
  "workspaceId": "workspace_xyz456",
  "userId": "user_XY",
  "target": "organization_setting_XY",
  "source": "1.2.3.4",
  "sessionContextType": "OIDC",
  "sessionContextIdentifier": "token_1234",
  "success": true,
  "type": "audit"
}

Audit Events

Below is a complete list of all audit log events, including their meanings, categories, and classes. The categories and classes follow the Open Cybersecurity Schema Framework (OCSF) where applicable.

EventMeaningCategoryClassAdditional Details
DATA_ACCESSUser accessed workspace data66005target = dashboard/visualization IDs
DATA_EXPORT_INITIATEUser started a data export66005exportFormat, exportId
DATA_EXPORT_RETRIEVEUser downloaded exported data66005exportId
EXECUTION_INITIATEAn AFM execution was initiated.66005—
EXECUTION_RETRIEVEThe results of an AFM execution were retrieved.66005—
CSV_DATA_UPLOADData uploaded via CSV66005target = datasourceId
USER_LOGINUser tried to log in33002Logs only failed logins for JWT/API; success only for OIDC
USER_LOGOUTUser logged out33002—
USER_CREATEA user was created33001Includes ID, email, userGroups
USER_UPDATEUser account updated33001List of changed attributes
USER_DELETEUser account deleted33001—
API_TOKEN_CREATEAn API token was created33002—
API_TOKEN_DELETEAn API token was deleted33002—
USER_DATA_FILTER_CREATEA user data filter was created33005MAQL expression + user/userGroup
USER_DATA_FILTER_UPDATEA user data filter was updated33005—
USER_DATA_FILTER_DELETEA user data filter was deleted33005—
USERGROUP_CREATEA user group was created33006—
USERGROUP_UPDATEA user group was updated33006—
USERGROUP_DELETEA user group was deleted33006—
USER_USERGROUP_ADDUser added to a group33006Includes user and group info
USER_USERGROUP_DELETEUser removed from a group33006—
PERMISSION_USER_ADDPermission added to user33005Includes permissionLevel and object
PERMISSION_USER_DELETEPermission removed from user33005—
PERMISSION_USERGROUP_ADDPermission added to group33006Includes permissionLevel and object
PERMISSION_USERGROUP_DELETEPermission removed from group33006—
PERMISSION_RULE_ADDPermission rule added33005Example: ALL_WORKSPACE_USERS
PERMISSION_RULE_DELETEPermission rule removed33005—
INVITATION_SENDInvitation to join organization sent33005Only used in trial setups of GoodData Cloud. Not applicable to GoodData.CN.
SCHEDULED_MAIL_SENDA scheduled email was sent44009from_email, sessionContext info
AUTH_PROVIDER_CREATEAuth provider created9999001Parameters (secrets masked)
AUTH_PROVIDER_DELETEAuth provider deleted9999001—
AUTH_PROVIDER_UPDATEAuth provider updated9999001—
AUTH_FIM_ENABLEFederated identity enabled9999001—
DATASOURCE_CREATENew data source created9999002Parameters (credentials masked)
DATASOURCE_DELETEData source deleted9999002—
DATASOURCE_UPDATEData source updated9999002—
CACHE_INVALIDATECache invalidated9999002target = dataSource ID / workspace ID / set of datasource IDs
CACHE_SETTINGSData source cache settings changed (strategy, validity period, or invalidation schedule)9999002target = datasource:<id>; previous and new values of cacheStrategy (ALWAYS, NEVER) and cacheRetention (INDEFINITE, VALIDITY_PERIOD, SCHEDULE). See Cache Settings Audit Events.
ORG_SETTINGS_CREATEOrg settings created9999003Includes settingType
ORG_SETTINGS_UPDATEOrg settings updated9999003—
ORG_SETTINGS_DELETEOrg settings deleted9999003—
NOTIFICATION_CHANNEL_CREATEA new notification channel was created.9999003-
NOTIFICATION_CHANNEL_UPDATEA notification channel was updated.9999003-
NOTIFICATION_CHANNEL_DELETEA notification channel was deleted.9999003—
IP_ALLOWLIST_CREATEAn IP allowlist policy was created.9999003—
IP_ALLOWLIST_UPDATEAn IP allowlist policy was updated.9999003—
IP_ALLOWLIST_DELETEAn IP allowlist policy was deleted.9999003—
WORKSPACE_DATA_FILTER_CREATEWorkspace data filter created9999006Includes column name and title
WORKSPACE_DATA_FILTER_UPDATEWorkspace data filter updated9999006—
WORKSPACE_DATA_FILTER_DELETEWorkspace data filter deleted9999006—
WORKSPACE_DATA_FILTER_SETTING_CREATEWorkspace data filter setting created9999006Includes filterValues
WORKSPACE_DATA_FILTER_SETTING_UPDATEWorkspace data filter setting updated9999006—
WORKSPACE_DATA_FILTER_SETTING_DELETEWorkspace data filter setting deleted9999006—
WORKSPACE_CREATEWorkspace created9999005—
WORKSPACE_UPDATEWorkspace updated9999005—
WORKSPACE_DELETEWorkspace deleted9999005Deletes all resources inside
WORKSPACE_SETTINGS_CREATEWorkspace setting created9999005settingType = name of setting
WORKSPACE_SETTINGS_UPDATEWorkspace setting updated9999005—
WORKSPACE_SETTINGS_DELETEWorkspace setting deleted9999005—
ANALYTICS_MODEL_CREATEAnalytics model created9999007Includes type and sourceColumn
ANALYTICS_MODEL_UPDATEAnalytics model updated9999007—
ANALYTICS_MODEL_DELETEAnalytics model deleted9999007—
METRIC_CREATEMetric created9999007Includes MAQL and format
METRIC_UPDATEMetric updated9999007—
METRIC_DELETEMetric deleted9999007—
DATASET_CREATEDataset created9999007Includes ID and source table
DATASET_UPDATEDataset updated9999007—
DATASET_DELETEDataset deleted9999007—
LOCALIZATION_UPDATELocalizations updated9999004—
LOCALIZATION_DOWNLOADLocalizations downloaded9999004—
DASHBOARD_UPDATEDashboard updated9999007—
DASHBOARD_CREATEDashboard created9999007—
DASHBOARD_DELETEDashboard deleted9999007—
VISUALISATION_CREATEVisualization created9999007—
VISUALISATION_UPDATEVisualization updated9999007—
VISUALISATION_DELETEVisualization deleted9999007—
AUTOMATION_CREATEA new automation was created.9999007—
AUTOMATION_UPDATEAn automation was updated.9999007—
AUTOMATION_DELETEAn automation was deleted.9999007—
AGENT_CREATEAn AI agent was created9999008id, title, description, enabled, personality, skillsMode, customSkills, aiKnowledge, availableToAll, userGroups. The audit entry contains only the fields that were changed by the request. The skillsMode field is an enum value, customSkills is a list of enum values, and userGroups is a list of user group IDs.
AGENT_UPDATEAn AI agent was updated9999008Delta of changed fields only. The id is always included.
AGENT_DELETEAn AI agent was deleted9999008The id is always included. Other fields are included if present at deletion time.
MEMORY_ITEM_CREATEAn AI memory item was created9999007strategy, instruction, keywords, isDisabled, title, description
MEMORY_ITEM_UPDATEAn AI memory item was updated9999007Delta of changed fields only. The id is always included.
MEMORY_ITEM_DELETEAn AI memory item was deleted9999007The id is always included. Other fields are included if present at deletion time.
DOCUMENT_CREATEA knowledge document was uploaded9999007content_size, num_chunks, title if set, scopes if set. The target field contains the document filename. If present, scopes are comma-joined in the audit entry.
DOCUMENT_UPDATEA knowledge document was updated9999007the same event covers both full content replacement and metadata-only patches. Full upsert: content_size, num_chunks, title if set, scopes if set. Partial patch: only changed fields among is_disabled, title, scopes.
DOCUMENT_DELETEA knowledge document was deleted9999007No additional attributes beyond mandatory fields

AI Memory Audit Events

The same MEMORY_ITEM_* event set covers both workspace-level and organization-level AI memory items. Workspace-level memory items log with workspaceId populated. Organization-level memory items log with workspaceId set to <NONE>. Use the workspaceId field to distinguish the scope.

For MEMORY_ITEM_UPDATE, the audit entry contains only the fields that were changed by the request. The strategy field is an enum value, keywords is a list of strings, isDisabled is a boolean, and instruction contains the system-prompt text.

When a memory item is created or updated by the AI Assistant on behalf of a user, agentId and conversationId are attached automatically.

Reads of memory items, such as GET, list, or search operations, are not audited.

Cache Settings Audit Events

The CACHE_SETTINGS event is recorded when the cache strategy or cache retention of a data source changes. This includes the initial settings applied when a data source is created, changes made when a data source is updated, and changes applied through the data sources layout API. No CACHE_SETTINGS event is recorded if neither setting changes.

The audit entry identifies the affected data source in the target field as datasource:<id> and contains these attributes:

  • cacheStrategyPreviousValue and cacheStrategyValue: Previous and new cache strategies. Values are ALWAYS or NEVER.
  • cacheRetentionPreviousValue and cacheRetentionValue: Previous and new cache retention configurations. The configuration can be INDEFINITE, VALIDITY_PERIOD (with an ISO-8601 duration), or SCHEDULE (with a cron expression and timezone).

For example, a validity period of 24 hours is represented as {"type":"VALIDITY_PERIOD","validityPeriod":"PT24H"}. A previous value of null means no value was previously set. A previous value of READ_FAILED means the earlier setting could not be retrieved, but the change was still applied and logged.

Data source updates continue to generate DATASOURCE_UPDATE events. Cache invalidations, including scheduled invalidations, are recorded separately as CACHE_INVALIDATE events.

Audit Logging for Layout APIs

When using the layout APIs, deletion of old resources is recorded through a single audit log message per action, rather than individual entries for each sub-resource. However, creation events are logged individually for each entity.

Here is how deletion events are logged:

  • eventName = workspace_delete, target = <org_id> (Triggered by the organization layout API) This also deletes: workspace settings, dashboards, visualizations, and permissions.

  • eventName = workspace_delete, target = <workspace_id> (Triggered by the workspace layout API) This also deletes: workspace settings, dashboards, visualizations, and permissions.

  • eventName = analytics_model_delete, target = <workspace_id> (Triggered by the analytics model layout API) This also deletes related permissions.

  • eventName = datasource_delete, target = <organization_id> Deletes the data source and all related permissions.

Limitations

  • The audit log does not provide a complete record of every API request, UI interaction, or AI Assistant conversation.
  • Authorization failures, 403 responses, failed AI actions, prompt-injection attempts, and policy-blocked actions are not generally recorded as audit events unless they correspond to one of the events listed in the Audit Events section.
  • Diagnostic logs may contain additional troubleshooting information, but diagnostic log fields and formats are not part of the public audit log.
  • No Dedicated API: This solution does not include a dedicated API for accessing audit logs.
  • No Internal Log Processing: There is no active log processing pipeline within GoodData.CN.
  • Decentralized Storage: Logs are stored locally with each deployment. This means there is no centralized aggregation (e.g., no integration with systems like Loki).