Cortex XSIAM · Delivery Playbook

SentinelOne Log Reduction
& Alert Tuning Guide

Where volume actually gets cut, where alerts actually get tuned, the XQL to prove both, and an honest answer on whether a data pipeline helps. Every product claim links to an official Palo Alto Networks or SentinelOne property.

Two conventions used throughout. Items badged unverified could not be confirmed against vendor documentation and must not be stated as fact to a customer. Items badged correction are common pieces of advice that do not survive the documentation, kept visible so nobody repeats them. Terminology follows Cortex XSIAM 3.x: alerts are issues, incidents are cases, and Alert Exclusions is now Issue exclusions.

Part 1 · Aligns to “SentinelOne Deep Visibility”

Where Volume Actually Gets Cut

The highest-impact reduction levers for SentinelOne ingestion, ordered by typical byte savings, with the enforcement point for each one.

1. Filter noisy, low-value event types at the source

Event typeTypical volumeReduction advice
Process-adjacent telemetry (DNS, netconn, file, registry)Very highScope to monitored endpoints only; exclude dev and test machines
Network flow eventsHighFilter internal-only traffic, or suppress RFC1918 to RFC1918 flows with no threat signal
File modification eventsHighRestrict to sensitive paths such as C:\Windows\System32 or /etc/ rather than all paths
Scheduled task and service eventsMediumRetain; typically high fidelity and low volume
Threat and alert eventsLowAlways retain; this is the detection signal

Where this is enforced. For the DeepVisibility path, the documented filter point is the SentinelOne Cloud Funnel configuration, not a generic connector setting: in SentinelOne go to Singularity Data Lake → Cloud Funnel, set the AWS S3 target, enable Telemetry Streaming, and build a Query Filters expression selecting only the agents that should stream, confirming it with Validate (Cortex documentation).

Do not trim fields in Cloud Funnel. The Cortex setup procedure explicitly instructs that under Fields to include, all fields should be selected. Agent scoping in Query Filters is the supported volume lever on that screen; field removal is not. Palo Alto also documents that third-party agents provide less data than the native Cortex agent, lack the same causality and cloud-analytics optimization, and that external EDR rate limits and filters can restrict data analytics require, with only a subset of analytics detectors functioning on third-party EDR data.

2. Exclude non-production, dev, and test endpoints

Tag those endpoints in the SentinelOne console and scope streaming by group, expressed as an agent-selection Query Filter on the Cloud Funnel configuration. unverified that a group-based policy can suppress telemetry forwarding independently of Cloud Funnel; confirm in the customer's console version before promising it.

3. SentinelOne-side visibility filters

unverified A console path named Deep Visibility → Ingestion Policy with trusted-parent-process allowlisting and known-good software suppression is not documented in the Palo Alto ingestion guide and should not be stated as fact. What is documented is the Cloud Funnel query filter plus field selection. SentinelOne separately markets data-pipeline filtering ahead of the lake; treat exact UI names as customer-specific until verified.

4. XSIAM-side reduction with Parsing Rules

XSIAM's documented drop-and-trim control plane is Parsing Rules, which requires View/Edit RBAC on Configurations → Data Management and lets you remove data not required for analytics, hunting, or regulation, pre-process incoming data, and tag events during ingestion. Rules are bound to a vendor and product, apply XQL transformations to raw log input, and may return zero, one, or more rows, so a rule can emit nothing and effectively drop a log. Rule groups carry a no-match policy that either drops the log or keeps a default format, and rules can be tested against real logs before implementation (Parsing Rules).

Good uses: duplicate coverage when two EDRs forward the same behavior, and verbose informational events with no detection or compliance use case. Suppressing an issue is not the same as dropping a log — an issue exclusion explicitly does not delete the logs that triggered it.

4b. Put the data in the right tier before you drop any of it

There is a supported alternative to filtering that most sizing conversations skip: choosing the destination. Palo Alto documents three, with different costs and capabilities (Optimize data management in Cortex XSIAM).

DestinationAI/ML analyticsCorrelation rulesKey restrictions
Analytics tierFull supportFull supportMandatory tier, 100 GB/day minimum. The documented recommendation for anything heavily used in real-time detection and response
Cortex Data Lake tierNoneFull support, consumes Compute UnitsNo XDM normalization, no out-of-the-box analytics, no stitching or enrichment; cannot store PANW firewall logs; optional add-on with a 50 GB/day minimum once the Analytics minimum is met
Federated SearchNoneSearch onlyNot ingested — stays in the customer’s S3, Azure Blob or GCS. No correlation rules, scheduled queries, widgets or dashboards. CSV, Parquet or JSONL in Hive structure. Customer Support must enable it

How to assign a tier. Configuration is exclusively through Parsing Rules: Settings → Configurations → Data Management → Parsing Rules, the Both tab, right-click the [INGEST] rule for the dataset and select Change Tier to Data Lake. XSIAM disables the default rule, adds a user-defined rule carrying tier=lake, and appends _lake_raw to the dataset name. Tier changes apply only to data ingested afterwards, and existing data is never moved between tiers (Configure Cortex Data Lake tier).

