You open Azure Advisor for the first time in a few months. The blade loads: 300-some recommendations across cost, security, reliability, performance, and operational excellence. You scroll for a minute. Right-size this VM, enable soft delete there, add a second region here. All of it plausible, none of it assigned to anyone. You close the tab.
Nothing about that advice was wrong. Advisor's recommendations come from real telemetry about your actual resources, and acting on the cost category alone routinely pays for the time spent. The signal is genuine. The format is what kills it.
The Problem: a Recommendation Without an Owner Is a Notification
Advisor is a feed, not a workflow. Each recommendation arrives with a category, an impact rating, and an affected resource, and that is where Azure's involvement ends. There is no owner, no due date, no state beyond "still appearing" or "gone."
That design has predictable consequences at scale:
- Nobody is on the hook. A recommendation that belongs to everyone belongs to no one. The list becomes ambient guilt instead of a queue.
- The portal view is scoped to where you are standing. Advisor is easiest to consume per subscription. Rolling up 40 subscriptions into one prioritized view is your job. (Advisor does have filters and an overall score in the portal; how far those stretch across a large multi-subscription estate is worth checking against your own tenant.)
- No memory. Recommendations are a snapshot. Whether this month's 300 are the same as last month's 300, or a completely different 300 because you fixed the old ones, is impossible to see.
- No context. "Shut down this underutilized VM" is only actionable if you know what the VM is, who owns it, and what breaks when it stops.
Pulling Advisor Data with Azure Resource Graph
You do not have to consume Advisor through the portal. Resource Graph exposes recommendations in the advisorresources table, across every subscription at once.
Start with the shape of the problem, counts by category and impact:
advisorresources
| where type =~ 'microsoft.advisor/recommendations'
| extend category = tostring(properties.category),
impact = tostring(properties.impact)
| summarize recommendations = count() by category, impact
| order by category asc
Then zoom into the cost category, highest impact first, with the affected resource attached:
advisorresources
| where type =~ 'microsoft.advisor/recommendations'
| where properties.category =~ 'Cost'
| extend impact = tostring(properties.impact),
problem = tostring(properties.shortDescription.problem),
resourceId = tostring(properties.resourceMetadata.resourceId)
| extend impactRank = case(impact == 'High', 0, impact == 'Medium', 1, 2)
| project impact, problem, resourceId
| order by impactRank asc
These queries give you the cross-subscription rollup the portal makes you assemble by hand, and they belong in your toolkit. What they still do not give you:
- Triage state. Advisor's dismiss and postpone actions are coarse, and they do not record who decided, why, or who owns the fix. (The exact scoping of dismissals is worth verifying in your tenant before you rely on it.)
- Inventory context. The query hands you a
resourceId. What the resource is, how it is configured, what it costs, and what depends on it all live somewhere else. - History. Nothing tells you which recommendations are new since last month and which ones you already resolved. Progress is invisible, so it is impossible to report.
- Repeatability. Someone has to run this, merge it with context, and chase the results, every month, forever.
How StratoLens Turns the Feed into a Queue
StratoLens ingests Advisor recommendations as part of its scheduled scans and lines them up against exactly those gaps:
- One view across every subscription. All recommendations in a single dashboard instead of 40 per-subscription blades.
- Change tracking over time. New recommendations and resolved issues are identified scan over scan, so "we closed 60 cost recommendations this quarter" is a fact you can show leadership, not a guess.
- Sort and filter that survives scale. Slice by category, impact, or subscription to decide what actually gets worked this month.
- Recommendations next to inventory. Because StratoLens already documents the resources themselves, a recommendation arrives attached to what it is about, not just a resource ID.
All of this runs from a deployment that lives inside your tenant, so Advisor data and the resource inventory it joins against never leave your environment.
Advice Ages Fast. Put It in a Queue
A monthly ritual works: pull the cross-subscription rollup, pick the top high-impact items, assign owners, and check what disappeared since last time. The KQL above is enough to start that by hand. If you would rather have the aggregation, the new-versus-resolved diff, and the inventory context waiting for you each month, that is what Azure Advisor Integration in StratoLens does.