---
title: "Azure Monitor template variables | Grafana Cloud documentation"
description: "Using template variables with Azure Monitor in Grafana"
---

> For a curated documentation index, see [llms.txt](/llms.txt). For the complete documentation index, see [llms-full.txt](/llms-full.txt).

# Azure Monitor template variables

Instead of hard-coding details such as resource group or resource name values in metric queries, you can use variables. This helps you create more interactive, dynamic, and reusable dashboards. Grafana refers to such variables as template variables.

For an introduction to templating and template variables, refer to the [Templating](/docs/grafana/next/dashboards/variables/) and [Add and manage variables](/docs/grafana/next/dashboards/variables/add-template-variables/).

## Before you begin

- Ensure you have [configured the Azure Monitor data source](/docs/grafana-cloud/observe-and-act/connect-externally-hosted/data-sources/azure-monitor/configure/).
- If you want template variables to auto-populate subscriptions, set a **Default Subscription** in the data source configuration.

## Create a template variable

To create a template variable for Azure Monitor:

01. Navigate to the dashboard you want to update and click **Edit**.
02. Click the **Add new element** icon (blue plus sign).
03. Click **Variable**.
04. Select **Query** as the variable type.
05. Enter a **Name** for your variable (e.g., `subscription`, `resourceGroup`, `resource`).
06. Select an option in the **Display** drop-down list to control where on the dashboard the variable is displayed.
07. Click **Open variable editor** to open the **Query Variable** dialog box.
08. In the **Data source** drop-down list, select your Azure Monitor data source.
09. In the **Query Type** drop-down list, select the appropriate query type (see [Available query types](#available-query-types)).
10. Configure any additional fields required by the selected query type.
11. Click **Preview** to preview the variable values.
12. Click **Close** to close the query variable editor dialog box.
13. Configure display options such as **Multi-value**, **Include All value**, or **Allow custom values** as needed.
14. Click **Save**.
15. (Optional) Enter a description of the changes you’ve made.
16. Click **Save**.
17. Click **Exit edit**.

## Available query types

The Azure Monitor data source provides the following query types for template variables:

Expand table

| Query type              | Description                                                                                                                            |
|-------------------------|----------------------------------------------------------------------------------------------------------------------------------------|
| **Subscriptions**       | Returns a list of Azure subscriptions accessible to the configured credentials.                                                        |
| **Resource Groups**     | Returns resource groups for a specified subscription. Supports multi-value selection.                                                  |
| **Namespaces**          | Returns metric namespaces for the specified subscription. If a resource group is specified, returns only namespaces within that group. |
| **Regions**             | Returns Azure regions available for the specified subscription.                                                                        |
| **Resource Names**      | Returns resource names for a specified subscription, resource group, and namespace. Supports multi-value selection.                    |
| **Metric Names**        | Returns available metric names for a specified resource.                                                                               |
| **Workspaces**          | Returns Log Analytics workspaces for the specified subscription.                                                                       |
| **Logs**                | Executes a KQL query and returns the results as variable values. Refer to [Create a Logs variable](#create-a-logs-variable).           |
| **Custom Namespaces**   | Returns custom metric namespaces for a specified resource.                                                                             |
| **Custom Metric Names** | Returns custom metric names for a specified resource.                                                                                  |

> Note
> 
> Custom metrics cannot be emitted against a subscription or resource group. Select specific resources when retrieving custom metric namespaces or custom metric names.

## Create cascading variables

Cascading variables (also called dependent or chained variables) allow you to create dropdown menus that filter based on previous selections. This is useful for drilling down from subscription to resource group to specific resource.

### Example: Subscription → Resource Group → Resource Name

**Step 1: Create a Subscription variable**

1. Create a variable named `subscription`.
2. Set **Query Type** to **Subscriptions**.

**Step 2: Create a Resource Group variable**

1. Create a variable named `resourceGroup`.
2. Set **Query Type** to **Resource Groups**.
3. In the **Subscription** field, select `$subscription`.

**Step 3: Create a Resource Name variable**

1. Create a variable named `resource`.
2. Set **Query Type** to **Resource Names**.
3. In the **Subscription** field, select `$subscription`.
4. In the **Resource Group** field, select `$resourceGroup`.
5. Select the appropriate **Namespace** for your resources (for example, `Microsoft.Compute/virtualMachines`).

Now when you change the subscription, the resource group dropdown updates automatically, and when you change the resource group, the resource name dropdown updates.

## Create a Logs variable

The **Logs** query type lets you use a KQL query to populate variable values. The query must return a single column of values.

**To create a Logs variable:**

1. Create a new variable with **Query Type** set to **Logs**.
2. Select a **Resource** (Log Analytics workspace or Application Insights resource).
3. Enter a KQL query that returns a single column.

### Logs variable query examples

Expand table

| Query                                    | Returns                               |
|------------------------------------------|---------------------------------------|
| `Heartbeat | distinct Computer`          | List of virtual machine names         |
| `Perf | distinct ObjectName`             | List of performance object names      |
| `AzureActivity | distinct ResourceGroup` | List of resource groups with activity |
| `AppRequests | distinct Name`            | List of application request names     |

You can reference other variables in your Logs query:

kusto ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy

```kusto
workspace("$workspace").Heartbeat | distinct Computer
```

kusto ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy

```kusto
workspace("$workspace").Perf
| where ObjectName == "$object"
| distinct CounterName
```

## Variable refresh options

Control when your variables refresh by setting the **Refresh** option:

Expand table

| Option                   | Behavior                                                                                  |
|--------------------------|-------------------------------------------------------------------------------------------|
| **On dashboard load**    | Variables refresh each time the dashboard loads. Best for data that changes infrequently. |
| **On time range change** | Variables refresh when the dashboard time range changes. Use for time-sensitive queries.  |

For dashboards with many variables or complex queries, use **On dashboard load** to improve performance.

## Use variables in queries

After you create template variables, you can use them in your Azure Monitor queries by referencing them with the `$` prefix.

### Metrics query example

In a Metrics query, select your variables in the resource picker fields:

- **Subscription**: `$subscription`
- **Resource Group**: `$resourceGroup`
- **Resource Name**: `$resource`

### Logs query example

Reference variables directly in your KQL queries:

kusto ![Copy code to clipboard](/media/images/icons/icon-copy-small-2.svg) Copy

```kusto
Perf
| where ObjectName == "$object" and CounterName == "$metric"
| where TimeGenerated >= $__timeFrom() and TimeGenerated <= $__timeTo()
| where $__contains(Computer, $computer)
| summarize avg(CounterValue) by bin(TimeGenerated, $__interval), Computer
| order by TimeGenerated asc
```

## Multi-value variables

You can enable **Multi-value** selection for **Resource Groups** and **Resource Names** variables. When using multi-value variables in a Metrics query, all selected resources must:

- Belong to the same subscription
- Be in the same Azure region
- Be of the same resource type (namespace)

> Note
> 
> When a multi-value variable is used as a parameter in another variable query (for example, to retrieve metric names), only the first selected value is used. Ensure the first resource group and resource name combination is valid.

## Troubleshoot template variables

If you encounter issues with template variables, try the following solutions. For additional troubleshooting, refer to the [Azure Monitor troubleshooting guide](/docs/grafana-cloud/observe-and-act/connect-externally-hosted/data-sources/azure-monitor/troubleshooting/#template-variable-errors).

### Variable returns no values

- Verify the Azure Monitor data source is configured correctly and can connect to Azure.
- Check that the credentials have appropriate permissions to list the requested resources.
- For cascading variables, ensure parent variables have valid selections.

### Variable values are outdated

- Check the **Refresh** setting and adjust if needed.
- Click the refresh icon next to the variable dropdown to manually refresh.

### Variables break after a Grafana upgrade

If template variables return errors such as `Properties found in series but missing valueProp and textProp` after upgrading Grafana, this typically indicates a version-specific bug. Update to the latest patch release for your Grafana version. For Grafana Cloud, verify you’re on the **stable** release channel. Refer to [Template variable errors](/docs/grafana-cloud/observe-and-act/connect-externally-hosted/data-sources/azure-monitor/troubleshooting/#template-variable-errors) for detailed solutions.

### Multi-value selection not working in queries

- Ensure the resources meet the requirements (same subscription, region, and type).
- For Logs queries, use the `$__contains()` macro to handle multi-value variables properly.
