docs/sources/datasources/prometheus/configure/azure-authentication.md
{{< admonition type="warning" >}} Using Azure AD authentication with the core Prometheus data source for Azure Monitor Managed Service for Prometheus is deprecated. In Grafana 13, the migration to the dedicated Azure Monitor Managed Service for Prometheus data source is automatic. Existing data sources using Azure AD authentication are migrated on startup. {{< /admonition >}}
For background on this change, refer to Prometheus data source update: Redefining our big tent philosophy.
In Grafana 13, the prometheusTypeMigration feature toggle is enabled by default and deprecated. This means:
To determine if your Prometheus data sources have been migrated:
The banner displays one of the following messages:
After migration (or for new setups), configure the dedicated plugin:
| Method | Use case | Additional configuration required |
|---|---|---|
| Managed Identity | Azure-hosted Grafana instances | None (system-assigned) or Client ID (user-assigned) |
| App Registration | Service principal authentication | Directory ID, Application ID, Client secret |
| Current User | Current user's Entra ID credentials | None |
For Managed Identity authentication:
For App Registration authentication:
| Setting | Description | Example |
|---|---|---|
| Directory (tenant) ID | Your Entra ID tenant ID | 12345678-1234-1234-1234-123456789012 |
| Application (client) ID | Your app registration client ID | 87654321-4321-4321-4321-210987654321 |
| Client secret | Your app registration secret | your-client-secret |
To learn more about Entra ID authentication for Grafana, refer to Configure Entra ID OAuth authentication.
Set the Prometheus server URL to your Azure Monitor workspace endpoint:
https://your-workspace.eastus2.prometheus.monitor.azure.com
Click Save & test to verify the connection.
apiVersion: 1
datasources:
- name: Azure Monitor Prometheus
type: grafana-azureprometheus-datasource
url: https://your-workspace.eastus2.prometheus.monitor.azure.com
jsonData:
azureCredentials:
authType: clientsecret
azureCloud: AzureCloud
clientId: <CLIENT_ID>
tenantId: <TENANT_ID>
httpMethod: POST
secureJsonData:
azureClientSecret: <CLIENT_SECRET>
Replace <CLIENT_ID>, <TENANT_ID>, and <CLIENT_SECRET> with your Azure credentials.
Symptom: Migration doesn't occur or the data source type is missing.
Solution:
Symptom: The migrated data source returns authentication errors.
Solution:
grafana-azureprometheus-datasource is included in forward_settings_to_plugins under the [azure] heading in your .ini configuration file.If you need to revert migrated data sources back to the core Prometheus type:
prometheusTypeMigration to false in your Grafana configuration feature toggles. For more information, refer to Manage feature toggles.read and write permissions for the data source API. For more information, refer to Data source API.#!/bin/bash
GRAFANA_URL=""
BEARER_TOKEN=""
LOG_FILE="grafana_azure_migration_rollback_$(date +%Y%m%d_%H%M%S).log"
log_message() {
local message="$1"
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$timestamp] $message" | tee -a "$LOG_FILE"
}
update_data_source() {
local uid="$1"
local data="$2"
response=$(curl -s -w "\n%{http_code}" -X PUT \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $BEARER_TOKEN" \
-d "$data" \
"$GRAFANA_URL/api/datasources/uid/$uid")
http_code=$(echo "$response" | tail -n1)
response_body=$(echo "$response" | sed '$d')
if [[ "$http_code" -ge 200 && "$http_code" -lt 300 ]]; then
log_message "$uid reverted successfully"
else
log_message "$uid error: HTTP $http_code - $response_body"
fi
}
if ! command -v jq &> /dev/null; then
echo "Error: jq is required but not installed."
exit 1
fi
if [[ -z "$GRAFANA_URL" || -z "$BEARER_TOKEN" ]]; then
echo "Error: Set GRAFANA_URL and BEARER_TOKEN variables at the top of the script."
exit 1
fi
log_message "Starting Azure Prometheus to core Prometheus rollback"
response=$(curl -s -w "\n%{http_code}" -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $BEARER_TOKEN" \
"$GRAFANA_URL/api/datasources/")
http_code=$(echo "$response" | tail -n1)
response_body=$(echo "$response" | sed '$d')
if [[ "$http_code" -lt 200 || "$http_code" -ge 300 ]]; then
log_message "Error fetching data sources: HTTP $http_code"
exit 1
fi
total=$(echo "$response_body" | jq '[.[] | select(.jsonData["prometheus-type-migration"] == true and .type == "grafana-azureprometheus-datasource")] | length')
log_message "Found $total data sources to revert"
echo "$response_body" | jq -c '.[] | select(.jsonData["prometheus-type-migration"] == true and .type == "grafana-azureprometheus-datasource")' | while read -r data; do
uid=$(echo "$data" | jq -r '.uid')
read_only=$(echo "$data" | jq -r '.readOnly // false')
if [[ "$read_only" == "true" ]]; then
log_message "$uid is readOnly — edit the type to 'prometheus' in the provisioning file instead."
continue
fi
updated_data=$(echo "$data" | jq '.type = "prometheus" | .jsonData["prometheus-type-migration"] = false')
update_data_source "$uid" "$updated_data"
done
log_message "Rollback complete. Log: $LOG_FILE"
{{< admonition type="note" >}}
Provisioned data sources (readOnly) can't be reverted via the API. Update the type field to prometheus in your provisioning YAML file instead.
{{< /admonition >}}
If you continue to experience issues, check the Grafana server logs for detailed error messages and contact Grafana Support.