What tiering costs you
  • No XDM normalization in the Data Lake tier, so SentinelOne data routed there does not land in xdr_data — BIOCs and analytics detectors lose it, and XQL plus correlation rules against the raw dataset are what remain.
  • Compute Units apply. Queries, scheduled queries, dashboards, playbooks and public API calls consume CU, and any mixed-tier query touching one Data Lake dataset incurs a full CU charge. Retention and event forwarding are priced on the standard Analytics model.
  • Temporary behavior is not a design input. A few sources currently receive analytics-like treatment in the Data Lake tier; the documentation states this is temporary and planned for removal.
  • Federated Search is search only, slower because it depends on the external cloud, and consumes CU when queried. It is a compliance and sovereignty answer, not a detection one.

5. Scope the forwarding configuration itself

For the S3 and Cloud Funnel path, scope by site or account group in the SentinelOne query filter and keep file hygiene inside the documented constraints: one log per line, no multi-line format, gzip or uncompressed, and up to roughly 50 MB compressed per file for best performance. For the alert and activity path, the SentinelOne content pack and the SentinelOne Activity and Alerts integration pull activities, threats, and issues, a far narrower and cheaper feed than raw telemetry. unverified A severity-floor forwarding control in SentinelOne Activity Filters is not documented by Palo Alto — but a severity floor is documented on the integration path, covered in Part 3.

Part 2 · Aligns to “Native Agent vs Third-Party EDR”

Getting SentinelOne Alerts Tuned

Seven steps, in the order that keeps detection coverage intact while the queue gets quieter.

0

Measure before you cut

Establish the baseline from metrics_source and the metrics_view preset. Ingestion metrics aggregate in 5-minute periods and expose total_size_bytes, total_size_rate, total_event_count, and total_event_rate per data source; metrics_view is recommended for queries and correlation rules because it fills zero-value gaps, and health deviations surface on the Health Issues page once Configurations → Cortex - Analytics is enabled (ingestion metrics). Capture window, per-endpoint volume, top talkers, and event-class mix before proposing any reduction.

1

Know which dataset each tuning action touches

Raw telemetry lands in the auto-created sentinelone_deep_visibility_raw dataset while critical fields are mapped into xdr_data and the XDM model. This matters because BIOC rules can only be built on xdr_data or cloud_audit_log, never custom datasets, and the BIOC query must filter on event_type (Create a BIOC rule). Strip mapped fields and you lose BIOC and analytics reach; strip raw and you lose hunting and forensics reach.

2

Map SentinelOne alerts correctly, or they will be untunable

External alerts require TIMESTAMP, SEVERITY, and ALERT NAME to be mapped, with optional fields including source and destination IP and port, hostname, username, process command line, process SHA256, process file path, category, action, and description. The flow is to right-click the Vendor Product, choose Filter and Map, narrow with table filters, then define rule information and field mappings (Ingest external alerts). Mapping severity and name properly is the highest-leverage tuning act: unmapped severity makes every downstream exclusion, scoring rule, and case-grouping decision unreliable.

Set expectations on what XSIAM can raise from a third-party feed: Correlation Rule issues can be raised on non-normalized and normalized logs, while Analytics, IOC, and BIOC issues are raised only on normalized logs (external source visibility).

3

Suppress noise with issue exclusions, not by deleting data

An issue exclusion suppresses matching issues from cases and from search results and stops saving future matches, while the agent still generates them on the endpoint. Exclusions can be built from scratch or from issues investigated in a case, support a Backward Scan Status for historic data, and carry Schedule Start, Schedule Expire, status, comment, and owning user (Issue exclusions).

Discipline that keeps this safe
  • Always set a Schedule Expire on exclusions created during onboarding so temporary suppressions do not become permanent blind spots.
  • Use the Comment field as the audit record: who approved it, which ticket, what evidence.
  • Leave Backward Scan off unless the customer explicitly wants historic issues hidden, since it changes what investigators can see.
4

Exceptions for single-attribute noise, exclusions for everything else

IOC and BIOC exceptions target one indicator — process SHA256, process name, process path, signing vendor, username, CGO full path, or command line — and require a rule scope. XSIAM supports exceptions with only one attribute, and multi-criteria suppression must be done with an exclusion rule instead (IOC/BIOC exceptions). A signed updater binary is an exception; “this behavior, on these hosts, by this user, during this window” is an exclusion.

5

Rebuild the detections you want as correlation rules

Real-time correlation rules scan data as it is ingested, must include an XQL filter stage, and support only dataset, datamodel, filter, alter, fields, and config case_sensitive. call, top, dataset views, the tag stage, and dataset wildcards are unsupported and block saving. Output can be written to a target dataset with _rule_id, _rule_name, and _insert_time added (Create a correlation rule).

  • Severity is a queue-volume decision, not cosmetic. Correlation issues at Medium or above automatically open a case; Low severity correlation issues are not grouped into cases.
  • Write output to its own dataset for a cheap, queryable record of tuning behavior over time.
