Skip to main content
emnode
Monitoring

Switch low-value tables to the Basic logs plan

One capability across every Log Analytics workspace: keep the verbose, high-volume tables you only ever search during an incident on the discounted Basic plan, so the budget you save funds the analytics-grade visibility that actually shortens your mean time to detect and resolve.

14 min·10 sections·AZURE

Last reviewed

Basic logs table plans: the basics

What does the wrong table plan actually cost you?

A Log Analytics workspace charges you for two things that pull in opposite directions: ingesting data, and being able to query it. The Analytics plan, the default for almost every table, is built for continuous monitoring, real-time alerting and interactive multi-table analysis, and you pay an analytics-grade ingestion rate for that capability. The Basic plan is built for the opposite case: high-volume, verbose logs you rarely touch but occasionally need during an incident or an audit. Basic ingestion is charged at a much lower rate than Analytics, with the trade that interactive queries are limited to the last 30 days and you pay a small per-gigabyte charge for the data each query scans.

The mistake is not having the data, it is paying the analytics rate for data nobody analyses. A noisy ContainerLogV2 stream, a verbose firewall feed, or a custom application-trace table can quietly become the largest line on the workspace bill while never appearing in an alert rule or a dashboard. Azure Advisor watches for exactly this pattern and raises the recommendation 'Consider configuring the low-cost Basic logs plan on selected tables' (recommendation ID 805748e7-8764-49fe-b5b2-7fff63daaac2) when it sees meaningful ingestion into tables that are eligible for Basic but still on Analytics.

The work is to separate the tables you genuinely analyse from the tables you only ever search. Anything that feeds an alert, a workbook or a scheduled query needs to stay on Analytics. Anything that is verbose, voluminous and only read when something has already gone wrong is a candidate for Basic. You can switch a table between Analytics and Basic, and the change takes effect on existing data immediately, so this is a reversible, low-risk optimisation rather than a one-way door.

In this lesson you will learn how Azure Monitor table plans price ingestion and querying differently, how to find the high-volume, low-value tables that belong on the Basic plan, and how to switch them safely without losing data or breaking an alert. You will see how Azure Advisor surfaces the opportunity, what the Basic plan gives up in exchange for the lower rate, and how to lock the right plan in with infrastructure as code.

Fun fact

The table nobody queried that doubled the bill

Log Analytics costs are dominated by a handful of chatty tables. It is common for a single verbose source, a container log stream, a network-flow feed, a custom application trace, to account for the majority of a workspace's ingestion while never once appearing in an alert rule or a dashboard. Because the data is genuinely useful during an incident, nobody wants to drop it, so it stays on the analytics plan at the premium rate forever. Azure Advisor exists in part to catch exactly this: it flags the eligible tables ingesting enough volume to make the Basic plan worth it, turning an invisible standing cost into a one-command fix that keeps every byte of the data.

Finding the tables that belong on Basic

Priya runs the platform team at a SaaS company whose Log Analytics bill has roughly doubled over two quarters as the product scaled out across more clusters. Azure Advisor is showing the recommendation to consider the Basic logs plan on selected tables, and the finance partner wants to know whether acting on it loses any visibility.

Rather than guess, Priya starts by asking the workspace which tables are actually driving the volume, so the verbose, search-only data can be told apart from the signals that feed alerts before anything is changed.

List which tables are on which plan today. The eligible, high-volume tables still on Analytics are the candidates Advisor is pointing at.

$ az monitor log-analytics workspace table list --resource-group obs-rg --workspace-name obs-prod --query "[?properties.plan=='Analytics'].{table:name, plan:properties.plan}" -o table
Table Plan
-------------------- ---------
ContainerLogV2 Analytics
AppTraces Analytics
SecurityEvent Analytics
# ContainerLogV2 is verbose, eligible and never alerted on: a Basic candidate.

Pair this list with a Usage-table query (summarise _BilledSize by table) to rank candidates by volume. A high-volume, eligible table that feeds no alert is the highest-value switch.

How the Basic plan changes ingestion, querying and retentiondeep dive

Each table in a Log Analytics workspace carries a plan property set to either Analytics or Basic. The plan changes three things. Ingestion: Basic is charged at a substantially lower per-gigabyte rate than Analytics, which is the whole point. Querying: on a Basic table, interactive queries reach back over the last 30 days and you pay a per-gigabyte charge for the data each query scans, where Analytics queries are included at no extra charge. Retention: both plans include 30 days, and you can extend total retention well beyond that on either, so moving to Basic does not shorten how long the data is kept.

