ms-ai-architect/skills/ms-ai-governance/references/monitoring-observability/endpoint-health-and-capacity-planning.md
Kjell Tore Guttormsen d60bbd4bff chore(ms-ai-architect): KB checkpoint refresh — 30 files (critical 9 + high batch 1) [skip-docs]
- Critical bucket (9 files): substantive content updates basert på MCP-fetch
  - enterprise-governance: DSPM front door, AI-app-kategorier (3), single-tenant Entra ID
  - rag-cost-optimization, observability, ai-services-enterprise, multi-model-strategy: dato-bump
  - deterministic-cost: Copilot Credits offisiell common currency (2025-09-01), CCCU prepurchase
  - gpt5-gpt41-pricing: utvidet Copilot Studio modell-lineup (GPT-5.2, GPT-5.3, Claude 4.6, Grok 4.1)
  - vector-storage, request-batching: dato-bump (DS allerede dekkende)

- High batch 1 (21 files, 10-30): Last updated 2026-04→2026-05 dato-bump
  Substantive Microsoft Learn-endringer var marginale per fetch — kosmetiske oppdateringer.

Resterende: high batch 2 (filer 31-53, 23 filer) i ny sesjon. Se NEXT-SESSION-PROMPT.local.md.
2026-05-05 14:28:35 +02:00