6

Tune analyst attention with scoring instead of more suppression

Enable SmartScore and user scoring rules, then score issues by attributes such as severity, category, or associated assets. Scores can apply only to the first matching issue in a case, rule priority is ordered in the Scoring Rules table, and initial SmartScore calculation can take up to 48 hours (Set up case scoring). For a SentinelOne-heavy tenant, score third-party EDR sources below native detections rather than excluding them: you keep the evidence and still fix the queue.

7

Run a blast-radius check before every reduction

For each candidate cut, document which correlation rules, BIOCs, IOCs, analytics detectors, dashboards, playbooks, and open investigations depend on that dataset, field, or event class. BIOC and analytics depend on normalized xdr_data fields, while correlation rules can also run on raw third-party datasets. A reduction recommendation is incomplete until the customer can see what would stop working.

Sequence and rollout
  • Days 1–3. Baseline volume and issue counts from ingestion metrics; inventory event classes and top hosts.
  • Days 4–7. Fix mapping (severity, name, host, user, process) so tuning rests on correct fields.
  • Week 2. Host-level scoping in Cloud Funnel for dev, test, and non-monitored estates. No field-level trimming.
  • Weeks 2–3. Single-attribute BIOC and IOC exceptions for known-good software; issue exclusions with expiry for the top recurring noise patterns.
  • Week 3. Parsing Rules to drop genuinely unused verbose classes and duplicate EDR coverage, tested against real logs first.
  • Week 4. Scoring rules and correlation-rule severity review; re-measure volume and issues per analyst hour against the day-1 baseline.
Metrics to report back
  • GB/day by data source and event class, before and after, from metrics_source and metrics_view.
  • Issue count by source and severity, and the share of issues that opened cases.
  • Number of active exclusions and exceptions, and how many carry expiry dates.
  • Detection coverage retained: which correlation rules, BIOCs, and analytics detectors still have their required inputs.

Part 3 · Aligns to “What Each EDR Actually Sends”

Choosing the Collection Path Sets the Bill

Palo Alto documents three onboarding paths, and which one a tenant uses depends on when it was onboarded.

The Standard Collector handles raw DeepVisibility telemetry via Cloud Funnel to S3, the content pack / integration path applies to tenants onboarded before July 26, 2026, and the connector named SentinelOne applies after that date (SentinelOne DeepVisibility). Confirm the onboarding date before quoting a configuration path.

PathWhat it brings inVolume profilePrimary volume controls
Standard Collector (Cloud Funnel → S3 → SQS) Raw EDR telemetry into sentinelone_deep_visibility_raw, modeled into xdr_data and XDM Highest by far Cloud Funnel Query Filters for agent scope; all fields must be included; S3 lifecycle retention of at least 7 days
SentinelOne Event Collector (sentinelone-get-events) activities, threats, alerts Low to moderate Event types, First fetch time (default 3 days), and a per-fetch limit of 1–1000 per event type, so three types at 100 is an effective 300 (SentinelOne Activity and Alerts)
SentinelOne v2 (Partner Contribution) Threats, alerts, UAM alerts, Deep Visibility queries, agent and site data Low, but chatty on commands Severity selection (Low, Medium, High, Critical), minimum risk score 0–10 for API v2.0, which alerts and threats to fetch, fetch limit, fetch interval, and Site IDs scoping (SentinelOne v2)
Practical guidance
  • The severity floor exists on the integration path, not the telemetry path. The v2 integration exposes an alert-severity parameter and a minimum risk score; the event collector exposes event-type selection and fetch limits.
  • Use Site IDs on the v2 integration to keep multi-tenant or lab sites out of the tenant entirely.
  • Set First fetch time conservatively. A long first-fetch window is a one-time but real ingestion spike.
  • Detection handoff without the telemetry bill. If a customer needs alerts and response actions rather than raw hunting data, the event collector plus the v2 integration covers threats, alerts, agent actions, and remediation with no Cloud Funnel volume at all.
  • Event-class vocabulary. DeepVisibility event types visible through the v2 integration are events, file, ip, url, dns, process, registry, scheduled_task, and logins across windows, linux, macos, and windows_legac agents.
  • Collector parameters to capture during onboarding: Access Key or Assumed Role, Name, SQS URL, plus AWS Client ID and AWS Client Secret, or Role ARN and External Id.

Start here · Vendor-agnostic

The 3-Query Baseline

Three queries, no vendor names, no assumptions about how the tenant labeled anything. Run them in order and you have a defensible starting number in a few minutes.

The trap in most ingestion queries is a hardcoded vendor filter. Tenants label sources differently depending on the collection path, the connector version, and whatever the person who onboarded it typed, and the documentation does not publish the _vendor and _product values. So do not filter by vendor at all. Group by it instead, and the tenant tells you its own naming.

Set the time range in the query builder’s time picker, or keep the config timeframe stage shown here. Validate field names against the tenant schema on first run.

B1. What is arriving, and how much — the one query to run first

