You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Part of:#2696 · Needs first:#2697 (click-through to the Log Explorer and the value/count table) Related:#1794 (parsers and rules for this integration, owned by the detection team)
Goal
Ship a built-in CrowdStrike Falcon dashboard that shows, at a glance, how much CrowdStrike Falcon is sending, whether it is still sending, and what kinds of events they are. The heart of it is the list of CrowdStrike Falcon logs grouped by event types (widget W7): click one and the Log Explorer opens on exactly those logs.
Where the data comes from
Integration (catalog name)
CROWDSTRIKE
Data type
crowdstrike
How the logs arrive
The UTMStack CrowdStrike plugin opens the Falcon Streaming API with the API client of each config group and turns every streamed event (a JSON object with 'metadata' and 'event') into one log, unchanged.
The name of the UTMStack config group (one Falcon API client and customer). Proof: plugins/crowdstrike/main.go sets dataSource: group.GroupName for each stream and processEvent passes it as DataSource; the parser never writes dataSource. So W6 is 'Logs by Falcon connection'; the endpoint is in origin.host.
Grouped by
log.metadataEventType (event types)
Why log.metadataEventType: Every Falcon stream event has metadata.eventType, which the parser renames to log.metadataEventType. It names the kind of record (detection, sign-in audit, console audit, incident, remote response session), has a few dozen values at most, and is readable. The detection's own title is in log.eventName (W9), and the audit operation in log.eventOperationName; neither exists on all events. Values below appear in real Falcon events (Elastic's CrowdStrike integration test data).
The newest events; detections show name, host, user and severity, audit events show the operation.
Fields used and where they come from
log.metadataEventType: Falcon stream event type. Examples: EppDetectionSummaryEvent, AuthActivityAuditEvent, UserActivityAuditEvent. Source: json step on raw (top-level key 'metadata'), then rename log.metadata.eventType -> log.metadataEventType.
log.eventName: Detection title (endpoint detections). Examples: Known Malware, Suspicious Activity, NGAV. Source: rename log.event.Name -> log.eventName.
origin.host: Endpoint host name of the detection. Examples: dave-win10-3, linux-vm. Source: rename log.event.Hostname -> origin.host.
origin.user: User on the endpoint (detections) or remote response operator. Examples: win10_user3, Administrator, first.last@company.com. Source: rename log.event.UserName -> origin.user.
log.eventPatternDispositionDescription: What the sensor did: 'Prevention, ...' when it blocked, 'Detection, ...' when it only reported. Examples: Prevention, process killed., Detection, standard detection., Detection, process would have been blocked if related prevention policy setting was enabled.. Source: rename log.event.PatternDispositionDescription -> log.eventPatternDispositionDescription.
log.eventTactic: MITRE ATT&CK tactic or Falcon category of the detection. Examples: Malware, Execution, Falcon Overwatch. Source: rename log.event.Tactic -> log.eventTactic.
actionResult: Outcome of audit events. Examples: success, failed. Source: add 'success'/'failed' from log.eventSuccess true/false, or from statusCode 200-399 / >= 400.
Watch out for
Field coverage differs by event type. Current endpoint detections (EppDetectionSummaryEvent) fill log.eventName, origin.host, origin.user, log.eventSeverityName, log.eventTactic and the disposition. The legacy DetectionSummaryEvent keeps ComputerName, DetectName and DetectDescription unrenamed (under log.event.), so those detections are missing from W9 and W10. Incident, firewall, identity, IOC and remote response events keep most of their fields nested under log.event. (for example the remote response host is log.event.HostnameField).
W2 uses 'ends_with DetectionSummaryEvent' (the store ignores case) so it covers all seven detection summary types seen in real Falcon data; IdentityProtectionEvent and IncidentSummaryEvent are incidents, not detections, and are not counted.
W3 relies on Falcon's disposition text starting with 'Detection' (reported only, for example 'Detection, process would have been blocked if related prevention policy setting was enabled.') or 'Prevention' (blocked or killed). Events without a disposition are not counted.
Severity names are title case on all detection types in real Falcon data ('Informational', 'Low', 'Medium', 'High', 'Critical'); identity incident events use capitals ('LOW', 'INFO') and are left out of W12a by its filter. The parser does not normalize them or fill the standard severity column.
actionResult exists only on sign-in and console audit events (from Success or the HTTP status code), so it is not used for detections.
Console users of audit events stay in log.eventUserId, not origin.user, so W11 shows endpoint users and remote response operators only.
dataSource is the config group of the Falcon API client, so W6 shows one bar per connection.
Time charts use the time UTMStack received the event (the plugin sets @timestamp to the receive time); the event time stays in log.metadataEventCreationTime (epoch milliseconds).
No field used here depends on the engine's underscore rule: only the top-level keys 'metadata' and 'event' go through key cleanup, and nested keys are kept as they are. The replay gave the same result with both rules.
Checked with a step-by-step replay of this filter over 50 real Falcon stream events from Elastic's public CrowdStrike integration test data plus 8 samples prepared earlier.
Parser problems found while designing this
These are not dashboard work, but they limit what the dashboard can show. They belong to #1794; raise them there rather than working around them in the dashboard.
The legacy DetectionSummaryEvent keys ComputerName, DetectName and DetectDescription are not renamed, so those detections have no origin.host or log.eventName.
The sign-in client address is deleted: the final delete removes log.event.UserIp and log.event.Attributes.user_ip without renaming them first, so console and API sign-ins have no origin.ip (and no geolocation).
No severity normalization: SeverityName stays in log.eventSeverityName with mixed case ('High', 'LOW'), and the standard severity column is empty.
The event time (metadata.eventCreationTime, event.UTCTimestamp) is not mapped to deviceTime.
Many event types (incidents, firewall matches, identity protection, remote response, IOC events) are left almost entirely under log.event.*, including host names such as HostnameField, so per-host views miss them.
Does not affect this dashboard: several renames are duplicated (log.event.Message, log.event.ServiceName, log.event.Attributes.trace_id appear twice).
How to build it
Before you start: parser field names are changing while the parsers are updated for the engine's new underscore handling (see "Field names are about to move" in #2696). Check every field in this issue against the v12 parser at that moment and against real logs, and build against what you find.
Add definitions/dashboards/integration-crowdstrike.yaml. Keep it in the top folder: the test that checks shipped dashboards (TestEveryShippedDashboardDefinitionIsValid) only reads the top folder.
Start from the file below; it follows the table above and passes the same checks as the backend (domain.Spec.Validate).
definitions/dashboards/integration-crowdstrike.yaml is merged to release/v12.0.0 and go test ./modules/dashboards/... passes in backend/.
With CrowdStrike Falcon logs flowing on a v12 test server, every widget shows data. A widget that stays empty while logs arrive means a wrong field or value: fix it, don't ship it.
Clicking a row, bar or line point opens the Log Explorer on the same logs, and the Log Explorer count matches the widget.
A time range with no logs shows empty states, not errors.
A screenshot of the finished dashboard is attached to this issue.
Part of: #2696 · Needs first: #2697 (click-through to the Log Explorer and the value/count table)
Related: #1794 (parsers and rules for this integration, owned by the detection team)
Goal
Ship a built-in CrowdStrike Falcon dashboard that shows, at a glance, how much CrowdStrike Falcon is sending, whether it is still sending, and what kinds of events they are. The heart of it is the list of CrowdStrike Falcon logs grouped by event types (widget W7): click one and the Log Explorer opens on exactly those logs.
Where the data comes from
CROWDSTRIKEcrowdstrikedefinitions/filters/crowdstrike/crowdstrike.yamldataSourceholdslog.metadataEventType(event types)Why
log.metadataEventType: Every Falcon stream event has metadata.eventType, which the parser renames to log.metadataEventType. It names the kind of record (detection, sign-in audit, console audit, incident, remote response session), has a few dozen values at most, and is readable. The detection's own title is in log.eventName (W9), and the audit operation in log.eventOperationName; neither exists on all events. Values below appear in real Falcon events (Elastic's CrowdStrike integration test data).Typical values:
EppDetectionSummaryEvent (endpoint detection),AuthActivityAuditEvent (console or API sign-in),UserActivityAuditEvent (console change),IncidentSummaryEvent (incident),RemoteResponseSessionStartEvent (remote response session opened),IdpDetectionSummaryEvent (identity protection detection)Widgets
Standard layout from the parent issue; rows W2, W3 and W9 onward are specific to this integration.
log.metadataEventTypeends with DetectionSummaryEventlog.eventPatternDispositionDescriptionstarts with DetectiondataSourcelog.metadataEventType; filterlog.metadataEventTypeexistslog.metadataEventType(top 5); filterlog.metadataEventTypeexistslog.eventName; filterlog.eventNameexists;log.metadataEventTypeends with DetectionSummaryEventorigin.host; filterorigin.hostexistsorigin.user; filterorigin.userexistslog.eventSeverityName; filterlog.eventSeverityNameexists;log.metadataEventTypeends with DetectionSummaryEventlog.eventTactic; filterlog.eventTacticexistsnameseverity@timestamp,dataSource,log.metadataEventType,log.eventName,origin.host,origin.user,log.eventSeverityName,log.eventOperationNameFields used and where they come from
log.metadataEventType: Falcon stream event type. Examples:EppDetectionSummaryEvent,AuthActivityAuditEvent,UserActivityAuditEvent. Source: json step on raw (top-level key 'metadata'), then rename log.metadata.eventType -> log.metadataEventType.log.eventName: Detection title (endpoint detections). Examples:Known Malware,Suspicious Activity,NGAV. Source: rename log.event.Name -> log.eventName.origin.host: Endpoint host name of the detection. Examples:dave-win10-3,linux-vm. Source: rename log.event.Hostname -> origin.host.origin.user: User on the endpoint (detections) or remote response operator. Examples:win10_user3,Administrator,first.last@company.com. Source: rename log.event.UserName -> origin.user.log.eventSeverityName: Falcon severity name. Examples:Informational,Low,Medium,High,Critical. Source: rename log.event.SeverityName -> log.eventSeverityName.log.eventPatternDispositionDescription: What the sensor did: 'Prevention, ...' when it blocked, 'Detection, ...' when it only reported. Examples:Prevention, process killed.,Detection, standard detection.,Detection, process would have been blocked if related prevention policy setting was enabled.. Source: rename log.event.PatternDispositionDescription -> log.eventPatternDispositionDescription.log.eventTactic: MITRE ATT&CK tactic or Falcon category of the detection. Examples:Malware,Execution,Falcon Overwatch. Source: rename log.event.Tactic -> log.eventTactic.log.eventOperationName: Audit operation (sign-in and console events). Examples:twoFactorAuthenticate,streamStarted,detection_update. Source: rename log.event.OperationName -> log.eventOperationName.actionResult: Outcome of audit events. Examples:success,failed. Source: add 'success'/'failed' from log.eventSuccess true/false, or from statusCode 200-399 / >= 400.Watch out for
Parser problems found while designing this
These are not dashboard work, but they limit what the dashboard can show. They belong to #1794; raise them there rather than working around them in the dashboard.
How to build it
Before you start: parser field names are changing while the parsers are updated for the engine's new underscore handling (see "Field names are about to move" in #2696). Check every field in this issue against the v12 parser at that moment and against real logs, and build against what you find.
definitions/dashboards/integration-crowdstrike.yaml. Keep it in the top folder: the test that checks shipped dashboards (TestEveryShippedDashboardDefinitionIsValid) only reads the top folder.domain.Spec.Validate).categoryquery shown with chart typetable. It already renders; v12 dashboards: groundwork for integration dashboards (click-through to the Log Explorer, value/count table, Agents dashboard fix) #2697 makes its rows clickable and its headers readable.Starting dashboard file
Done when
definitions/dashboards/integration-crowdstrike.yamlis merged torelease/v12.0.0andgo test ./modules/dashboards/...passes inbackend/.