Microsoft Azure
Oodle integrates with Microsoft Azure to pull platform metrics from Azure Monitor. Oodle uses a read-only Microsoft Entra app registration that you create to discover the resources in your subscription through Azure Resource Graph, read their metrics, and enrich each metric with resource metadata and tags.
One integration record covers one Azure subscription. To monitor several subscriptions, add one record for each.
Prerequisites
- An Azure subscription
- Permission to create an app registration in the Microsoft Entra tenant of that subscription, and to assign roles on the subscription (or on a resource group in it)
- An Oodle account (navigate to ap1, us1 to start setup)
Setup
- Open the Azure integration page in Oodle (ap1, us1), or click Settings > Integrations in the left sidebar and select the Microsoft Azure tile.
- Click Add subscription (
+button) to open the setup drawer.
The setup drawer shows where to find each value in the Azure portal. Follow the instructions in the drawer, or use the tabs below for detailed guidance:
- Azure Portal
- Azure CLI
1. Get your tenant and subscription IDs
- Open Subscriptions and copy the Subscription ID of the subscription you want to monitor.
- Open Microsoft Entra ID and copy the Directory (tenant) ID.
2. Register an application
- Open App registrations and click New registration.
- Name it
oodle-azure-metrics. Keep the default account type and leave the Redirect URI empty; this integration does not use it. - Click Register, then copy the Application (client) ID from the Overview page.
3. Create a client secret
- In the app registration, open Certificates & secrets and click New client secret.
- Choose an expiry and click Add.
- Copy the secret Value (not the Secret ID). Azure shows the value only once.
Microsoft Entra caps a client secret lifetime at two years, and an expired secret stops collection. Note the expiry date, and when you rotate the secret, paste the new value into the Oodle drawer.
4. Grant the app the Monitoring Reader role
- Open the subscription in the Azure portal and click Access control (IAM).
- Click Add > Add role assignment.
- Select the Monitoring Reader role.
- Under Members, select User, group, or service
principal, search for
oodle-azure-metrics, and select it. - Click Review + assign.
Monitoring Reader is the only role Oodle needs. For a narrower grant, assign the role on a resource group instead of the whole subscription; Oodle then collects only the resources in that group.
5. Save in Oodle
Enter these values in the Oodle setup drawer:
| Field | Value |
|---|---|
| Subscription Name | A name you choose. It labels this subscription in Oodle and appears as the subscription_name label on every metric. |
| Directory (tenant) ID | From step 1 |
| Subscription ID | From step 1 |
| Application (client) ID | From step 2 |
| Client Secret | From step 3 |
Then open the Metric Collection tab, choose the services to collect (see Choosing services and filters), and click Save.
1. Install the Azure CLI
Install the
Azure CLI
if you do not have it already, then run az login.
2. Select the subscription
Print the subscription ID and tenant ID for the subscription you want to monitor:
az account set --subscription YOUR_SUBSCRIPTION_ID
az account show --query "{subscriptionId:id, tenantId:tenantId}" -o json
3. Create an app registration with Monitoring Reader
Create the app registration and assign the Monitoring Reader role in one command. Scope it to the subscription:
az ad sp create-for-rbac \
--name oodle-azure-metrics \
--role "Monitoring Reader" \
--scopes /subscriptions/YOUR_SUBSCRIPTION_ID
Or scope it to one or more resource groups for a narrower grant:
az ad sp create-for-rbac \
--name oodle-azure-metrics \
--role "Monitoring Reader" \
--scopes /subscriptions/YOUR_SUBSCRIPTION_ID/resourceGroups/YOUR_RESOURCE_GROUP
The command prints appId, password, and tenant.
4. Save in Oodle
Enter these values in the Oodle setup drawer:
| Field | Value |
|---|---|
| Subscription Name | A name you choose. It labels this subscription in Oodle and appears as the subscription_name label on every metric. |
| Directory (tenant) ID | tenant from step 3 (or tenantId from step 2) |
| Subscription ID | subscriptionId from step 2 |
| Application (client) ID | appId from step 3 |
| Client Secret | password from step 3 |
Then open the Metric Collection tab, choose the services to collect (see Choosing services and filters), and click Save.
When you click Save, Oodle tests the credentials with one Azure Resource Graph query. A wrong tenant ID, client ID, or client secret is reported immediately. An Azure role assignment takes two to three minutes to propagate, so if you assigned the role moments ago, Oodle saves the subscription as Connecting and starts collection on its own once the assignment lands.
Choosing services and filters
Azure bills your subscription for every metric read, so collection is opt-in per service. The Metric Collection tab of the setup drawer controls what Oodle collects.
Services
Pick the Azure services to collect from. Each entry is
one Azure resource type, shown with its ARM type (for
example microsoft.compute/virtualmachines). When you
save a subscription without choosing, Oodle collects
these services by default:
- Virtual Machines
- Azure Kubernetes Service (AKS)
- Load Balancer
- SQL Database
- App Service
Tag filters
Add tags to a row of services to collect only the resources that carry them:
- A resource must have every tag on the row to be collected.
- A tag key on its own matches any value.
- Leave the tags empty to collect every resource of the services on that row.
- Tags apply only to their own row. Add a second row to
collect other services with different tags, for
example every Virtual Machine but only
env=productionStorage Accounts.
Subscription filters
These optional filters narrow every row at once. A resource must pass them as well as its row's tags:
| Filter | Effect |
|---|---|
| Resource groups | Collect only resources in the listed resource groups (comma-separated, for example rg-prod, rg-staging). |
| Resource name pattern | Collect only resources whose name matches the regular expression (for example ^prod-). |
Verification
Once setup is complete, verify the integration is working:
- Navigate to ap1, us1 and confirm the subscription status shows as connected.
- Go to ap1, us1 and search
for metrics prefixed with
azure_to confirm data is flowing.
Allow up to 15 minutes for the first metrics to appear: Azure Resource Graph can take several minutes to index a newly granted subscription, and collection runs on a five-minute schedule behind a five-minute delay (see How Oodle collects Azure metrics).
Dashboards
Oodle provisions a set of dashboards for Azure when you add a subscription. Click View Dashboards on the integration tile, or open the Azure Oodle Integration folder in Dashboards, to find:
- Azure Overview
- Azure Virtual Machines
- Azure Kubernetes Service
- Azure App Service
- Azure SQL Database
- Azure Storage Accounts
- Azure Load Balancer
- Azure Cosmos DB
- Azure Key Vault
- Azure Cache for Redis
- Azure Managed Disks
- Azure Network Interfaces
Each dashboard filters by the subscription_name,
resource_group, and resource_name labels.
Metric names and labels
Metric names
Every Azure metric is prefixed with azure_, followed
by the metric namespace and the metric name in snake
case:
| Azure namespace | Azure metric | Oodle metric |
|---|---|---|
Microsoft.Compute/virtualMachines | Percentage CPU | azure_vm_percentage_cpu |
Microsoft.Storage/storageAccounts | UsedCapacity | azure_storage_used_capacity |
Microsoft.Web/sites | CpuTime | azure_app_services_cpu_time |
Microsoft.Sql/servers/databases | cpu_percent | azure_sql_servers_databases_cpu_percent |
Microsoft.Storage/storageAccounts/blobServices | Transactions | azure_storage_storageaccounts_blobservices_transactions |
Virtual Machines, Storage Accounts, and App Service use
the short names vm, storage, and app_services,
which match the names Datadog publishes, so queries
written for Datadog carry over. Every other namespace
is the ARM resource type without the Microsoft.
prefix, with / replaced by _.
Azure publishes several aggregations of each metric
(Average, Total, Count, Maximum, Minimum). The primary
aggregation carries the bare metric name, and every
other aggregation is suffixed with its name, for
example azure_vm_percentage_cpu (Average) and
azure_vm_percentage_cpu_maximum.
Labels
Every Azure metric carries these labels:
| Label | Value |
|---|---|
cloud_provider | azure |
subscription_id | The Azure subscription ID |
subscription_name | The name you gave the subscription in Oodle |
resource_group | The resource group of the resource |
region | The Azure region of the resource |
resource_type | The ARM resource type, for example microsoft.compute/virtualmachines |
resource_name | The name of the resource |
unit | The unit Azure reports, for example Percent or Bytes |
aggregation | The Azure aggregation of the sample, for example Average or Total |
In addition, each Azure metric dimension (for example
LUN on a disk metric) and each tag on the resource
becomes a label, with the name converted to a valid
label name. The labels in the table above take
priority: a resource tag named region does not
replace the region label.
Troubleshooting
| Issue | Resolution |
|---|---|
| Saving reports that Azure denied access | The Monitoring Reader role assignment has not propagated yet, or targets the wrong scope. Wait two to three minutes and save again. If it persists, confirm the assignment covers the subscription or resource group that holds the resources you want. |
Saving reports MissingSubscriptionRegistration | The Microsoft.Insights resource provider is not registered on this subscription. Azure Monitor registers it on almost every subscription already, so this is rare. Run az provider register --namespace Microsoft.Insights, or open the subscription > Resource providers in the portal, search for Microsoft.Insights, and register it. |
| Saving reports that Oodle failed to reach Azure with these credentials | Check the tenant ID, subscription ID, client ID, and client secret. Make sure you pasted the secret Value and not the Secret ID. |
| The subscription connects but no metrics appear | Wait about 15 minutes. Then confirm the services you expect are enabled on the Metric Collection tab, and that no resource group, tag, or name filter excludes them. |
| Some resource types report but others do not | Only the services enabled on the subscription are collected. Enable the missing service on the Metric Collection tab. |
| Metrics stopped after a while | The client secret has expired. Create a new secret in the app registration and paste it into the Oodle drawer. |
How Oodle collects Azure metrics
Discovery
Oodle queries Azure Resource Graph to list the resources of the enabled services in the subscription, applies your tag, resource group, and name filters, and reads the resource tags that become labels. Resource Graph is eventually consistent, so a newly created resource can take a few minutes to appear.
Polling interval
Oodle reads Azure Monitor on a recurring interval, every 5 minutes by default, and requests one-minute granularity, which is the finest grain Azure platform metrics offer. To adjust the interval, reach out to Oodle Support.
A shorter polling interval increases the number of metric reads Oodle makes against your subscription, which affects your Azure Monitor costs.
Expected data delay
Azure publishes a datapoint before it has finished receiving all of its samples, and revises the value afterwards. Oodle reads each window five minutes behind the current time so that every stored value is final. Combined with the polling interval, metrics typically appear in Oodle 5 to 10 minutes after they are recorded in Azure. This delay is normal and applies to all polling-based integrations.
Custom metrics and guest OS metrics
Azure Monitor platform metrics cover the Azure resources themselves. To bring custom application metrics or Virtual Machine guest OS metrics into Oodle, send them directly with an agent. See the other metrics integrations for options on sending data to Oodle directly.
Support
If you need assistance or have any questions, please reach out to us through:
- Email at [email protected]