config timeframe = 7D
| preset = metrics_view
| comp sum(total_size_bytes) as bytes, sum(total_event_count) as events by _vendor, _product
| alter GB_7d = divide(bytes, pow(2,30))
| alter GB_per_day = divide(GB_7d, 7)
| fields _vendor, _product, GB_per_day, GB_7d, events
| sort desc GB_7d

What you get. Every source in the tenant, ranked by volume, with the customer’s own vendor and product strings printed in the first two columns. This answers the only question that matters at the start: what is actually driving the bill, and is the EDR feed the top line or a footnote. Read the vendor string for the EDR feed off this output and copy it literally if you later want to drill into one source. A seven-day window smooths weekday and weekend patterns; widen it to 30D if the estate is seasonal, and divide by 30 instead of 7.

B2. Is it growing, and did something change

config timeframe = 30D
| preset = metrics_view
| alter day = format_timestamp("%Y-%m-%d", _time)
| comp sum(total_size_bytes) as bytes, sum(total_event_count) as events by day, _vendor, _product
| alter GB = divide(bytes, pow(2,30))
| fields day, _vendor, _product, GB, events
| sort asc day

What you get. A daily series per source, still with no vendor filter. You are looking for three things: a trend line that is climbing, a step change on a specific date that usually maps to a policy or agent version rollout, and flat zero days that mean the feed broke and nobody noticed. A single day’s number is not a baseline, and this is the query that proves whether the number from B1 is representative or a bad day.

B3. Where is the volume concentrated

config timeframe = 7D
| preset = metrics_view
| comp sum(total_size_bytes) as bytes, sum(total_event_count) as events by _vendor, _product, _collector_name, _collector_type, _final_reporting_device_name
| alter GB = divide(bytes, pow(2,30))
| fields _vendor, _product, _collector_name, _collector_type, _final_reporting_device_name, GB, events
| sort desc GB
| limit 50

What you get. The collectors and reporting devices producing the most data. Volume is almost never spread evenly, and this is where the actionable finding usually lives: one broker, one collector, or a handful of servers accounting for a disproportionate share. These grouping fields are the ones Palo Alto uses in its own ingestion-health correlation examples.

What three queries buy you
  • A number you can defend — measured GB per day by source, from the customer’s tenant, replacing every planning range on the estimator page.
  • The tenant’s own vocabulary — the literal vendor and product strings, so any follow-up query or correlation rule can be pinned to an exact match instead of a guessed one.
  • A direction for the conversation — whether the answer is tiering, export tuning, agent displacement, or nothing at all because the EDR feed is not the problem.

That is enough to size a plan. Go deeper only when these three raise a question: the full XQL library covers health, event-class mix, and noisiest-endpoint analysis, and the nine-step run order is for when a feed is broken rather than merely expensive.

Part 4 · Aligns to “Daily Ingest Estimator”

XQL for Ingestion-Rate Troubleshooting

The deeper library, for when the 3-query baseline raises a question worth chasing. Most engagements do not need all of these. Validate field names against the tenant schema on first use.

Documented metric fields are total_size_bytes, total_size_rate, total_event_count, and total_event_rate, aggregated in 5-minute periods into metrics_source, with the metrics_view preset recommended for queries and correlation rules because it fills zero-value gaps (ingestion metrics).

4.0 Discover the exact vendor and product strings (run this first)

dataset = metrics_source
| comp sum(total_size_bytes) as bytes, sum(total_event_count) as events by _vendor, _product
| alter GB = divide(bytes, pow(2,30))
| sort desc GB

Why this comes first. Palo Alto documents the dataset name sentinelone_deep_visibility_raw, but it does not publish the exact _vendor and _product string values written into metrics_source, and the filter reference does not state whether contains is case sensitive. So the queries below deliberately match on the partial string "entinel" rather than "Sentinel": that matches SentinelOne, sentinelone, and Sentinel One regardless of the casing of the first letter or a space in the middle. Treat that as a discovery convenience, not a finished query. Run 4.0, read the literal value your tenant uses, then replace every contains "entinel" below with an exact match on that value — for example | filter _vendor = "SentinelOne" — before you save a query, build a dashboard, or write a correlation rule. A broad substring match will silently pick up any other source whose vendor string happens to contain it, and it leaves the next person guessing whether the missing letter was a typo.

4.1 Health issues by collector

config timeframe = 30D
| dataset = issues
| filter xdm.issue.domain = "HEALTH"
| alter collector_name = regextract(xdm.issue.name, "instance\s(.*)\sof\sa\s")
| alter collector_type = coalesce(arrayindex(regextract(xdm.issue.name, "via\sa\s(.*)\scollector"),0), arrayindex(regextract(xdm.issue.name, "\sof\sa\s(\S+)"),0))
| fields _time, xdm.issue.id, xdm.issue.detection.method, xdm.issue.name, xdm.issue.description, collector_name, collector_type, *

Pairs with the built-in ingestion health mechanism, which baselines each data source and raises issues on no-data or significant deviation, surfaced on the Health Issues page once Configurations → Cortex - Analytics is enabled.

