Introduction
Azure Monitor est la plateforme unifiée de Microsoft Azure pour la collecte, l'analyse et l'action sur les données de monitoring. En 2026, avec l'essor des workloads hybrides et IA, maîtriser Azure Monitor est essentiel pour les architectes DevOps : il centralise métriques, logs et traces via Log Analytics (KQL), Metrics Explorer et alertes intelligentes. Ce tutoriel expert vous guide pas à pas pour déployer un workspace avancé, query complexes, configurer alertes prédictives et intégrer via SDK. Chaque étape inclut du code fonctionnel, évitant les pièges classiques comme les coûts cachés ou les queries inefficaces. À la fin, vous bookmarkederez ce guide pour vos prod en scale. (142 mots)
Prérequis
- Abonnement Azure actif avec Owner ou Contributor rights
- Azure CLI 2.65+ installé (
az --version) - Python 3.12+ avec
pip install azure-monitor-query azure-identity - VS Code avec extension Azure Tools
- Connaissances avancées en KQL et ARM templates
Créer un Log Analytics Workspace via CLI
#!/bin/bash
RESOURCE_GROUP="rg-monitor-expert"
WORKSPACE_NAME="law-expert-2026-$(date +%s)"
LOCATION="westeurope"
az group create --name $RESOURCE_GROUP --location $LOCATION
az monitor log-analytics workspace create \
--resource-group $RESOURCE_GROUP \
--workspace-name $WORKSPACE_NAME \
--location $LOCATION \
--sku PerGB2018 \
--retention-time 90
az monitor log-analytics workspace show --resource-group $RESOURCE_GROUP --workspace-name $WORKSPACE_NAME --query id -o tsvCe script crée un groupe de ressources et un workspace Log Analytics avec SKU économique PerGB2018 et rétention 90 jours. Utilisez tsv pour extraire l'ID directement. Piège : Vérifiez les quotas régionaux avec az monitor log-analytics workspace list avant exécution pour éviter les échecs.
Comprendre le Workspace et Diagnostic Settings
Le Log Analytics Workspace ingère logs/métriques via Diagnostic Settings. Analogie : c'est le 'lac de données' central où convergent tous les flux Azure (VMs, AKS, App Services). Configurez-les pour router vers le workspace sans doublons.
Activer Diagnostic Settings sur une VM
#!/bin/bash
RESOURCE_GROUP="rg-monitor-expert"
VM_NAME="vm-expert-monitor"
WORKSPACE_ID=$(az monitor log-analytics workspace list --resource-group $RESOURCE_GROUP --query "[0].id" -o tsv)
# Créer une VM simple pour démo
az vm create --resource-group $RESOURCE_GROUP --name $VM_NAME --image UbuntuLTS --admin-username azureuser --admin-password Password123! --size Standard_B1s --location westeurope
az monitor diagnostic-settings create \
--name "diag-vm-expert" \
--resource $VM_NAME/virtualMachines \
--resource-group $RESOURCE_GROUP \
--workspace $WORKSPACE_ID \
--logs '[{category: "VMInsights", enabled: true}, {category: "Heartbeat", enabled: true}]' \
--metrics '[{category: "AllMetrics", enabled: true}]'Active les logs VMInsights/Heartbeat et toutes métriques vers le workspace. La VM de test est créée en B1s pour minimiser coûts. Piège : Les catégories logs sont case-sensitive ; listez-les via az monitor diagnostic-settings subscription list.
Query KQL avancée pour analyse logs
Heartbeat
| where TimeGenerated > ago(1h)
| summarize AvgLatency = avg(HeartbeatLatencyMsD) by Computer, bin(TimeGenerated, 5m)
| extend Status = case(AvgLatency > 100, "High", AvgLatency > 50, "Medium", "Low")
| render timechart
// Join avec métriques CPU pour corrélation
Heartbeat
| join kind=inner (
Perf
| where ObjectName == "Processor" and CounterName == "% Processor Time"
| summarize AvgCPU = avg(CounterValue) by Computer, bin(TimeGenerated, 5m)
) on Computer
| where AvgCPU > 80
| project TimeGenerated, Computer, AvgCPU, AvgLatency = AvgLatencyMsD
| render barchartQuery experte : agrège latences Heartbeat sur 5min, score-les, et joint avec Perf CPU pour corréler incidents. render visualise en dashboard. Piège : ago(1h) limite scope pour perf ; indexez champs custom pour queries <1s.
Déployer Alertes avec ARM Template
Alertes Azure Monitor réagissent en temps réel via règles metric/log. À niveau expert, utilisez ARM pour IaC : conditions dynamiques, actions Logic Apps.
ARM Template pour Alerte CPU Haute
{
"$schema": "https://schema.management.azure.com/schemas/2019-03-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"workspaceName": { "type": "string" },
"alertName": { "type": "string", "defaultValue": "CPU-High-Alert-Expert" }
},
"resources": [{
"type": "Microsoft.Insights/scheduledQueryRules",
"apiVersion": "2023-06-01",
"name": "[parameters('alertName')]",
"location": "global",
"properties": {
"description": "Alerte CPU >80% sur VMs",
"source": {
"query": "Perf | where ObjectName == \"Processor\" and CounterName == \"% Processor Time\" and Average >= 80 | summarize AggregatedValue = count() by bin(TimeGenerated, 5m)",
"dataSourceId": "[resourceId('Microsoft.OperationalInsights/workspaces', parameters('workspaceName'))]"
},
"schedule": { "frequency": "PT1M", "timeWindowSize": "PT5M" },
"action": {
"odata.type": "Microsoft.WindowsAzure.Management.Monitoring.Alerts.Models.MicrosoftAppInsightsNexusDataContracts.Resources.Microsoft.WindowsAzure.Management.Monitoring.Alerts.Models.AlertActionGroup",
"actionGroupId": "/subscriptions/{sub-id}/resourceGroups/{rg}/providers/microsoft.insights/actionGroups/my-ag"
},
"severity": "Sev3",
"enabled": true
}
}]
}Template ARM déploie une règle d'alerte KQL sur CPU>80%, évaluée toutes les min sur 5min. Remplacez {sub-id}/{rg}. Piège : odata.type exact pour action groups ; testez query en Log Analytics d'abord.
Query Logs via Python SDK
from azure.monitor.query import LogsQueryClient
from azure.identity import DefaultAzureCredential
import pandas as pd
credential = DefaultAzureCredential()
client = LogsQueryClient(credential)
workspace_id = "YOUR_WORKSPACE_ID" # Remplacez par az output
query = """
Perf
| where TimeGenerated > ago(1h)
| where ObjectName == "Processor" and CounterName == "% Processor Time"
| summarize AvgCPU = avg(CounterValue) by Computer
| order by AvgCPU desc
"""
timespan = "PT1H"
response = client.query_workspace(workspace_id, query, timespan=timespan)
results = []
for result_table in response.tables:
df = pd.DataFrame(result_table.rows, columns=[col.name for col in result_table.columns])
print(df.head())
results.append(df)
print(f"Query exécutée avec {len(results)} tables.")Utilise Azure SDK pour query KQL et Pandas pour analyse. Auth MSI ou CLI. Piège : timespan ISO8601 strict ; gérez PENDING states avec polling pour queries longues.
Workbook JSON pour Dashboard Custom
{
"version": "Notebook/1.0",
"items": [{
"type": 9,
"content": {
"version": "KqlItem/1.0",
"query": "Heartbeat | summarize count() by Computer | render barchart",
"dataSources": [{ "type": "Logs", "resourceIds": ["YOUR_WORKSPACE_ID"] }]
},
"name": "uniquename"
}, {
"type": 9,
"content": {
"version": "KqlItem/1.0",
"query": "Perf | where CounterName == '% Processor Time' | render timechart",
"dataSources": [{ "type": "Logs", "resourceIds": ["YOUR_WORKSPACE_ID"] }]
},
"name": "cpu-chart"
}],
"serializedInfo": { "id": "expert-workbook-2026" }
}JSON importable en Workbooks pour dashboard interactif. Ajoutez via Portal > Workbooks > Edit > Advanced > JSON. Piège : resourceIds absolus ; validez schema via API preview.
Bonnes pratiques
- Optimisez coûts : Utilisez Commitment Tiers >5PB/mois et Data Purge pour rétention dynamique.
- Sécurisez : RBAC minimal (Monitoring Reader) + Private Link pour workspace.
- Scalez queries : Partitions sur TimeGenerated, Materialized Views pour joins fréquents.
- Intégrez : Chaos Engineering avec Alertes + Logic Apps pour auto-réparation.
- ML avancé : Anomaly Detection sur métriques avec What-If analysis.
Erreurs courantes à éviter
- Ingestion explosive : Oublier de filtrer noisy logs (ex: DEBUG) → factures x10 ; utilisez Transformations.
- Queries lentes :
search *au lieu detable | where→ timeouts ; profilez avec Query Insights. - Alertes false positives : Seuils statiques sans baselining ; passez à Dynamic Thresholds.
- SDK auth fail : Credential non-managed ; forcez
DefaultAzureCredential(exclude_environment=True).
Pour aller plus loin
Approfondissez avec nos formations DevOps Azure. Docs officielles : Azure Monitor. Repo GitHub exemple : azure-monitor-samples. Intégrez Grafana via plugin Azure Monitor datasource.