648 lines
25 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Endpoint Health Monitoring and Capacity Planning
**Last updated:** 2026-05
**Status:** GA
**Category:** Monitoring & Observability
---
## Introduksjon
Endpoint-overvåkning og kapasitetsplanlegging er kritisk for å opprettholde høy tilgjengelighet og forutsigbar ytelse i produksjons-AI-systemer. Azure OpenAI og andre Microsoft AI-tjenester tilbyr omfattende overvåkningsverktøy gjennom Azure Monitor, som samler inn både plattformmetrikkdata (automatisk) og ressurslogger (konfigureres via diagnostic settings).
Effektiv overvåkning involverer tre dimensjoner: **tilstandssjekk** (health monitoring) av endepunkt, **kapasitetsplanlegging** (quota og throughput-grenser), og **proaktiv alerting**. Sammen gir disse innsikt i både nåværende driftsstatus og fremtidige skaleringsmuligheter.
Utfordringen for arkitekter er å balansere kostnad (monitoreringsdata lagres i Log Analytics), ytelse (rate limits og throttling), og pålitelighet (SLA og tilgjengelighet). Azure OpenAI har ingen latens-SLA for Standard-tilbudet, men Provisioned Throughput Units (PTU) tilbyr forutsigbar ytelse for produksjonskritiske workloads.
## Kjernekomponenter
### Azure Monitor Platform Metrics
| Metrikk | Beskrivelse | Tidsromdetaljering | DS Export |
|---------|-------------|-------------------|-----------|
| `AzureOpenAIRequests` | Totalt antall API-kall over tid | PT1M (1 minutt) | Ja |
| `AzureOpenAIAvailabilityRate` | `(Total Calls - Server Errors) / Total Calls` (%) | PT1M | Nei |
| `TokensGenerated` | Completion tokens generert | PT1M | Ja |
| `ActiveTokens` | Totale tokens (prompt + completion) | PT1M | Ja |
| `PTUUtilization` | Prosentvis bruk av PTU-kapasitet | PT1M | Ja |
| `ProcessingTime` | End-to-end latency (ms) | PT1M | Ja |
**Viktig:** Platform metrics samles automatisk uten konfigurasjon, men for å analysere i Log Analytics må diagnostic settings aktiveres.
### Quota og Rate Limits
| Konsept | Forklaring | Enhet | Håndtering |
|---------|------------|-------|-----------|
| **Tokens Per Minute (TPM)** | Maksimal throughput per deployment | TPM | Settes ved deployment, kan justeres etterpå |
| **Requests Per Minute (RPM)** | Maks antall requests per minutt | RPM | Beregnes automatisk fra TPM (varierer per modell) |
| **Quota** | Regionbasert grense per modell/subscription | TPM | Forespørres via support |
| **429 Throttling** | HTTP-responskode når rate limit overstiges | - | Implementer retry-logic |
**RPM/TPM-ratio varierer per modell:**
| Modell | 1 Unit Capacity | RPM | TPM |
|--------|----------------|-----|-----|
| Eldre chat-modeller | 1 | 6 | 1,000 |
| o1, o1-preview | 1 | 1 | 6,000 |
| o3 | 1 | 1 | 1,000 |
| o3-mini, o1-mini | 1 | 1 | 10,000 |
**Viktig:** Deployment TPM kan IKKE overskride subscription quota for den modellen i den regionen.
### Diagnostic Settings og Log Analytics
```bash
# Konfigurer diagnostic settings via Azure Portal:
# Azure OpenAI resource → Monitoring → Diagnostic settings → Add diagnostic setting
# Velg:
# - Logs: AzureDiagnostics (alle operasjoner)
# - Metrics: AllMetrics (for historisk analyse)
# - Destination: Log Analytics workspace
```
**KQL-eksempel for tilstandssjekk:**
```kql
AzureDiagnostics
| where TimeGenerated > ago(1h)
| where Category == "RequestResponse"
| summarize
TotalRequests = count(),
SuccessRequests = countif(ResultSignature == "200"),
ServerErrors = countif(ResultSignature >= "500"),
ClientErrors = countif(ResultSignature >= "400" and ResultSignature < "500"),
AvgDurationMs = avg(DurationMs)
by bin(TimeGenerated, 5m)
| extend AvailabilityRate = round((SuccessRequests * 100.0) / TotalRequests, 2)
| project TimeGenerated, TotalRequests, AvailabilityRate, AvgDurationMs, ServerErrors
```
### Out-of-Box Dashboards
Azure OpenAI tilbyr to innebygde dashboards:
1. **Azure Portal Dashboard** (Overview-pane)
- HTTP Requests (total, status codes, feilrate)
- Tokens-Based Usage (prompt, completion, total tokens)
- PTU Utilization (kun for PTU-deployments)
- Fine-tuning metrics
2. **AI Foundry Metrics Dashboard**
- Tilgjengelig via "Go to AI Foundry portal" → Tools → Metrics dashboard
- Samme kategorier som Portal dashboard, med mer interaktivitet
**Anbefaling:** Start med disse dashboards, deretter bygg custom dashboards i Grafana eller Power BI for cross-service-korrelasjon.
## Arkitekturmønstre
### 1. Multi-Deployment Failover (High Availability)
**Scenario:** Produksjonsapplikasjon krever 99.9% tilgjengelighet.
**Mønster:**
- Opprett to deployments i forskjellige regioner (eks. East US + West Europe)
- Implementer application-side health checks (HTTP 200 status)
- Bruk Azure Front Door eller Traffic Manager for automatisk failover
- Overvåk begge endpoints med Azure Monitor metric alerts
**Fordeler:**
- Geografisk redundans
- Automatisk failover ved regional outage
- Lavere latens for distribuerte brukere
**Ulemper:**
- Dobbelt quota-behov (2x TPM)
- Økt kompleksitet i applikasjonskode
- Kostnad for to deployments
**KQL for cross-region health check:**
```kql
AzureDiagnostics
| where Resource in ("openai-eastus-01", "openai-westeu-01")
| where TimeGenerated > ago(15m)
| summarize
ErrorRate = countif(ResultSignature >= "500") * 100.0 / count(),
P95Latency = percentile(DurationMs, 95)
by Resource, bin(TimeGenerated, 1m)
| where ErrorRate > 1.0 or P95Latency > 2000 // Alert if >1% errors or >2s latency
```
### 2. Dynamic Quota (Preview)
**Scenario:** Varierende last med sporadiske traffic spikes.
**Mønster:**
- Aktiver Dynamic Quota på Standard-deployment
- Sett base TPM til gjennomsnittlig forventet last
- Dynamic Quota tillater opportunistic burst utover base TPM når kapasitet er tilgjengelig
**Fordeler:**
- Lavere 429-feilrate under spikes
- Ingen ekstra kostnad (betaler kun for faktisk bruk)
- Automatisk skalering uten konfigurasjon
**Ulemper:**
- Ikke garantert — avhenger av regional kapasitet
- Ingen latens-SLA (Standard offer)
- Kan IKKE redusere TPM under base-grensen
**Kode-aktivering (REST API):**
```bash
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/deployments/{deploymentName}?api-version=2023-05-01
{
"sku": {
"name": "Standard",
"capacity": 100 // Base TPM = 100K
},
"properties": {
"model": { "format": "OpenAI", "name": "gpt-4o", "version": "2024-11-20" },
"dynamicThrottlingEnabled": true // Enable dynamic quota
}
}
```
### 3. Provisioned Throughput (PTU) for Mission-Critical
**Scenario:** Offentlig sektor-applikasjon med strenge latens- og tilgjengelighetskrav.
**Mønster:**
- Bruk PTU i stedet for Standard (pay-as-you-go)
- PTU gir dedikert kapasitet med forutsigbar latens
- Overvåk `PTUUtilization`-metrikk for kapasitetsplanlegging
- Sett alert hvis utilization > 80% (signal om behov for oppgradering)
**Fordeler:**
- Latens-SLA (garantert ytelse)
- Ingen 429-throttling innenfor PTU-kapasitet
- Forutsigbar månedlig kostnad
**Ulemper:**
- Høyere kostnad sammenlignet med Standard
- Krever commitment (1 måned eller 1 år)
- Overprovisionering hvis last varierer mye
**Alert-regel for PTU-kapasitet:**
```kql
AzureMetrics
| where MetricName == "PTUUtilization"
| where TimeGenerated > ago(5m)
| summarize AvgUtilization = avg(Average) by Resource
| where AvgUtilization > 80
// Trigger alert: PTU nærmer seg kapasitetsgrense
```
## Beslutningsveiledning
### Valg av Deployment-type
| Kriterium | Standard (pay-as-you-go) | Standard + Dynamic Quota | PTU (Provisioned) |
|-----------|--------------------------|-------------------------|-------------------|
| **Kostnad** | Betaler per token | Samme (ingen ekstra kostnad) | Høyere (månedlig commitment) |
| **Latens-SLA** | Nei | Nei | Ja |
| **Burst-håndtering** | 429 ved TPM-grense | Opportunistic burst | Ingen throttling innenfor PTU |
| **Variabel last** | God for testing/dev | God for prod med spikes | Dårlig (sløser kapasitet) |
| **Compliance-krav** | OK | OK | Bedre (dedikert kapasitet) |
**Anbefaling for norsk offentlig sektor:**
- **Utvikling/test:** Standard
- **Produksjon (ikke-kritisk):** Standard + Dynamic Quota
- **Produksjon (kritisk, SLA-krav):** PTU
### Quota-planlegging
**Steg-for-steg:**
1. **Estimer baseline TPM:**
- Gjennomsnittlig requests/min × gjennomsnittlig tokens/request
- Eksempel: 10 req/min × 2000 tokens = 20,000 TPM baseline
2. **Legg til buffer for spikes:**
- Anbefalt: 1.5x - 2x baseline
- Eksempel: 20K TPM × 1.5 = 30K TPM
3. **Sjekk regional quota:**
```bash
az cognitiveservices usage list --location norwayeast
# Eller via Portal: Management → Quota
```
4. **Request quota increase hvis nødvendig:**
- Bruk [quota increase form](https://aka.ms/oai/stuquotarequest)
- Prioritet gis til kunder med aktiv bruk (ikke "just in case")
5. **Overvåk faktisk bruk:**
```kql
AzureDiagnostics
| where TimeGenerated > ago(7d)
| extend TokenCount = toint(properties_s.estimatedTokens)
| summarize TotalTokens = sum(TokenCount) by bin(TimeGenerated, 1h)
| extend TPM = TotalTokens / 60
| summarize AvgTPM = avg(TPM), P95TPM = percentile(TPM, 95)
```
### Vanlige feil
| Feil | Årsak | Løsning |
|------|-------|---------|
| **429 "Rate Limit Exceeded"** | TPM/RPM quota overskredet | Øk deployment TPM eller request quota increase |
| **429 "High demand"** | Regional kapasitet utilgjengelig | Retry med exponential backoff, eller bytt region |
| **Lav AvailabilityRate (<99%)** | Server errors (5xx) | Sjekk Azure Service Health, implementer retry-logic |
| **Høy latens (>5s)** | Standard offer under load | Vurder PTU, eller optimaliser prompts (reduser tokens) |
| **Deployment creation fails** | Quota tilgjengelig, men ingen kapasitet i region | Bruk capacity finder API, eller velg annen region |
### Røde flagg
- **Utilization > 80% over tid:** Signal om å øke quota/PTU
- **Error rate > 1%:** Indikerer ustabilitet eller kapasitetsproblem
- **Latens P95 > 2x P50:** Tyder på intermittent throttling eller regional load
- **Quota 100% allocated, men lav faktisk bruk:** Over-provisjonering — reduser deployments
## Integrasjon med Microsoft-stakken
### Azure Monitor Alerts
**Metric alert for availability:**
```bash
# Anbefalt CLI-syntaks (2026): Bruk condition sub-command for betingelser
scope=$(az cognitiveservices account show \
--resource-group "rg-ai-prod" --name "{account}" --output tsv --query id)
action=$(az monitor action-group show \
--resource-group "rg-ai-prod" --name "{actionGroup}" --output tsv --query id)
condition=$(az monitor metrics alert condition create \
--aggregation Average \
--metric "AzureOpenAIAvailabilityRate" \
--op LessThan \
--type static \
--threshold 99 \
--output tsv)
az monitor metrics alert create \
--name "OpenAI-LowAvailability" \
--resource-group "rg-ai-prod" \
--scopes $scope \
--condition $condition \
--action $action \
--window-size 5m \
--evaluation-frequency 1m \
--description "Alert hvis availability < 99% over 5 min"
```
*(Verified MCP 2026-04 — nytt mønster med `condition create` sub-command)*
**Log alert for 429 errors:**
```bash
az monitor scheduled-query create \
--name "OpenAI-Throttling" \
--resource-group "rg-ai-prod" \
--scopes "/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.CognitiveServices/accounts/{account}" \
--condition "count > 10" \
--condition-query "AzureDiagnostics | where ResultSignature == '429' | count" \
--window-size 5m \
--evaluation-frequency 5m \
--action "/subscriptions/{sub}/resourceGroups/{rg}/providers/microsoft.insights/actionGroups/{actionGroup}"
```
**Oppdatert metric alert CLI-syntaks (2026):** Microsoft anbefaler nå sub-kommandoer for betingelser og dimensjoner: *(Verified MCP 2026-04)*
```bash
# Opprett betingelse som variabel
condition=$(az monitor metrics alert condition create \
--aggregation Average \
--metric "AzureOpenAIAvailabilityRate" \
--op LessThan \
--type static \
--threshold 99 \
--output tsv)
# Opprett metric alert med betingelse-variabel
az monitor metrics alert create \
--name "OpenAI-LowAvailability-v2" \
--resource-group "rg-ai-prod" \
--scopes "/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.CognitiveServices/accounts/{account}" \
--condition $condition \
--description "Alert hvis availability < 99% over 5 min" \
--window-size 5m \
--evaluation-frequency 1m \
--action "/subscriptions/{sub}/resourceGroups/{rg}/providers/microsoft.insights/actionGroups/{actionGroup}"
```
### Application Insights Integration
For applikasjoner som bruker Azure OpenAI, integrer Application Insights for end-to-end observability:
```python
from azure.monitor.opentelemetry import configure_azure_monitor
from openai import AzureOpenAI
# Konfigurer Application Insights
configure_azure_monitor(connection_string="InstrumentationKey=...")
# OpenAI-kall vil automatisk bli tracet
client = AzureOpenAI(
api_key="...",
api_version="2024-10-21",
azure_endpoint="https://..."
)
response = client.chat.completions.create(...)
# Latency, tokens, success/fail logges automatisk til App Insights
```
### Power BI og Grafana
**Power BI:**
- Koble til Log Analytics workspace
- Import KQL-queries som datasets
- Bygg executive dashboards med availability, cost, og usage trends
**Grafana:**
- Bruk Azure Monitor datasource plugin
- Visualiser real-time metrics (latency, throughput, error rate)
- Sett opp on-call alerting via PagerDuty/Slack
**Eksempel Grafana panel query (PromQL-style via Azure Monitor):**
```promql
avg_over_time(AzureOpenAIAvailabilityRate[5m])
```
### Azure Service Health
Overvåk planlagte vedlikehold og regional outages:
```bash
az monitor activity-log alert create \
--name "OpenAI-ServiceHealth" \
--resource-group "rg-ai-prod" \
--condition category=ServiceHealth \
--action-group "/subscriptions/{sub}/resourceGroups/{rg}/providers/microsoft.insights/actionGroups/{actionGroup}" \
--description "Alert for Azure OpenAI service health events"
```
## Offentlig sektor (Norge)
### GDPR og datasuverenitet
**Logging-retensjon:**
- Log Analytics data lagres i valgt region (Norway East anbefales)
- Sett retention policy i henhold til organisasjonens retningslinjer (default: 30 dager)
- For compliance, vurder eksport til Azure Storage (immutable blobs)
**Sensitive data i logs:**
- Azure OpenAI logger IKKE prompt/completion-innhold som standard
- Men diagnostic logs inneholder metadata (timestamps, model, token counts)
- Bruk Private Link for Azure Monitor hvis ekstra datasikkerhet kreves
### Forvaltningsloven og etterprøvbarhet
**Revisjonsspor:**
- Aktiver diagnostic settings for alle produksjons-deployments
- Eksporter logs til langtidslagring (Azure Storage Archive tier)
- Inkluder `CorrelationId` i requests for å spore beslutningsflyt
**KQL for audit trail:**
```kql
AzureDiagnostics
| where Category == "RequestResponse"
| extend UserId = tostring(properties_s.userId)
| extend ModelName = tostring(properties_s.modelName)
| extend TokensUsed = toint(properties_s.totalTokens)
| project TimeGenerated, UserId, ModelName, TokensUsed, OperationName, ResultSignature
| order by TimeGenerated desc
```
### AI Act og risikoklassifisering
**High-risk AI systems (offentlig forvaltning):**
- Krav om logging av alle AI-beslutninger
- Overvåkning av modell-drift (data distribution shifts)
- Azure Monitor gir grunnlag for compliance-rapporter
**Anbefalt arkitektur:**
- AI-request → Application Insights (full trace)
- Endpoint metrics → Azure Monitor (availability, latency)
- Audit logs → Log Analytics → Azure Storage (langtidsarkiv)
### Schrems II og data residency
**Norway East region:**
- Velg Norway East for både Azure OpenAI resource OG Log Analytics workspace
- Verifiser at diagnostic settings IKKE sender data til utenlandske regioner
- Azure OpenAI data processing skjer i EU (selv om kontrollplan er globalt)
## Kostnad og lisensiering
### Prismodell for overvåkning
| Komponent | Prismodell | Estimert kostnad (per måned) |
|-----------|-----------|------------------------------|
| **Platform metrics** | Gratis (innsamling) | 0 NOK |
| **Log Analytics ingestion** | Per GB innsamlet | ~50-200 NOK per GB |
| **Log Analytics retention** | Gratis (første 31 dager), deretter per GB | ~10 NOK per GB/måned (etter 31 dager) |
| **Alerts** | Per regel per måned | ~1-5 NOK per regel |
| **Application Insights** | Per GB innsamlet | ~50-200 NOK per GB |
**Kostnadsoptimalisering:**
- Bruk sampling i Application Insights (f.eks. 10% av requests)
- Sett opp data export til Azure Storage for langtidslagring (billigere enn Log Analytics retention)
- Bruk Azure Monitor Baseline Alerts (AMBA) templates i stedet for custom queries (mindre compute)
### Lisenskrav
**Azure Monitor:**
- Inkludert i Azure subscription (ingen separat lisens)
- Log Analytics workspace krever subscription med Owner/Contributor-rolle for oppsett
**Roller for quota-visning:**
- **Cognitive Services Usages Reader:** Minimal rolle for å se quota på tvers av subscription (anbefalt)
- **Reader:** Gir også quota-innsyn, men bredere tilgang enn nødvendig
- **Viktig:** Rollen MÅ være satt på subscription-nivå, ikke resource-nivå
**Eksempel Azure CLI:**
```bash
az role assignment create \
--assignee "user@example.com" \
--role "Cognitive Services Usages Reader" \
--scope "/subscriptions/{subscriptionId}"
```
## For arkitekten (Cosmo)
### Spørsmål å stille kunden
1. **Tilgjengelighetskrav:**
- Hva er akseptabel downtime per måned? (99.9% = ~43 min/måned)
- Finnes det kritiske tidsvinduer (f.eks. kontortid) med strengere SLA?
2. **Last-profil:**
- Gjennomsnittlig requests per minutt? Peak vs. gjennomsnitt?
- Forventes det sesongvariasjoner eller plutselige spikes?
3. **Latenskrav:**
- Hva er akseptabel end-to-end responstid? (P50, P95, P99)
- Er dette en batch-prosess eller interaktiv chat?
4. **Compliance:**
- Kreves revisjonsspor for alle AI-requests? (Forvaltningsloven)
- Data residency-krav? (Norge, EU, eller globalt OK?)
5. **Eksisterende overvåkning:**
- Brukes det allerede Log Analytics/Application Insights i organisasjonen?
- Finnes det SOC (Security Operations Center) som skal motta alerts?
6. **Budsjettrammer:**
- Hva er månedlig budsjett for AI-tjenester (inkl. monitoring)?
- Preferanse for pay-as-you-go vs. commitment (PTU)?
7. **Skaleringsplan:**
- Forventes brukervekst neste 6-12 måneder?
- Multi-region deployment planlagt?
8. **Feiltoleranse:**
- Kan applikasjonen håndtere retry-logic? (429-errors)
- Finnes det fallback-strategi hvis Azure OpenAI er nede?
### Fallgruver
1. **Over-provisjonering av quota:**
- Feil: Forespørre 500K TPM "for sikkerhets skyld" uten faktisk bruk
- Konsekvens: Azure kan avslå request, eller allokere quota som ikke brukes (sløsing)
- Løsning: Start med 1.5x estimert baseline, øk basert på faktisk bruk
2. **Glemmer diagnostic settings:**
- Feil: Forventer at logs samles automatisk
- Konsekvens: Ingen historikk ved troubleshooting/incidents
- Løsning: Aktiver diagnostic settings DAG 1 i produksjon
3. **Ingen alert-strategi:**
- Feil: Overvåker dashboards manuelt
- Konsekvens: Oppdager problemer først når brukere klager
- Løsning: Sett opp metric alerts for availability + log alerts for 429-errors
4. **Ignorerer PTU for kritiske workloads:**
- Feil: Bruker Standard offer for produksjonskritisk applikasjon
- Konsekvens: Variabel latens, ingen SLA, throttling under load
- Løsning: Vurder PTU hvis tilgjengelighet > 99.5% er påkrevd
5. **Cross-region failover uten testing:**
- Feil: Setter opp multi-region, men tester aldri failover
- Konsekvens: Oppdager bugs i failover-logikk under reell outage
- Løsning: Kjør chaos engineering (simuler regional failure månedlig)
6. **Misforstår Dynamic Quota:**
- Feil: Forventer garantert burst over base TPM
- Konsekvens: Fortsatt får 429-errors under spikes
- Løsning: Dynamic Quota er opportunistic, IKKE garantert — planer for base TPM som absolutt minimum
### Anbefalinger per modenhetsnivå
**Nivå 1: Pilot/POC**
- Bruk Standard deployment (pay-as-you-go)
- Aktiver IKKE diagnostic settings (spar kostnader)
- Manuell sjekk av Portal dashboard ukentlig
- Quota: Start med 10K TPM
**Nivå 2: Testing/Staging**
- Bruk Standard + Dynamic Quota
- Aktiver diagnostic settings (7 dagers retention)
- Sett opp 1-2 metric alerts (availability < 95%)
- Quota: 50-100K TPM basert på testvolum
**Nivå 3: Early Production**
- Bruk Standard + Dynamic Quota (eller PTU hvis SLA-krav)
- Diagnostic settings med 30 dagers retention
- Metric alerts (availability, latency) + log alerts (429-errors)
- Application Insights integration
- Quota: Baseline + 50% buffer
- Multi-region vurderes (men ikke obligatorisk ennå)
**Nivå 4: Mission-Critical Production**
- PTU deployment (dedikert kapasitet)
- Multi-region failover (minimum 2 regioner)
- Diagnostic settings med 90+ dagers retention (eller export til Storage)
- Full alert-suite (availability, latency, quota utilization, PTU saturation)
- Application Insights + custom dashboards (Grafana/Power BI)
- Quarterly capacity planning reviews
- Quota: Baseline + 100% buffer (eller PTU-sizing med 20% headroom)
**Spesielt for norsk offentlig sektor (nivå 4):**
- Log Analytics workspace i Norway East
- Export av logs til Azure Storage Archive (compliance)
- Azure Service Health alerts
- Inkluder CorrelationId i alle requests (revisjonsspor)
- Quarterly compliance reports til IT-sikkerhet/personvern
## Kilder og verifisering
### Microsoft Learn (Verified via MCP)
1. **Monitor Azure OpenAI:**
https://learn.microsoft.com/en-us/azure/ai-foundry/openai/how-to/monitor-openai
*Confidence: Verified* — Komplett guide til diagnostics, metrics, alerts, og KQL-queries
2. **Manage Azure OpenAI quota:**
https://learn.microsoft.com/en-us/azure/ai-foundry/openai/how-to/quota
*Confidence: Verified* — TPM/RPM-allokering, quota requests, 429-feilhåndtering
3. **Azure OpenAI quotas and limits:**
https://learn.microsoft.com/en-us/azure/ai-foundry/openai/quotas-limits
*Confidence: Verified* — Rate limits per modell, Usage tiers, regional constraints
4. **Dynamic quota (Preview):**
https://learn.microsoft.com/en-us/azure/ai-foundry/openai/how-to/dynamic-quota
*Confidence: Verified* — Opportunistic burst-kapasitet for Standard deployments
5. **Supported metrics for Microsoft.CognitiveServices/accounts:**
https://learn.microsoft.com/en-us/azure/azure-monitor/reference/supported-metrics/microsoft-cognitiveservices-accounts-metrics
*Confidence: Verified* — Fullstendig metrikk-referanse (Azure OpenAI, Content Safety, etc.)
6. **Azure Monitor REST API reference:**
https://learn.microsoft.com/en-us/rest/api/monitor/operation-groups
*Confidence: Verified* — API for metrics export og programmatic access
7. **Service limits in Azure AI Search:**
https://learn.microsoft.com/en-us/azure/search/search-limits-quotas-capacity
*Confidence: Verified* — Throttling patterns (relevant for RAG-arkitekturer)
8. **Monitor model quality and endpoint health (Databricks):**
https://learn.microsoft.com/en-us/azure/databricks/machine-learning/model-serving/monitor-diagnose-endpoints
*Confidence: Verified* — Verktøy: ephemeral service logs, OpenTelemetry for custom endpoints (Unity Catalog Delta tables, langtidsretensjon), build logs (30-dagers retensjon), endpoint health metrics (siste 14 dager), og AI Gateway-enabled inference tables (automatisk logging av requests/responses til Delta tables). *(Verified MCP 2026-04)*
### Code Samples (Verified via MCP)
9. **Azure Monitor Query Metrics (Python SDK):**
https://learn.microsoft.com/en-us/python/api/azure-monitor-querymetrics/azure.monitor.querymetrics.metricsclient
*Confidence: Verified* — Kodeeksempler for programmatisk metrics-query
10. **Azure CLI metrics alert creation:**
https://learn.microsoft.com/en-us/azure/azure-monitor/alerts/azure-cli-metrics-alert-sample
*Confidence: Verified* — CLI-kommandoer for metric alerts (brukt i eksempler over)
### Seksjon-konfidensgradering
| Seksjon | Kilde | Konfidens |
|---------|-------|-----------|
| Kjernekomponenter | Microsoft Learn (MCP) | Verified |
| Quota og Rate Limits | Microsoft Learn (MCP) | Verified |
| Diagnostic Settings | Microsoft Learn (MCP) | Verified |
| Arkitekturmønstre (Failover) | Microsoft Learn + Baseline Knowledge | Verified (design), Baseline (best practices) |
| Dynamic Quota | Microsoft Learn (MCP) | Verified |
| PTU-mønster | Microsoft Learn + Baseline Knowledge | Verified (features), Baseline (trade-offs) |
| Azure Monitor Alerts | Microsoft Learn (MCP, code samples) | Verified |
| Application Insights | Baseline Knowledge + Azure Docs | Baseline |
| Offentlig sektor | Baseline Knowledge (GDPR, AI Act) | Baseline |
| Kostnadsmodell | Azure Pricing (public) | Baseline (tall er estimerte, krever priskalkulator for nøyaktighet) |
**Samlet konfidens:** 85% Verified (core features), 15% Baseline (best practices, offentlig sektor-spesifikt)
**Sist verifisert:** 2026-04 (MCP-searches mot Microsoft Learn)