4.2 Volume by product, in MB

dataset = metrics_source
| fields _vendor, _product, total_size_bytes, total_size_rate
| comp sum(total_size_bytes) as ingestion by _product
| alter Ingestion_by_MB = divide(round(multiply(divide(ingestion, pow(2,20)), 10000)), 10000)
| fields _product, Ingestion_by_MB
| sort desc Ingestion_by_MB

Community-validated pattern (LIVEcommunity). Swap pow(2,20) for pow(2,30) to report GB, and add | filter _vendor = "SentinelOne" to isolate the feed.

4.3 SentinelOne daily trend and rate

preset = metrics_view
| filter _vendor contains "entinel"
| alter day = format_timestamp("%Y-%m-%d", _time)
| comp sum(total_size_bytes) as bytes, sum(total_event_count) as events by day, _product
| alter GB = divide(bytes, pow(2,30))
| fields day, _product, GB, events
| sort asc day

Replace contains "entinel" with the exact value returned by 4.0, for example | filter _vendor = "SentinelOne", before saving this query.

4.4 Which collector or reporting device is driving the bill

preset = metrics_view
| comp sum(total_size_bytes) as bytes, sum(total_event_count) as events by _collector_name, _collector_type, _final_reporting_device_name, _vendor, _product
| alter GB = divide(bytes, pow(2,30))
| sort desc GB

The grouping fields _collector_id, _collector_ip, _collector_name, _collector_type, _final_reporting_device_ip, _final_reporting_device_name, _broker_device_id, _vendor, and _product are the ones Palo Alto uses in its own ingestion-health correlation examples.

4.5 Silent-source detection, as a correlation rule

preset = metrics_view
| comp sum(total_event_count) as total_event_count_sum by _collector_id, _collector_ip, _collector_name, _collector_type, _final_reporting_device_ip, _final_reporting_device_name, _broker_device_id, _vendor, _product
| filter total_event_count_sum = 0

The documented example rule: hourly schedule, 1-hour query time frame, issue suppression enabled, action Generate issue, Issue Domain Health, Severity High, Type Ingestion, with preconfigured ingestion-health field mappings. Build one scoped to the SentinelOne collector so a broken Cloud Funnel or expired AWS credential is caught in an hour, not at the next review.

4.6 Event-class mix inside the raw dataset

dataset = sentinelone_deep_visibility_raw
| comp count() as events by event_type
| sort desc events
| limit 50

Replace event_type with the tenant's actual class field if the Cloud Funnel v2 flat schema names it differently, then repeat grouped by host to find top talkers.

4.7 Noisiest endpoints in modeled data

Same rule as 4.3: swap contains "entinel" for the exact vendor string from 4.0 before this becomes a saved query.

dataset = xdr_data
| filter _vendor contains "entinel"
| comp count() as logs by agent_hostname, agent_id
| sort desc logs
| limit 100

Cross-check top hosts against the CMDB before proposing Cloud Funnel agent-scope changes.

Query hygiene
  • Keep time frames tight, add an explicit limit, filter to exclude data early, and select only the fields you need.
  • Undeclared limits default to 1,000 rows for basic queries, while widgets, correlation rules, public APIs, saved queries, and scheduled queries allow up to 1,000,000, and legacy-template queries cap at 10,000 (XQL query best practices).

Part 5 · Aligns to “How XSIAM Works With Itself”

Parsing Rule Practices for SentinelOne

What the file structure actually allows, and the eight practices that follow from it.

Sections in a Parsing Rules file

SectionRole
INGESTRequired. Defines the resulting dataset.
COLLECTOptional. Performs data reduction and manipulation at the Broker VM so unnecessary data never reaches the Cortex XSIAM server, reducing traffic, storage, and compute. Runs before INGEST.
CONSTOptional. Reusable strings and numbers referenced as $constName.
RULEOptional. Named, reusable logic invoked as [rule:ruleName].
EXTENDOptional. Chains onto a Marketplace content pack's default RULE without overriding vendor logic.
XQLp constraints that shape every rule
  • Statements never start with a dataset or preset; the raw source is handled by the system.
  • Permitted stages: alter, fields, filter, join, plus call to invoke another rule. An inner join is allowed in CONST, INGEST, and RULE but not in COLLECT, and must start with dataset=<lookup> | ....
  • Permitted functions: parse_timestamp, parse_epoch, regexcapture. regexcapture works only in Parsing Rules.
  • No output stages; a RULE object holds a single statement; every statement ends with a semicolon.
  • IN accepts only a literal sequence list, for example device_name in ("device1", "device2").
  • Access requires Cortex Account Administrator or Instance Administrator, and the editor requires View/Edit on Configurations → Data Management.
  • Rules cannot be created for NGFW datasets matching panw_ngfw_<text>_raw or for panw_observability_raw.

There is no drop stage. Reduction is expressed two ways: a filter that yields no rows for a log, since a rule can return zero, one, or more rows, and a rule-group no-match policy that either drops the log or keeps it in a default format (file structure and syntax, Parsing Rules).

