Azure Activity Logs: A Few Practical Tips

By | March 27, 2026

I was working with a customer recently who was trying to track down changes across several subscriptions. Nothing unusual there, except we quickly realized something was missing. A number of subscriptions were not sending Azure Activity Logs to Microsoft Sentinel at all. No errors, no alerts, just silent gaps.

It stood out because this is one of those data sources I have consistently found to be useful, especially when you need to answer two very practical questions:

What changed?
Who owns or is actively working on this resource?

In most cases, Azure Activity Logs make both answers straightforward.


What Azure Activity Logs Actually Are

Azure Activity Logs capture control plane operations across your subscriptions. This includes things like:

  • Resource creation, updates, and deletions
  • Role assignments and access changes
  • Policy changes
  • Service-level operations

Each record includes the identity behind the action, which can be:

  • A named user
  • A service principal
  • A managed identity
  • A guest or B2B account

That last point is important. External users and contractors often have meaningful access, and Activity Logs give you clear visibility into what they are doing.


A Few Practical Tips

1. Send Activity Logs to Sentinel

There is little downside here:

  • No ingestion cost
  • Immediate value for investigations and reporting

This is one of the easiest wins available.


2. Max Out Interactive Retention

This is one of the rare cases where extended retention is easy to justify.

For the AzureActivity table, you can:

  • Set interactive (analytics) retention to 730 days (2 years)
  • Do this without additional cost for this data source

That gives you a long, fully searchable history for:

  • Investigations
  • Audits
  • Historical change tracking

How to set it:

  • Go to Log Analytics workspace
  • Select Tables
  • Choose AzureActivity
  • Set Total retention = 730 days
  • Keep data in the Analytics tier

3. Verify Coverage Across All Subscriptions

Azure Activity Logs in Sentinel are typically collected using an Azure Policy-based data connector, which deploys diagnostic settings across subscriptions.

Because all data lands in the same AzureActivity table, it can give the impression that everything is covered when it is not. In larger tenants, it is easy for a few subscriptions to be missed or fall out of scope over time.

It is a good idea to periodically verify that all subscriptions are actually sending data.

A simple way to check:

AzureActivity
| where TimeGenerated > ago(700d)
//| where SubscriptionId == "e1edeed0-cfb3-4744-94d7-cee4424bcd62"
| summarize count() by SubscriptionId
| count

This gives you the number of subscriptions currently reporting data. If it is lower than expected, you likely have gaps.


4. Quickly See Who Is Making Changes

When you want a fast view of who is actually doing work in your environment, a simple summary goes a long way.

This example focuses on human users by filtering on callers that contain @:

AzureActivity
| where TimeGenerated > ago(30d)
| where Caller contains "@"
| summarize count() by Caller, OperationName
| sort by count_ desc

This gives you a quick breakdown of:

  • Who is active across the environment
  • What types of changes they are making
  • Whether any unexpected users are showing up

The Caller field represents the identity used for the operation when it is recorded, and OperationName reflects the activity performed. Together, this gives a clear view of who is doing what.


Closing Thought

Azure Activity Logs are not new, and they are not complex. But they are one of the most consistently useful datasets in Azure.

When something changes and you need to understand what happened, they are often the first place to look. And when they are missing, you notice.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.