Azure Monitor en Log Analytics: een werkende setup
Azure Monitor is het overkoepelende platform. Log Analytics is de plek waar de logs landen en waar je ze opvraagt. Application Insights is een apart beest bovenop Azure Monitor voor applicatiebewaking. Die drie door elkaar halen is de meest gemaakte fout bij mensen die voor het eerst observability op Azure opzetten.
Dit artikel gaat over een werkende basissetup: één Log Analytics workspace per omgeving, Diagnostic Settings op elke resource, en genoeg KQL om de meeste vragen zelf te beantwoorden.
Eén workspace per omgeving, niet per resource
De verleiding is om per resource of per team een eigen workspace aan te maken. Doe dat niet. Workspaces zijn duur als je ze vermenigvuldigt: je betaalt per GB ingestie en per GB retentie boven 90 dagen, en je verliest de mogelijkheid om logs van meerdere resources in één query te combineren.
Gebruik één workspace per omgeving: één voor productie, één voor non-productie. Als je strikte data-isolatie nodig hebt tussen teams of applicaties (compliance, multi-tenant), zijn workspace-tabel-level RBAC of Azure Monitor Private Link betere oplossingen dan losse workspaces.
Bekijk Azure Monitor en observability trainingen
De retentiekosten die je niet wil verrassen
Log Analytics geeft je standaard 30 dagen retentie gratis. Voor AKS Container Insights is er een aparte retentie-instelling die soms op 90 dagen staat, en dan loopt de rekening op.
Boven de gratis drempel betaal je per GB per dag. Dat klinkt goedkoop, maar grote volumes (meerdere TB/maand) kunnen snel oplopen. Stel een Daily Cap in per workspace als je budget bescherming wilt, maar weet dat dit logging stopt als het cap bereikt is. Voor productie wil je dat misschien liever niet.
De slimme aanpak: gebruik Basic Logs voor tabellen met hoog volume en lage queryfrequentie (diagnostic logs, audit logs). Basic Logs zijn 80% goedkoper per GB maar hebben beperkingen: je kunt er maximaal 30 dagen data in bewaren en queries zijn trager. Voor operationele logs die je dagelijks nodig hebt, gebruik Analytics Logs.
Diagnostic Settings: op elke resource, niet vergeten
Azure-resources sturen standaard niets naar Log Analytics. Je moet Diagnostic Settings aanzetten per resource, en kiezen welke categorieën je wilt ingesturen.
De meest handige manier om dit op schaal te doen is Azure Policy. Microsoft heeft ingebouwde policies zoals Deploy Diagnostic Settings for Storage Accounts to Log Analytics workspace die je op management group of subscription niveau kunt toewijzen. Hiermee worden Diagnostic Settings automatisch aangemaakt voor nieuwe resources.
Categorieën die bijna altijd de moeite waard zijn: AuditEvent (Key Vault), AzureActivity (wie deed wat in de subscriptie), StorageRead/Write/Delete (voor gevoelige storage accounts), en kube-audit (AKS).
Application Insights: apart maar verbonden
Application Insights is geen vervanging voor Log Analytics, het is een aanvulling. Het richt zich op applicatiebewaking: request rates, response times, uitzonderingen, dependencies. De data van Application Insights komt standaard terecht in een Log Analytics workspace als je een workspace-based resource aanmaakt (de huidige standaard).
Dat betekent dat je Application Insights-data en je andere Azure Monitor-data in dezelfde workspace zitten en je ze in één KQL-query kunt combineren. Klassieke (non-workspace-based) Application Insights resources doen dat niet en zijn deprecated.
Gebruik één Application Insights-resource per applicatie, niet per omgeving. Maak onderscheid via cloud_RoleName en filter daar in je dashboards op.
Vijf KQL-queries om mee te beginnen
Deze queries werken in Log Analytics en geven je een snelle kijk in de gezondheid van je omgeving.
Heartbeat van alle agents, laatste vijf minuten:
Heartbeat
| where TimeGenerated > ago(5m)
| summarize LastCall = max(TimeGenerated) by Computer
| order by LastCall asc
Wie heeft de laatste 24 uur iets veranderd in de subscriptie:
AzureActivity
| where TimeGenerated > ago(24h)
| where ActivityStatusValue == "Success"
| project TimeGenerated, Caller, OperationNameValue, ResourceGroup
| order by TimeGenerated desc
Top vijf processen op CPU over alle VMs:
Perf
| where TimeGenerated > ago(1h)
| where ObjectName == "Process" and CounterName == "% Processor Time"
| summarize AvgCPU = avg(CounterValue) by Computer, InstanceName
| top 5 by AvgCPU desc
Mislukte inlogpogingen op Key Vault:
AzureDiagnostics
| where ResourceType == "VAULTS" and ResultType == "Unauthorized"
| project TimeGenerated, identity_claim_upn_s, requestUri_s
| order by TimeGenerated desc
Geheugengebruik per VM, gemiddeld over het laatste uur:
Perf
| where TimeGenerated > ago(1h)
| where ObjectName == "Memory" and CounterName == "% Used Memory"
| summarize AvgMemory = avg(CounterValue) by Computer
| order by AvgMemory desc
Wat je daarna bouwt
Een werkende setup is de basis. Daarna bouw je er alerts bovenop (Azure Monitor Alerts op KQL-queries), dashboards (Azure Workbooks of Grafana via de Log Analytics Grafana plugin), en uiteindelijk runbooks als je stappen wilt automatiseren bij bepaalde condities.
Maar begin met de basis: één workspace per omgeving, Diagnostic Settings op elke resource, en een handvol queries die je begrijpt. De rest voeg je toe als je weet wat je nodig hebt.