Recommended practices for this feed
  • Reduce with filter, not with hope. Write INGEST filters for the specific classes the customer agreed to drop, then verify with the Part 4 queries rather than assuming the rule fired.
  • Trim fields after mapping, not before. Use fields to keep what XDM mapping, BIOCs, and correlation rules consume. Anything a BIOC references on xdr_data is off limits.
  • Prefer EXTEND over editing vendor rules so Marketplace updates do not overwrite your work.
  • Centralize thresholds in CONST. Host lists, path allowlists, and trusted signer names belong in constants referenced as $MY_CONST, so a tuning change is one edit with one review.
  • COLLECT will not help Cloud Funnel data. It reduces at the Broker VM, and DeepVisibility arrives through a cloud S3 and SQS collector. Use it only for syslog-delivered SentinelOne data, if that path exists.
  • Test before promoting. The editor tests rules against actual logs, validates output before implementation, and surfaces parsing errors.
  • Tag during ingestion. Tag SentinelOne events by estate — production, lab, kiosk — so later reduction and exclusion decisions reference a tag instead of a growing hostname list.
  • Keep the S3 side healthy. Retain at least 7 days on the bucket lifecycle rule so a collector outage does not become permanent data loss, and honor one log per line, gzip or uncompressed, up to roughly 50 MB compressed per file.

Part 6 · Aligns to “What ‘no charge’ actually means”

Would Cribl Reduce Total Cost?

Supported, purpose-built for this feed, and still the wrong answer in the single-destination case.

What is supported today

Cribl Stream ships a co-developed Cortex XSIAM destination introduced in Stream 4.11.0, and XSIAM ships a matching Cribl integration under Settings → Data Sources → Add Data Source, which issues an API URL and a token shown only once; only a single instance of the Cribl integration can be added (Cribl and Palo Alto Networks partnership). The destination posts JSON to https://api-{tenant external URL}/logs/v1/event with Bearer-token or stored-secret authentication, handles batching and rate limiting, and enforces limits of 5 MB per event, 10 MB per batch, a 400 requests-per-second default rate configurable up to 2,000, and per-worker concurrency of 5 by default (Cortex XSIAM Destination).

Routing requires per-source pipelines that stamp __sourceIdentifier, plus __vendor and __product where needed; Cribl maps these to the Source-Identifier, Integration-Identifier, vendor, and product headers that tell XSIAM which parsers, datasets, and data models to apply (Cribl–Cortex XSIAM onboarding guide).

For this specific feed there is a purpose-built SentinelOne Cloud Funnel pack (cribl-sentinelone-cloud-funnel) that reads the S3 Cloud Funnel data, supports both v1 hierarchical and v2 flat formats, and transforms, enriches, routes, and drops events, with per-category pipelines across Cross Process, DNS, Driver, File, Group, Indicator, IP, Logins, Module, Process, Registry, Scheduled Tasks, and URL, plus “well_known” lookups for risk-ranking or dropping trusted behavior and the option to route full DNS copies to cheap object storage for later Replay (Cribl pack for SentinelOne Cloud Funnel, Cribl Packs Dispensary).

The catch that decides the answer

Cribl's own guidance is the strongest argument against using it as a reduction layer in front of XSIAM: events sent to XSIAM should not be modified or dropped, because doing so may affect parsing, detections, streaming analytics, behavioral analytics, and baselining. The onboarding guide adds that Palo Alto first-party data such as NGFW and native Cortex XDR telemetry should not be routed through Cribl at all if you intend to rely on out-of-the-box analytics and stitching, and that a dataset must be mapped to XDM for analytics to apply, otherwise data stays searchable in Investigator but unnormalized.

Neither Cribl's pack listing nor its onboarding guide publishes a volume or cost reduction percentage for this pack, so any savings number has to come from the customer's own measured baseline. Note also that the Cloud Funnel pack's published version dates to 2023 while the XSIAM pack was updated in March 2026, so pack currency against Cloud Funnel v2 schema changes is worth verifying before committing.

Verdict
  • Worth it when the customer already runs Stream, has multiple destinations for the same SentinelOne data such as XSIAM plus object storage or another lake, wants Replay against cheap storage for DNS and similar high-volume classes, or needs CMDB enrichment and schema normalization that XSIAM parsing rules cannot express. Fan-out and tiering, not deletion, is where the defensible savings live.
  • Not worth it when SentinelOne into XSIAM is the only destination. You are adding a licensed hop, per-source pipeline maintenance, and a documented analytics risk to do a job Cloud Funnel agent scoping and XSIAM Parsing Rules already do inside the platform.
  • Sequence matters either way. Establish the Part 4 baseline, exhaust in-platform levers from Parts 1 and 5, then price a pipeline. A pipeline that cuts 30 percent of bytes but disables analytics detectors is a cost increase disguised as a saving.
  • Never route native Cortex agent or NGFW telemetry through the pipeline if the customer expects out-of-the-box analytics and stitching.

Part 7 · Aligns to “Discovery Questions”

