Analytics Logs is Microsoft Sentinel’s full-featured tier: analytics rules, any query scope, query cost included in the ingestion price, and up to 90 days of interactive retention at no additional charge. Basic Logs cuts the ingestion price to under a quarter of Analytics, in exchange for per-GB query charges, a fixed 30-day interactive window, workspace-only query scope, and no analytics rules. Since September 2026, Basic tables support full KQL, including joins across tables. Put detection data in Analytics. Put high-volume context data in Basic, or in the data lake tier if your workspace is onboarded to it.
Microsoft Sentinel bills mainly by the GB you ingest, and every table in your workspace sits on a plan that sets the price per GB and what you can do with the data afterward. This guide compares the two plans most SOC teams weigh against each other, with current limits, list prices, and the commands to act on the decision. It also covers where Basic Logs fits next to the newer data lake tier, and how NXLog Agent assigns the tier on the host, before the data reaches Microsoft Azure.
What Microsoft Sentinel’s log tiers are, and why the names don’t match
Microsoft Sentinel stores its data in a Microsoft Azure Monitor Log Analytics workspace. Every table in that workspace has a table plan, and Microsoft Azure Monitor offers three plans: Analytics, Basic, and Auxiliary / Lake.
-
Analytics Logs is the default plan for every Microsoft Azure table. Microsoft positions it for high-value data used in continuous monitoring and real-time detection. You get full KQL, alerts, insights, dashboards, restore, export, and query performance tuned for interactive use.
-
Basic Logs is the reduced-cost plan for medium-touch troubleshooting and incident response data. It supports DCR-based custom tables and the Microsoft Azure tables marked for Basic in Microsoft’s table feature support matrix. Microsoft bills queries per GB scanned, and interactive access is fixed at 30 days.
-
Auxiliary / Lake is the minimal-cost plan for low-touch, verbose audit and compliance data. Queries are slower, alerts don’t run on it, and it applies to DCR-based custom tables plus the Microsoft Azure tables marked for Auxiliary in the same matrix.
The names get confusing because Microsoft Sentinel in the Microsoft Defender portal uses a second vocabulary: the analytics tier and the data lake tier. In a workspace onboarded to the Microsoft Sentinel data lake, Auxiliary tables become part of the data lake tier. Basic Logs tables are the odd one out: you can view them in the Microsoft Defender portal, but you manage them only from the Log Analytics workspace.
This article uses the Microsoft Azure Monitor plan names because those are the values the CLI, PowerShell, and REST API accept.
Basic Logs vs Analytics Logs side by side
Every row below comes from Microsoft’s table feature comparison, the Basic and Auxiliary query documentation, and the table plan page, all checked on 5 October 2026.
| Feature | Analytics Logs | Basic Logs |
|---|---|---|
Best for |
Continuous monitoring, real-time detection, performance analytics |
Troubleshooting and incident response context |
Supported tables |
All tables |
DCR-based custom tables and the Microsoft Azure tables marked for Basic |
KQL |
Full, multi-table |
Full, multi-table, including cross-workspace queries with |
Query scope |
Workspace or resource |
Workspace only |
Interactive retention |
30 days by default, free extension to 90 days for Microsoft Sentinel, extendable to two years |
Fixed at 30 days |
Total retention |
Up to 12 years |
Up to 12 years |
Microsoft Sentinel analytics rules |
Yes |
No, see the next section |
Search jobs and summary rules |
Yes |
Yes, summary rule KQL limited to a single table |
Restore, data export, workspace replication |
Yes |
Yes |
Visualization |
Dashboards, Workbooks, Grafana, Microsoft Power BI |
Workbooks and Grafana. Microsoft Azure Monitor Dashboards and Power BI cannot read Basic tables |
Plan changes |
Any time, one switch per table per week |
Any time, one switch per table per week |
What each tier costs: Microsoft’s list meters
Microsoft publishes list prices through the Microsoft Azure Retail Prices API, the same data behind the Microsoft Sentinel pricing page and the Microsoft Azure Monitor pricing page. We pulled the figures below on 5 October 2026 for East US, pay-as-you-go, USD, on Microsoft’s simplified pricing tier. Prices vary by region and agreement, so confirm with the Microsoft Sentinel cost estimator before budgeting.
| Meter (Microsoft, East US, October 2026) | List price |
|---|---|
Microsoft Sentinel pay-as-you-go analysis (Analytics Logs, simplified tier) |
$4.30 per GB ingested |
Microsoft Sentinel Basic Logs analysis (simplified tier) |
$1.00 per GB ingested |
Basic Logs and search queries, data scanned |
$0.005 per GB scanned |
Analytics Logs interactive retention beyond the free window |
$0.10 per GB per month |
Microsoft Sentinel 100 GB per day commitment tier |
$296 per day, or $2.96 per GB effective |
Microsoft Sentinel data lake ingestion |
$0.05 per GB |
Microsoft Sentinel data lake data processing |
$0.10 per GB |
Microsoft Sentinel data lake storage |
$0.026 per GB per month, billed at 6:1 compression |
Microsoft Sentinel data lake query |
$0.005 per GB scanned |
Two details from the Microsoft Sentinel billing documentation matter here. On the simplified pricing tier, Basic Logs bill as a single Microsoft Sentinel meter named Basic Logs Analysis; classic-pricing workspaces pay a Microsoft Sentinel analysis meter plus a Microsoft Azure Monitor ingestion meter instead. Microsoft Sentinel workspaces retain ingested data at no charge for the first 90 days, which is why the Analytics interactive window can be 90 days rather than the plain Log Analytics default of 30. Microsoft describes 30 days as the default with a free extension to 90, so check that each table’s retention is set to 90.
One caveat on the lake meters. The Microsoft Sentinel pricing page still carries a footnote that calls lake data processing free "during preview". The lake has been generally available since 30 September 2025 and the Retail Prices API bills processing at $0.10 per GB, so we use the API figure.
The break-even math
At list price, Analytics costs $3.30 per GB more than Basic to ingest, and Basic charges $0.005 per GB scanned. You would need to scan each ingested GB about 660 times before Basic costs more than Analytics. That is our calculation from Microsoft’s meters, not a Microsoft figure, and it ignores the retention difference. For any table that analysts query occasionally, Basic is the cheaper plan.
A worked example
Take a firewall feed of 100 GB per day for 30 days, or 3,000 GB, with 40 investigations a month that each scan seven days of data. This is our arithmetic on Microsoft’s East US list meters.
| Cost line | Analytics Logs | Basic Logs | Data lake tier |
|---|---|---|---|
Ingestion |
3,000 GB x $4.30 = $12,900 |
3,000 GB x $1.00 = $3,000 |
3,000 GB x $0.05 = $150 |
Data processing |
Included |
Not applicable |
3,000 GB x $0.10 = $300 |
Storage, first month |
Included for 90 days |
Included for 30 days |
500 GB compressed x $0.026 = $13 |
Queries |
Included |
28,000 GB scanned x $0.005 = $140 |
28,000 GB scanned x $0.005 = $140 |
Month total |
$12,900 |
$3,140 |
$603 |
The data lake column is the cheapest by a wide margin and has the narrowest feature set. Lake tier data isn’t available for real-time analytics or hunting, and Microsoft describes lake queries as slower and not optimized for real-time analysis. Basic keeps a 30-day interactive window with optimized query performance. In this example, that window costs $2,537 more per month than the lake.
What you give up with Basic Logs
The cost table is the easy part. These seven limits matter most after the switch.
- No analytics rules
-
The Microsoft Defender XDR documentation states that in custom detection and analytics rule creation, you can only query data ingested as analytics logs, not as basic or auxiliary logs, and that rule creation won’t proceed otherwise. Before you switch a table, re-point or retire every rule that reads it. Microsoft does not document a way for a rule to keep running against Basic data. Microsoft Azure Monitor alerting on Basic tables is limited to simple log alerts, which evaluate each row individually rather than aggregating over a window.
- A 30-day interactive window
-
A query that includes Basic tables can cover the past 30 days. Older data sits in long-term retention and needs a search job or restore. The
retentionInDaysproperty on a Basic table is read-only, so you can’t buy a longer interactive period on this plan. - Workspace scope only
-
Basic tables support full KQL, but not resource scope, resource-context queries, the
resource()expression, cross-service queries, orexternaldata. Queries have to start from the workspace, and cross-workspace hunting usesworkspace(). Power BI and Microsoft Azure Monitor Dashboards can’t read Basic tables at all, so a report built on either has to stay on Analytics. - No purge
-
You can’t purge personal data from Basic and Auxiliary tables. If a table may receive data subject to erasure requests, keep it on Analytics or don’t ingest that field.
- Two concurrent queries per user
-
One analyst working interactively won’t notice. A shared workbook that refreshes several panels at once under one identity will queue.
- Not every table qualifies
-
All DCR-based custom tables support Basic, but only the Microsoft Azure tables marked for it in Microsoft’s feature support matrix do. As of October 2026,
CommonSecurityLogandSecurityEventqualify, whileSyslogandWindowsEventsupport Auxiliary but not Basic. Microsoft adds table support over time, so check the matrix before you plan a migration. - One switch per week
-
Microsoft limits plan changes to one per table per week, so a wrong move means seven days until you can change it again. Verify on a test workspace first.
Which tier for which log source
Microsoft’s guidance splits data into two categories. Primary security data feeds detection rules, hunting, correlation, and behavior analytics, including EDR and antivirus logs, authentication logs, cloud audit trails, threat intelligence, and alerts from other systems. That belongs on Analytics. Secondary security data adds context during an investigation but rarely triggers one, such as cloud storage access logs, NetFlow, TLS/SSL certificate logs, firewall logs, proxy logs, and IoT logs.
Microsoft recommends the data lake tier for secondary data and doesn’t mention Basic. Basic remains a supported plan, and in our view it is the right fit for secondary data when you are not onboarded to the lake, or your investigators need the 30-day interactive window. Five questions settle most tables:
-
Does any analytics rule or custom detection read this table? If yes, Analytics.
-
Does anything read it through Power BI, Microsoft Azure Monitor Dashboards, or a resource-scoped query? If yes, Analytics, or rebuild that consumer on Workbooks or workspace scope.
-
Do investigations touch it more than a few hundred times per ingested GB? Unlikely, but if so, Analytics.
-
Is 30 days of interactive access enough, with search jobs for the rest? If yes, Basic qualifies.
-
Does the table support the Basic plan at all? Check the matrix before you decide.
How to set a table to Basic Logs
Microsoft Azure tables default to Analytics.
You can switch a supported table from the portal, Microsoft Azure CLI, PowerShell, or REST.
Microsoft documents all of them on the table plan configuration page.
You need Microsoft.OperationalInsights/workspaces/write and workspaces/tables/write permissions, which the Log Analytics Contributor role provides.
Microsoft Azure CLI:
$ az monitor log-analytics workspace table update \
--subscription "<SubscriptionId>" \
--resource-group "rg-secops" \
--workspace-name "law-sentinel-prod" \
--name "CommonSecurityLog" \
--plan Basic
Microsoft Azure PowerShell:
> Update-AzOperationalInsightsTable `
-ResourceGroupName "rg-secops" `
-WorkspaceName "law-sentinel-prod" `
-TableName "CommonSecurityLog" `
-Plan Basic
REST, using the Tables - Update operation:
PATCH https://management.azure.com/subscriptions/<SubscriptionId>/resourceGroups/rg-secops/providers/Microsoft.OperationalInsights/workspaces/law-sentinel-prod/tables/CommonSecurityLog?api-version=2026-03-01
Authorization: Bearer <token>
Content-Type: application/json
{
"properties": {
"plan": "Basic"
}
}
Three things happen on the switch.
Data older than 30 days is treated as long-term retention, although total retention doesn’t change.
Queries, including summary rules reading the table, start billing per GB scanned.
And summary rules using resource query scope break, because Basic tables only support workspace scope.
Switch back with --plan Analytics, but remember the one-week limit.
How to query Basic tables
Querying a Basic table works like querying any other table.
Microsoft rewrote its Basic and Auxiliary query documentation in September 2026: queries that include these tables now support full KQL across multiple tables, so join and union to other tables now work.
If you read about single-table limits in older guides, including Microsoft’s own, they no longer apply to interactive queries.
Two constraints remain: workspace scope, and no data past 30 days.
CommonSecurityLog
| where DeviceVendor == "Palo Alto Networks"
| where DestinationIP == "203.0.113.42"
| summarize Connections = count(), Bytes = sum(SentBytes) by SourceIP, bin(TimeGenerated, 1h)
| order by Connections desc
Enriching Basic data with an Analytics table works the same way it does between Analytics tables. This query adds the last successful sign-in for each source IP:
CommonSecurityLog
| where DestinationIP == "203.0.113.42"
| project TimeGenerated, SourceIP, DestinationPort, DeviceAction
| lookup kind=leftouter (
SigninLogs
| where ResultType == "0"
| summarize LastSignIn = max(TimeGenerated) by IPAddress, UserPrincipalName
) on $left.SourceIP == $right.IPAddress
Microsoft bills a mixed query on the data it scans in the Basic and Auxiliary tables. Analytics tables within their retention period don’t add to the scanned volume, so joining a small Basic window to a large Analytics table stays cheap.
If you still want alerting on Basic data, the documented route is a summary rule.
It aggregates the Basic table on a schedule into a custom Analytics table that detections can read.
Summary rules are the one place the old limits still apply: Microsoft’s summary rule documentation says a rule reading a Basic table must stay on that single table, joining Analytics tables only through lookup.
The rule bills on data scanned plus ingestion of the summarized rows.
$ az rest --method put \
--url "/subscriptions/<SubscriptionId>/resourceGroups/rg-secops/providers/Microsoft.OperationalInsights/workspaces/law-sentinel-prod/summaryLogs/fw-denies-hourly?api-version=2025-07-01" \
--body @body.json
{
"properties": {
"ruleType": "User",
"description": "Hourly denied connections per source, from the Basic CommonSecurityLog table",
"ruleDefinition": {
"query": "CommonSecurityLog | where DeviceAction == 'deny' | summarize Denies = count(), Targets = dcount(DestinationIP) by SourceIP",
"binSize": 60,
"destinationTable": "FwDeniesHourly_CL"
}
}
}
For anything past the 30-day window, run a search job.
It scans Basic or long-term data asynchronously and writes matches to a new _SRCH Analytics table you can query normally:
$ az monitor log-analytics workspace table search-job create \
--resource-group "rg-secops" \
--workspace-name "law-sentinel-prod" \
--name "FwSuspectIP_SRCH" \
--search-query "CommonSecurityLog | where DestinationIP == '203.0.113.42'" \
--start-search-time "2026-06-01T00:00:00.000Z" \
--end-search-time "2026-08-31T23:59:59.000Z" \
--limit 1000000 \
--no-wait
Microsoft charges search jobs for the data they scan plus ingestion of the matching records they write, so scope the time range tightly.
Where NXLog Agent fits: route each event to its tier at the source
Table plans set the price per GB. Filtering and routing at the agent set how many GB you ingest and which table each event lands in. The two controls multiply: a Basic table receiving a third of the original volume costs about 8% of the same feed on Analytics at full volume.
Microsoft’s ingestion-time option is a KQL transformation in a data collection rule. It works, but read the cost rules: if a transformation drops more than 50% of incoming data bound for an Analytics or Basic table, Microsoft charges for the filtered volume above 50%. Microsoft Sentinel workspaces are exempt for Analytics tables, not for Basic. Microsoft’s own advice is to filter ingested data by other means before applying transformations, and the log collector on the host is where you do that.
NXLog Agent sends to Microsoft Sentinel through the Microsoft Azure Logs Ingestion output module, which uses the Logs Ingestion API with a data collection endpoint, a DCR, and a stream name. The agent evaluates every event before sending, so one Windows Security channel can feed two custom tables: detection-relevant event IDs go to a table on the Analytics plan, and everything else goes to a table on the Basic plan. Both are DCR-based custom tables, so both plans are supported.
The configuration below combines the Microsoft Azure Logs Ingestion output module setup from NXLog’s Microsoft Sentinel integration guide with the two-output filtering pattern from the NXLog documentation: one input, two outputs, one route.
Each output uses an Exec block to drop the events it isn’t responsible for, which keeps flow control intact.
A single DCR declares both streams, Custom-WinSecDetect and Custom-WinSecContext, each mapped to its own destination table.
<Extension json>
Module xm_json
</Extension>
<Input windows_security>
Module im_msvistalog
<QueryXML>
<QueryList>
<Query Id='0'>
<Select Path='Security'>*</Select>
</Query>
</QueryList>
</QueryXML>
</Input>
<Output sentinel_analytics> (1)
Module om_azuremonitor
ClientId <ms_entra_app_id>
TenantId <ms_entra_tenant_id>
ClientSecret <ms_entra_app_client_secret>
URL https://<dce-name>.<region>-1.ingest.monitor.azure.com
DcrImmutableId dcr-<immutable_id>
StreamName Custom-WinSecDetect
<Exec>
if ($EventID NOT IN (1102, 4624, 4625, 4648, 4672, 4688, 4697, 4698, 4720, 4728, 4732, 4756, 4769, 4776))
{
drop();
}
$output = (
'TimeGenerated' => $EventTime,
'Computer' => $Hostname,
'EventID' => $EventID,
'Channel' => $Channel,
'Provider' => $SourceName,
'Level' => $Level,
'EventData' => $Message
);
$raw_event = to_json($output);
</Exec>
</Output>
<Output sentinel_basic> (2)
Module om_azuremonitor
ClientId <ms_entra_app_id>
TenantId <ms_entra_tenant_id>
ClientSecret <ms_entra_app_client_secret>
URL https://<dce-name>.<region>-1.ingest.monitor.azure.com
DcrImmutableId dcr-<immutable_id>
StreamName Custom-WinSecContext
<Exec>
if ($EventID IN (1102, 4624, 4625, 4648, 4672, 4688, 4697, 4698, 4720, 4728, 4732, 4756, 4769, 4776))
{
drop();
}
$output = (
'TimeGenerated' => $EventTime,
'Computer' => $Hostname,
'EventID' => $EventID,
'Channel' => $Channel,
'Provider' => $SourceName,
'Level' => $Level,
'EventData' => $Message
);
$raw_event = to_json($output);
</Exec>
</Output>
<Route sentinel_tiered>
Path windows_security => sentinel_analytics, sentinel_basic
</Route>
| 1 | Sends detection-relevant events to WinSecDetect_CL (Analytics plan). |
| 2 | Sends everything else to WinSecContext_CL (Basic plan). |
Three details from the module documentation matter:
-
The JSON you send must match the structure your DCR expects, or the server discards it silently, and column names are case-sensitive.
-
Every record needs
TimeGenerated. The sample sets it from$EventTime. If you leave it out, the module adds it from$EventTime, then$EventReceivedTime, using the first one that is within 48 hours behind or 24 hours ahead of the current time. Otherwise, it falls back to the current time. -
While NXLog Agent offers a reroute() procedure to move an event to another route, it deactivates flow control and drops data if the target queue is full, so the two-output pattern is the safer choice for security logs.
You can still add a DCR transformation on the Basic stream to drop columns you never query.
KQL transformations accept single-row operators only, so where and project work, but summarize doesn’t.
Keep the heavy filtering on the agent, and the transformation stays under the 50 percent rule.
| Microsoft’s support for the HTTP Data Collector API ended on 14 September 2026. Ingestion still works for TLS 1.2 clients, but the API is out of support, and Microsoft Sentinel connectors and tables that rely on it are no longer eligible for incident support. NXLog Agent’s older Microsoft Azure Sentinel output module uses the legacy API, authenticating to Log Analytics with a workspace ID and shared key. If you’re still using it, plan to move to the Microsoft Azure Logs Ingestion output module. |
If you manage more than a handful of hosts, NXLog Platform stores these configurations centrally. Build the tiered routing once as a configuration, assign it to the agents that need it, and push updates from one place when your event ID list changes.
What changed in 2025-2026, and how it affects the choice
Four changes affect how you read the comparison above.
- Basic tables got full KQL
-
Until September 2026, Microsoft documented Basic queries as single-table, with
lookupto a handful of Analytics tables as the only way to enrich them. The current documentation supports full KQL across multiple tables and workspaces. That removes the biggest hunting objection to Basic. Analytics rules, resource scope, and the 30-day window are unchanged. - The data lake tier is the third option
-
The Microsoft Sentinel data lake bills ingestion, processing, storage, and query on separate meters. Analytics data is mirrored to the lake for the same retention period, and the lake ingestion and processing meters don’t apply to tables that keep both tiers. Microsoft’s data lake FAQ covers the older plans: Auxiliary tables become data lake tier tables and move to lake billing once you onboard, while Basic tables must go through Analytics first. Change the plan in Log Analytics, then set the data lake tier in the Microsoft Defender portal.
- Table management is moving to the Defender portal
-
For workspaces connected to Microsoft Defender, tiering and retention are managed in the Microsoft Defender portal. Microsoft Sentinel in the Microsoft Azure portal retires on 31 March 2027. Basic tables stay under Log Analytics management until you change their plan.
- Microsoft is building on the lake, not on Basic
-
The Microsoft Sentinel pricing page describes only an analytics tier and a data lake tier, and sends customers who don’t use the lake to the Microsoft Azure Monitor pricing page for search job, search query, and restore pricing. The data lake FAQ is more direct: "While Basic and Auxiliary Logs are still available, they are not being enhanced further." The September 2026 KQL change shows Basic isn’t frozen entirely, but the lake is where Microsoft points new secondary data.
Our reading: if your workspace is onboarded to the data lake, evaluate the lake tier before choosing Basic for new secondary data. It is cheaper on every meter, and it is where Microsoft is adding features. If you are not onboarded, or your investigators need the 30-day interactive window, Basic Logs is still a supported plan at under a quarter of the Analytics list price. Either way, keep detection data on Analytics and decide the tier of everything else at the agent.
Wrapping up
Ask one question per table: does a detection read it? If yes, keep it on Analytics and accept the price. If no, Basic saves about 77% against pay-as-you-go list price, or about 66% against the 100 GB per day commitment tier. The data lake tier saves more. NXLog Agent then decides which events reach the workspace at all.
Want to try tiered routing on your own Windows hosts? Start a free NXLog Platform trial and use the Microsoft Sentinel integration guide to connect your first agent. Prefer to talk through a design first? We’re happy to help through our contact page.
FAQ
- Is Basic Logs cheaper than Analytics Logs in Microsoft Sentinel?
-
Yes, on ingestion. At East US list prices pulled in October 2026, Microsoft Sentinel bills Analytics at $4.30 per GB and Basic at $1.00 per GB on the simplified pricing tier. Basic adds $0.005 per GB scanned by queries, so it costs more only if you scan each ingested GB roughly 660 times.
- Can Microsoft Sentinel analytics rules run on Basic Logs?
-
No. The Microsoft Defender XDR documentation states that analytics rules and custom detections can only query data ingested as Analytics Logs, not Basic or Auxiliary. To alert on Basic data, aggregate it into an Analytics table with a summary rule and build the rule there.
- Can you join Basic Logs tables to other tables?
-
Yes, since September 2026. Queries that include Basic tables support full KQL across multiple tables, and
workspace()for cross-workspace queries. Resource-scoped queries, theresource()expression, cross-service queries, andexternaldatastill don’t work. Summary rules reading a Basic table remain limited to that one table pluslookup. - How long is Basic Logs data retained?
-
Interactive retention on a Basic table is fixed at 30 days and cannot be extended. Total retention can be set up to 12 years. Data older than 30 days sits in long-term retention and you can reach it through a search job or restore rather than a normal query.
- Can I switch a table from Basic back to Analytics?
-
Yes. Use the portal,
az monitor log-analytics workspace table update --plan Analytics,Update-AzOperationalInsightsTable -Plan Analytics, or a REST PATCH with"plan": "Analytics". Microsoft allows one plan change per table per week. You regain the full Analytics feature set at the Analytics price. - Basic Logs vs Auxiliary Logs vs data lake tier: what is the difference?
-
Basic keeps a 30-day optimized interactive window and supports simple log alerts and restore. Auxiliary is cheaper, slower to query, and has no alerts or restore. Both plans work on DCR-based custom tables and on the Microsoft Azure tables marked for them. In lake-onboarded workspaces, Auxiliary tables are data lake tier tables billed on lake meters.
- Do Basic Logs work with Microsoft Sentinel in the Defender portal?
-
Partly. You can view Basic tables in the Microsoft Defender portal, but you can only manage their plan and retention from the Log Analytics workspace. To manage them in the Microsoft Defender portal, or to move them to the data lake tier, change the plan to Analytics first.