This repository contains a curated collection of SentinelOne Singularity Data Lake (SDL) / Dataset dashboards, expressed as JSON, for common data sources (for example Fastly CDN, Okta, O365, Fortinet).
Each dashboard follows a consistent query style, layout approach, and performance guardrails, so you can safely reuse and extend them.
A typical structure looks like:
.
├── README.md # This file – global conventions and usage
├── fastly/
│ ├── README.md # Fastly-specific docs
│ └── fastly-cdn-dashboard.json
├── okta/
│ ├── README.md
│ └── okta-auth-dashboard.json
└── o365/
├── README.md
└── o365-alerts-dashboard.json
- The root README (this file) documents shared conventions and how to work with dashboard JSON in general.
- Each subfolder README documents:
- Data‑source–specific assumptions (fields, normalization, OCSF mapping).
- What tabs/widgets exist and what questions they answer.
- Any quirks for that data source.
To use dashboards from this repo you need:
- A SentinelOne Singularity Data Lake / Dataset environment.
- Relevant data sources ingested and normalized (ideally OCSF‑aligned where appropriate).
- Permissions to view and manage custom dashboards.
- For data that should appear in the XDR view (and therefore in these dashboards), each event must include
dataSource.name,dataSource.vendor, anddataSource.category. Dashboards that rely on XDR data are intended to be used with the XDR or ALL view selected in the console.
For dashboard JSON behavior and syntax, see:
-
Dataset / SDL public docs (Scalyr):
- Help home: https://app.scalyr.com/help
- Power Queries: https://app.scalyr.com/help/power-queries
- Dashboards & JSON: https://app.scalyr.com/help/dashboards
- Regex: https://app.scalyr.com/help/regex
-
Custom dashboards – quick reference (official SentinelOne doc):
https://community.sentinelone.com/s/article/000006449 -
Custom dashboard panels JSON – details on
graphStyleand panel JSON:
https://community.sentinelone.com/s/article/000006458
For any JSON file in this repo (for example fastly/fastly-cdn-dashboard.json):
-
Open SDL Dashboards
- In the SentinelOne console, go to Singularity Data Lake → Dashboards.
-
Create or open a custom dashboard
- Click New Dashboard to create a fresh one, or open an existing custom dashboard you want to overwrite/extend.
-
Edit JSON
- From the dashboard menu, choose Edit JSON.
- Open the JSON file from this repo.
- Copy its entire contents and paste into the SDL JSON editor, replacing or merging as needed.
-
Save and validate
- Save the dashboard.
- Select an appropriate time range (for example Last 4 hours or Last 24 hours).
- If needed, adjust filters (for example
dataSource.name = "Fastly"or similar) to scope to the intended data source.
All dashboards in this repo are designed to be:
-
Schema‑correct for SDL:
version: "1.0.1"configType: "TABBED"tabsarray withgraphsper tab (no top‑levelwidgetsarray).
-
Time‑aware:
- Always use
timestampas the canonical time field in time‑series charts. - Use
group ... by timestamp = timebucket("...")(notimechart).
- Always use
-
Multiplot‑safe:
- For multi‑series line/area charts:
- Group by
timestamp = timebucket("..."), some_dimension. - Sort by
timestamp(and often-count()). - End the query with
transposeso each series renders as its own plot, as recommended in the SDL Query guide.
- Group by
- For multi‑series line/area charts:
-
Performance‑conscious:
- All table widgets end their queries with
| limit 100(or lower if needed) to keep dashboards responsive. - Queries prefer explicit
groupaggregates over raw row streams for time‑series graphs. - Avoid unnecessarily broad wildcards or regex where exact matches or
containswill do; see internal “Tips for faster queries and dashboards” for more guidance.
- All table widgets end their queries with
-
Readable PowerQuery:
-
Use pipe‑chained queries:
search/filter | group ... | let ... | columns ... | sort ... [| transpose] [| limit ...] -
Math happens outside
groupvialet:... | group raw_bytes = sum(network.bytes_out) | let GB = raw_bytes / 1073741824.0 | columns GB, raw_bytes -
Conditionals use the ternary operator, not
if(...):let cache_hit = http_response.cache_status = "HIT" ? "HIT" : "MISS"
-
Where a dashboard targets security or alert data (for example OCSF alerts, indicators):
-
Queries may use fields like:
event.category = "indicators"dataSource.category = "security"dataSource.name = "alert"
-
Widgets aim to answer security questions first (alert volumes, severities, indicators, affected entities) rather than generic HTTP‑style metrics.
Each subfolder README will call out any additional security‑specific assumptions for that source.
To add a new data‑source dashboard to this repo:
-
Prototype in SDL
- Build panels using Graphs / PowerQueries until the queries and visuals look right.
- Use Save to Dashboard to create or update a custom dashboard.
-
Export JSON
- From the dashboard, open Edit JSON and copy the full JSON.
-
Create a new subfolder
- Add a new folder (for example
nginx/). - Save the JSON as
<source>-dashboard.json. - Add a
README.mdin that folder describing:- Required fields.
- Purpose of each tab.
- Any data‑source quirks or filters.
- Add a new folder (for example
-
Follow repo conventions
- Ensure:
version = "1.0.1"configType = "TABBED"- Time‑series queries use
timestamp = timebucket("..."). - Multiplot charts end with
transpose. - Tables end with
limit 100by default.
- Ensure:
-
Dataset / SDL public docs (Scalyr):
-
Custom dashboards – quick reference:
https://community.sentinelone.com/s/article/000006449 -
Custom dashboard panels JSON:
https://community.sentinelone.com/s/article/000006458