Run Order: Troubleshooting Ingestion and Parsing

For when a feed is broken rather than merely expensive. Nine steps in sequence, each with what to run, what healthy looks like, and where to go when it fails. If you only need a volume number, the 3-query baseline is the faster path.

Queries are reproduced as written for the tenant. Verify field names on first use, since collection_auditing, insert_timestamp, and event_type availability vary by tenant and license.

1

Confirm data is arriving at all (24 hours)

config timeframe = 24h
| dataset = xdr_data
| filter _vendor = "SentinelOne"
| sort desc _time
| limit 20
Healthy

Rows returned, with recognizable raw field structure.

Zero rows does not by itself prove the connector is down
  • Check the vendor string first. Drop the filter and run | comp count() as n by _vendor, _product | sort desc n to learn the exact spelling the tenant uses, then pin the filter to that literal value. The partial match | filter _vendor contains "entinel" is a deliberate hedge for first-run discovery, because the documentation does not publish the vendor string or state whether contains is case sensitive. Do not leave it in a saved query or correlation rule.
  • Check the raw dataset, created independently of XDM mapping. dataset = sentinelone_deep_visibility_raw | sort desc _time | limit 20. Raw rows with no xdr_data rows means collection works and mapping is the problem, so skip to Step 6. No raw rows means collection is the problem.
  • Check the data source. Collector status and credentials for SentinelOne - Deep Visibility, then the upstream chain: Cloud Funnel Telemetry Streaming still enabled, Query Filters not over-narrowed, S3 objects still being written, SQS notifications firing, IAM access key or assumed role still valid.
  • Confirm which path the tenant is on before hunting the wrong UI: Standard Collector, pre-July-26-2026 content pack, or post-July-26-2026 connector.
2

Establish the 7-day volume trend

config timeframe = 7d
| dataset = xdr_data
| filter _vendor = "SentinelOne"
| fields _time, _vendor
| bin _time span = 1d
| comp count() as event_count by _time
| sort asc _time
| view graph type = line xaxis = _time yaxis = event_count
Healthy

A flat or predictably cyclical line. Any day at zero or well below baseline is a forwarding gap; correlate the date against Step 4 health records and change tickets for Cloud Funnel, AWS credentials, or agent-group edits. Cross-check bytes as well as counts with the Part 4 queries, because event count and billed volume can move in opposite directions.

3

Find the volume concentration

config timeframe = 7d
| dataset = xdr_data
| filter _vendor = "SentinelOne"
| comp count() as event_count by _product, event_type
| sort desc event_count
| view graph type = column subtype = grouped xaxis = event_type yaxis = event_count series = _product
Healthy

Volume spread across classes with no single class dominating unexpectedly. High counts on DNS, network, file, or process classes are the primary reduction candidates. Run the Part 2 blast-radius check before proposing a cut, and remember BIOC rules filter on event_type against xdr_data.

4

Pull collector health records for this feed

config timeframe = 7d
| dataset = collection_auditing
| filter lowercase(collector_type) contains "sentinelone"
    or lowercase(description) contains "sentinelone"
| fields _time as time,
         collector_host_name as collector_name,
         collector_type,
         classification as issue_name,
         description as issue_description
Healthy

No connectivity, authentication, or delay classifications in the window. Treat classification strings as tenant-specific and confirm which values exist with | comp count() as n by classification. Pair with the Part 4.1 health-issue query and the built-in ingestion-health mechanism.

5

Measure freshness (latency)

config timeframe = 7d
| dataset = xdr_data
| filter _vendor = "SentinelOne"
| alter delay_sec = timestamp_diff(insert_timestamp, _time, "SECOND")
| bin _time span = 1d
| comp avg(delay_sec) as avg_delay_seconds by _product, _time
| sort desc avg_delay_seconds
| view graph type = line xaxis = _time yaxis = avg_delay_seconds series = _product
Healthy

A stable average well under 10 minutes. Sustained averages above roughly 600 seconds point to the S3 and SQS path rather than XSIAM: oversized objects, backlogged SQS, or throttling. Check the documented file constraints first, and confirm the bucket lifecycle retains at least 7 days so a backlog does not age out before collection catches up.

6

Detect normalization and parsing gaps

config timeframe = 7d
| dataset = xdr_data
| filter _vendor = "SentinelOne"
    and (event_type = null or actor_effective_username = null)
| fields _product, event_type, actor_effective_username
| comp count() as gap_count by _product
| view graph type = column subtype = grouped xaxis = _product yaxis = gap_count
Healthy

A low and explainable gap count. Read the result carefully: a null username is normal for many machine-originated events, while a null event_type is the real signal, because those events are searchable but not normalized, so Analytics, IOC, and BIOC issues cannot be raised on them and only Correlation Rule issues can. A high event_type-null count is the trigger to review parsing and XDM mapping, not to suppress anything.

7

Check whether the problem is systemic

config timeframe = 7d
| dataset = collection_auditing
| comp count() as occurrence_count by collector_type, classification
| sort desc occurrence_count
| view graph type = column subtype = stacked xaxis = collector_type yaxis = occurrence_count series = classification
Healthy