Basic trades query power for the lower rate, and the limits are specific. You cannot run alert rules against a Basic table, so anything that feeds an alert must stay on Analytics. The Kusto surface is reduced: operators that join across tables such as join, find, search and externaldata are not supported, union and lookup are limited to a handful of Analytics tables, and user-defined functions are not available. To reach data older than 30 days on a Basic table you run a search job, which executes the query against the older data and writes the results into a new table you can then query normally.

Not every table is eligible. The Basic plan applies to tables created through the data collection rule based logs ingestion API, plus specific platform tables such as ContainerLogV2 and AppTraces; tables like AzureDiagnostics are not eligible. This is why Advisor names selected tables rather than the whole workspace. Crucially, you can switch an eligible table between Analytics and Basic and the change takes effect on existing data immediately, so the optimisation is reversible: if a table you moved turns out to need an alert, switch it back.

What is the impact of leaving the wrong plan in place?

The direct impact is a recurring overcharge. Every verbose table left on Analytics that nobody analyses is paying the premium ingestion rate to store data that is only ever searched. Because log volume tends to grow as the estate grows, that overcharge compounds quietly, and it is precisely the cost that Advisor's Basic-plan recommendation is designed to remove without losing a single record.

The second-order impact is on visibility itself. An observability budget is finite, and money spent overpaying to ingest unread data is money not spent on the analytics-grade retention and alerting that shorten your mean time to detect and resolve. Left unmanaged, the bill grows while the pressure to control it pushes teams toward the worst possible response: logging less, which trades a known cost for unknown blind spots. The plan split is the way out, because it lowers the cost of the noisy data so you can afford to see clearly where it matters.

There is a real but bounded risk in moving the wrong table. If you switch a table that does feed an alert or needs cross-table joins, those break, because Basic does not support alert rules or the full Kusto surface. The mitigation is to check what depends on a table before moving it, and because the switch is reversible with immediate effect, a mistake costs a switch back rather than lost data.

How do you move tables to Basic safely?

Treat this as one loop rather than a blanket switch. The order matters: confirm what depends on a table before you change its plan, so you never move a table that feeds an alert or a cross-table query.

1. Rank the tables by ingestion volume

Query the Usage table to summarise _BilledSize by table over the last month and sort descending. The tables at the top of that list are where the money is, and they are the only ones worth examining. Cross-reference with the Advisor recommendation, which has already filtered to the eligible, high-volume candidates.

2. Separate analysed tables from search-only tables

For each high-volume candidate, check what depends on it: does it feed an alert rule, a workbook, a scheduled query or a cross-table join? Anything that does must stay on Analytics. What is left, verbose data read only during incidents or audits, is the genuine Basic candidate. Confirm each candidate is eligible for the Basic plan before going further.

3. Switch the eligible tables to Basic

Set the table plan to Basic with a single command per table. The change applies to existing data immediately, retention is preserved, and nothing is deleted. The data stays interactively queryable for the last 30 days, with search jobs available to reach older data when an investigation needs it.

4. Lock the plan in with infrastructure as code

Encode the intended plan on each table in your Bicep or ARM templates so a redeployment cannot silently revert a Basic table to Analytics and reintroduce the overcharge. Review the split when new high-volume tables appear, treating the table plan as a deliberate, version-controlled choice rather than a default.

# 1. Find the highest-volume tables in the workspace over the last 30 days.
az monitor log-analytics query \
  --workspace "<workspace-guid>" \
  --analytics-query "Usage | where TimeGenerated > ago(30d) | summarize GB=sum(_BilledSize)/1024/1024/1024 by DataType | sort by GB desc" \
  -o table

# 2. Switch an eligible, verbose, search-only table to the Basic plan.
#    Applies to existing data immediately; retention is preserved; nothing is deleted.
az monitor log-analytics workspace table update \
  --resource-group obs-rg \
  --workspace-name obs-prod \
  --name ContainerLogV2 \
  --plan Basic

# To reverse it, run the same command with --plan Analytics. The switch is immediate.

Quick quiz

Question 1 of 5

Azure Advisor recommends configuring the Basic logs plan on selected tables. What does moving an eligible table from Analytics to Basic actually change?

You can now treat Log Analytics table plans as a deliberate capability rather than a default: rank tables by ingestion volume, separate the signals you analyse from the verbose data you only search, move the eligible search-only tables to the Basic plan to remove the premium without losing a record, and pin the choice in infrastructure as code so it cannot drift. The data stays fully searchable, the switch is reversible, and the saving funds the visibility that actually shortens incidents.

Back to the library