Ingestion anomalies: the basics
What does a data-ingestion anomaly in Azure Monitor actually look like?
A Log Analytics workspace is a pipe, and the volume of data flowing through it is rarely flat. A new diagnostic setting, a verbose logging flag shipped by accident, a chatty application restarting in a loop or an agent reconnecting after an outage can all change how much data lands in the workspace from one day to the next. An anomaly is simply that volume moving far enough from its normal shape to matter: a spike that inflates the bill, or a collapse that means a source has gone quiet and you have stopped seeing it.
Azure surfaces this in a few distinct places rather than one. Azure Advisor raises an Azure Monitor recommendation when it detects a data-ingestion anomaly on a workspace, pointing you at the change. The workspace itself exposes 'Ingestion Volume' and 'Ingestion Time' as platform metrics, and writes operational events to its 'Operation' table, reachable through the '_LogOperation' function, including an 'Ingestion rate' event when the volume rate crosses the limit and data starts being dropped, and a 'Data collection stopped' event when a daily cap is hit. They read as separate signals, but they are one job: know when the flow of telemetry changes, in either direction, before it becomes a surprise.
The point of this lesson is to turn that into an alert rather than a thing you notice at month end. Microsoft documents a 'send alert when data collection is high' pattern: a log search alert over the 'Usage' table that fires when the billable volume in the last day crosses a threshold you set. Pair that with alerts on the 'Ingestion rate' and 'Data collection stopped' operations and you have covered both failure modes, the bill running away and the workspace going blind, with proactive notification instead of hindsight.
In this lesson you will learn how Azure Monitor expresses the volume of data flowing into a Log Analytics workspace, how to read the signals that flag an anomaly, the Advisor recommendation, the ingestion metrics and the '_LogOperation' events, and how to turn them into alerts that fire the same day a spike or a stall begins. You will finish able to stand up an ingestion alert from the command line and explain why it belongs on every workspace.
The bill that logged itself
The most expensive log line is the one nobody asked for. A single diagnostic setting switched to verbose, or one application stuck restarting and writing a stack trace every few seconds, can quietly multiply a Log Analytics workspace's daily ingestion. Because Azure Monitor bills by volume ingested and the charge accrues across the whole billing period, the spike is often invisible until the invoice arrives weeks later. Azure even ships an 'Ingestion rate' event: once the volume rate crosses the workspace limit, Azure Monitor starts dropping data and writes a warning to the Operation table every six hours while it keeps happening, so the same misconfiguration can cost you money and lose you data at the same time.
Finding an ingestion anomaly before the invoice does
Priya runs the platform team at a company whose Azure Monitor bill jumped last quarter with no obvious cause. Azure Advisor is now showing an Azure Monitor recommendation that a data-ingestion anomaly was detected on one of their Log Analytics workspaces.
Rather than wait for the next invoice to tell her the size of it, Priya queries the workspace's own 'Usage' table to see which data type is driving the change and on which day it started, so she can separate a real spike from normal growth before building an alert around it.
Run the documented billable-volume query against the workspace to see daily ingestion by data type over the last month. The day a type jumps is the anomaly.
The Usage table is billed-volume truth. A data type that jumps an order of magnitude on a single day is the source of the anomaly Advisor flagged, here a verbose trace flag, not organic growth.
How Azure Monitor signals an ingestion anomalydeep dive
The anomaly shows up in three layers, and they complement each other. The first is Azure Advisor, which evaluates workspaces and raises an Azure Monitor recommendation when it detects a data-ingestion anomaly, pointing you at the workspace and the change. Advisor is the periodic, hands-off detector: useful as a backstop, but it tells you after the fact and on its own cadence, not the moment volume moves.
The second is the workspace's platform metrics. 'Ingestion Volume' is the number of records ingested into a workspace or table, and 'Ingestion Time' is how long a record takes to become queryable after Azure Monitor receives it. Both are available per table through the Table Name dimension, so a metric alert can watch the volume of a single noisy data type rather than the workspace total. Metrics are near real time, which makes them the right signal for a fast spike.
The third is the 'Operation' table, surfaced through the '_LogOperation' function, where the workspace logs its own ingestion problems. An 'Ingestion rate' event in the 'Ingestion' category fires when the volume rate crosses the workspace limit and data is being dropped, and it repeats every six hours while the condition holds. A 'Data collection stopped' event fires when a daily cap is reached and collection halts with status 'OverQuota'. The strongest position layers all three: Advisor as the periodic backstop, a metric or 'Usage'-table log alert for the spike, and a '_LogOperation' alert for the drop-and-cap events, so no failure mode is silent.
What is the impact of not alerting on ingestion?
The first impact is cost you discover too late. Log Analytics bills by volume ingested, the charge accrues quietly across the billing period, and a verbose flag or a runaway log loop can multiply a workspace's daily volume without changing anything you look at day to day. With no alert, the first signal is the invoice, by which point the overrun is a sunk cost and a variance to explain rather than a flag to switch off.
The second impact is the blind spot, which is the same anomaly running the other way. If a source stops sending, an agent stops heart-beating, or a daily cap silently shuts collection off with status 'OverQuota', ingestion drops, the dashboards keep looking healthy because nothing arrives to turn them red, and an incident can unfold with no telemetry recording it. The cost of flying blind is not on any invoice; it is the mean time to detect and resolve that stretches because the data that would have shortened it was never collected.
The third impact is dropped data even while you are still paying. When the volume rate crosses the workspace limit, Azure Monitor drops the excess and writes an 'Ingestion rate' event every six hours, so a single misconfiguration can run up the bill on what gets through and lose the records that do not, with nobody told unless an alert is watching. A few fixed-price alert rules are the cheapest and most defensible way to make every one of these failure modes loud instead of silent.
How do you alert on ingestion anomalies safely?
Treat the workspace as the unit and cover both failure modes: a spike that costs money and a stall that costs visibility. The order matters: baseline normal volume first, so your threshold reflects reality rather than guesswork and the alert is not noisy.
1. Baseline each workspace from its own Usage table
Run the documented 'Usage' table query to see daily billable volume by data type over the last month. Use the workspace's own typical day, not a round number, to set a threshold that catches a real spike without firing on normal weekly variation. A noisy alert is one that gets muted, which is the same as no alert.
2. Alert on the spike: high billable volume
Create a log search alert on the 'Usage' table that fires when billable volume in the last 24 hours crosses your threshold. This is Microsoft's documented 'send alert when data collection is high' pattern and it is the line that catches a verbose flag or a runaway source the same day it starts, while it is still a switch to flip rather than a variance to explain.
3. Alert on the stall: dropped data and capped collection
Add a '_LogOperation' alert on the 'Ingestion' category for the 'Ingestion rate' event, which means the volume rate crossed the limit and data is being dropped, and on the 'Data collection stopped' or 'OverQuota' event, which means a daily cap halted collection. These two cover the blind-spot side: you are notified the moment you stop receiving data, not when you next happen to look.
4. Wire alerts to an action group and keep Advisor as a backstop
Point every rule at an action group so the notification reaches a person or a ticket, not just a portal banner. Leave the Azure Advisor Azure Monitor recommendation on as the periodic, hands-off detector behind the real-time alerts, so an anomaly that slips a threshold still surfaces eventually rather than never.
# Set up the high-ingestion alert first: fire when billable volume in the
# last day crosses a threshold derived from THIS workspace's baseline.
WORKSPACE_ID=$(az monitor log-analytics workspace show \
--resource-group rg-monitoring --workspace-name law-prod \
--query id -o tsv)
AG_ID=$(az monitor action-group show \
--resource-group rg-monitoring --name ag-platform-oncall \
--query id -o tsv)
# Alert 1: high data collection (the cost spike).
# Threshold 50 (GB) is illustrative; set yours from the Usage-table baseline.
az monitor scheduled-query create \
--name "ingestion-volume-high" \
--resource-group rg-monitoring \
--scopes "$WORKSPACE_ID" \
--description "Billable ingestion over threshold in the last 24h" \
--action-groups "$AG_ID" \
--severity 2 \
--evaluation-frequency 1h \
--window-size 1h \
--condition "total 'DataGB' > 50 resource id _ResourceId at least 1 violations out of 1 aggregated points" \
--condition-query DataGB="Usage | where TimeGenerated > ago(24h) | where IsBillable == true | summarize DataGB = sum(Quantity) / 1000"
# Alert 2: dropped-data and capped-collection events (the blind spot).
az monitor scheduled-query create \
--name "ingestion-rate-or-cap" \
--resource-group rg-monitoring \
--scopes "$WORKSPACE_ID" \
--description "Ingestion rate limit hit or daily cap reached" \
--action-groups "$AG_ID" \
--severity 1 \
--evaluation-frequency 5m \
--window-size 5m \
--condition "count 'Hits' > 0 resource id _ResourceId at least 1 violations out of 1 aggregated points" \
--condition-query Hits="_LogOperation | where Category == 'Ingestion' | where Operation has 'Ingestion rate' or Detail has 'OverQuota'" Quick quiz
Question 1 of 5Azure Advisor raises an Azure Monitor recommendation that a data-ingestion anomaly was detected on a workspace. Why is it not enough to rely on that recommendation alone?
You scored
0 / 5
Keep learning
Go deeper on how Azure Monitor exposes ingestion volume and how to alert on it across the workspaces in your estate.
- Analyze usage in a Log Analytics workspace The 'Usage' table queries and the documented 'send alert when data collection is high' pattern.
- Monitor operational issues in your Log Analytics workspace The '_LogOperation' function, the 'Ingestion rate' and 'Data collection stopped' events, and example alert rules.
- Set a daily cap on a Log Analytics workspace How the daily cap works, why a cap can create a blind spot, and how to alert before collection stops.
You can now treat Azure Monitor ingestion as one capability rather than a number you read after the fact: baseline each workspace from its own 'Usage' table, alert on a high-volume spike so a runaway bill is caught the same day, alert on the 'Ingestion rate' and 'Data collection stopped' events so a stall is caught the moment it happens, and keep Azure Advisor on as the periodic backstop. The alert covers both directions, the cost spike and the visibility collapse.
Back to the library