SentinelOne not over-represented relative to other collectors. If the same classifications dominate across collector types, stop tuning this feed and treat it as a platform or network issue.

8

Review parsing rules against the findings

Use this checklist once Steps 1 and 6 confirm data is arriving but not fully normalized.

1. Map to XDM before enriching. Start every rule by mapping SentinelOne native fields to XDM targets, then add enrichment.

SentinelOne fieldXDM target
src_ip / srcIpxdm.network.client.ipv4
dst_ip / dstIpxdm.network.server.ipv4
username / userxdm.source.user.username
hostname / agentComputerNamexdm.source.host.hostname
threatNamexdm.alert.name
sha256 / fileSha256xdm.target.file.sha256
eventTypexdm.event.type

Validate each target against the tenant's XDM schema before committing; field availability differs by dataset and version. unverified against a published mapping table

2. Handle field-name variability, but in the right layer. correction Field names do vary across Deep Visibility, Alerts, and Activity log types, so coalesce(src_username, actor_username, user_name) is sound logic — but it is not usable in a Parsing Rule. XQLp permits only parse_timestamp, parse_epoch, and regexcapture as functions, and only the alter, fields, filter, and join stages plus call. Express the variability as separate RULE sections per log type invoked with [rule:ruleName], or handle coalesce in XDM Data Model Rules and XQL queries instead.

3. There is no Add Drop Rule button. correction Nothing named Settings → Parsing Rules → Add Drop Rule appears in the documentation. Reduction is a filter that yields no rows, or a rule-group no-match policy set to drop, in the editor reached with View/Edit on Configurations → Data Management. The drop targets themselves remain correct candidates: resolved DNS from known internal resolvers, network events where both source and destination are RFC1918 with no threat signal, and repetitive scheduled-task creation from approved deployment tooling. Since IN accepts only a literal list, resolver and tool allowlists belong in CONST or a lookup joined with join inner.

4. Scoping is mostly automatic. Parsing Rules are bound to a specific vendor and product, so a rule cannot leak across vendors the way a query can. Use filter on product-distinguishing fields only when one vendor and product pair carries multiple log shapes, and remember an XQLp statement never begins with a dataset or preset selection.

5. Test against diverse samples before activating. Use at least three samples: a Threat event, a Deep Visibility process event, and a Deep Visibility network event. Acceptance criterion: event_type is never null in the output. Re-run Step 6 after activation to confirm the gap count fell.

6. Version and comment every rule. C-style comments are supported anywhere in the file, and every statement must end with a semicolon. Use a fixed header block:

// Rule: SentinelOne Deep Visibility - Network Events
// Version: 1.2 | Last Updated: 2026-09-11
// Owner: SOC Engineering
// Purpose: Normalize netconn events; drops internal-only flows

7. Extend, do not overwrite. If the SentinelOne content pack ships parsing logic, add an EXTEND section so Marketplace updates do not erase your changes. Editing Parsing Rules requires Cortex Account Administrator or Instance Administrator, so schedule the change with whoever holds that role.

9

Re-measure and record

Re-run Steps 2, 3, 5, and 6 plus the Part 4 byte-volume queries after every change, and log each change with date, owner, rule or filter touched, measured before and after volume, and the detections checked for blast radius. That record is what makes the next reduction conversation fast instead of speculative.

Before You Commit

Open Items to Verify in the Tenant

Each of these changes a recommendation. None should be assumed in front of a customer.

  • Whether SentinelOne group-based policy can suppress forwarding independently of Cloud Funnel. unverified
  • Whether the customer's SentinelOne version exposes a console path equivalent to “Deep Visibility → Ingestion Policy” with trusted-parent-process suppression. unverified
  • Whether a severity floor can be applied at the telemetry-forwarding layer; on the integration path it is a documented parameter. unverified for Cloud Funnel
  • Whether the tenant was onboarded before or after July 26, 2026, which decides between the content pack and connector paths.
  • The actual event-class field name in the tenant's sentinelone_deep_visibility_raw schema, since Cloud Funnel v1 and v2 use different naming conventions. Validate every Part 4 query beyond 4.1, 4.2, and 4.5 against the live schema before reuse.
  • Whether collection_auditing exists in this tenant and which classification values it emits. unverified
  • Whether insert_timestamp is queryable on xdr_data for the latency calculation in Part 7, Step 5. unverified
  • The exact _vendor and _product strings the tenant assigns to the SentinelOne feed, since a prior check returned zero rows for _vendor = "SentinelOne".
  • Whether the customer already licenses Cribl Stream, and whether their SentinelOne Cloud Funnel pack version supports their current Cloud Funnel schema version.
  • Which XSIAM license tier is in play, since cloud_audit_log BIOC use requires Cortex XSIAM Pro per GB.

Provenance

Sources

Product behavior traces to Palo Alto Networks Cortex documentation. Pipeline behavior traces to Cribl documentation. Community patterns are labeled as such.

Continue