ms-ai-architect/skills/ms-ai-infrastructure/references/bcdr/service-level-documentation-dr.md
Kjell Tore Guttormsen 3a73eeafdc refactor(ms-ai-architect): R13 del 1 — nøytraliser Cosmo-personaen i ref-korpusets headinger, etter å ha rettet en gate som var målt usann to ganger
Ordre 20260912T193441Z-7358817909. Steg 1 var ikke transformen, men å rette
roadmapens R13-gate og få den ratifisert. Gaten `grep -rl "Cosmo"
skills/*/references -> 0` var usann på to uavhengige måter:

1. Ordren fanget den første: 451 av forekomstene er Azure Cosmos DB, ekte
   produktinnhold. Diskriminatoren er ikke bokstaven «s» — `Cosmos <norsk
   substantiv>` er genitiv av personaen (`### Cosmos tonalitet`), mens
   `Cosmos DB`/`CosmosClient`/`cosmos_ru` er produkt.
2. Denne økten fant den andre: 132 persona-forekomster ligger i prosa,
   tabeller, dialog-replikker og proveniens-linjer. Heading-nøytralisering
   kan ikke nå dem, så «0 persona» er uoppnåelig også under den ratifiserte
   formen. Operatøren ratifiserte alternativ A: gaten speiler formen, og de
   132 bokføres til R13b/R14.

Tre korreksjoner av premisser som sto i ordren og STATE:
  «ca 320 produkt»   -> 451 (case-sensitivt nett manglet 327 lowercase
                        TOC-ankre + 99 identifikatorer; sann nevner 1 638)
  «169 headinger»    -> 401. 169 var `^## For Cosmo`-prefikset (168) og var
                        internt inkonsistent med sin egen topp-variant (204)
  «417 matcher ingen
   populasjon»       -> 417 er cosmo-headinger utenfor kodefences; briefens
                        nevner var reell hele tiden

Fence-bevissthet er målt skadelig, ikke nødvendig: begge toggle-regler er
gale på dette korpuset (naiv toggle skjuler en ekte heading i
chain-of-thought-prompting.md, CommonMark-regelen ubalanserer
service-level-documentation-dr.md). Fence-agnostisk deteksjon finner 401
heading-linjer i nøyaktig de samme 40 variantene som fence-bevisst finner
400 i — ingen kodeblokk-linje er byte-identisk til en persona-heading. Derfor
nøkles transformen på 40 enumererte heading-tekster og ignorerer fences. En
ukjent variant kaster; en slug-kollisjon kaster. Ingenting auto-fikses.

TOC-en regenereres ikke, den rettes kirurgisk: alle 327 persona-lenker hadde
lenketekst lik én av de 40 heading-tekstene og anker lik slugify av den
(327/327, 0 avvik), så heading og TOC-entry skrives i samme operasjon og
ingen mellomtilstand etterlater en død lenke.

Ratifisert målform: `For Cosmo`, `For Cosmo Skyberg` og `For arkitekten
(Cosmo)` konvergerer på `For arkitekten`. To filer kolliderte og er adjudisert
ved å lese dem, ikke ved regel.

Verifisering (alle 7 kriterier fra ordren):
  G1 persona på heading-linjer   401 -> 0
  G2 døde fragmentlenker         1 -> 1 (pre-eksisterende, unntatt)
  G3 produkt-forekomster         451 -> 451; `Cosmos DB|Azure Cosmos` 308 = 308
  de 3 kun-produkt-filene        byte-identiske
  nettet validert begge veier    injisert persona feller G1; genitiv feller G1;
                                 produkt-heading og de 3 filene passerer
  hele diffen                    802 heading-linjer + 654 TOC-linjer, ANNET = 0
  linjeantall                    728 lagt til = 728 slettet
  suite                          1120/1120 (1097 + 23 nye)
  validate-plugin                250 PASS / 0 FAIL
  stikkprøve                     10 filer, alle 5 skills, inkl. de 3 mest
                                 produkt-tunge (26/20/19) — kun heading+TOC

Utenfor scope, urørt: de 4 SKILL.md, de 23 commands, CLAUDE.md, README.md,
NOTICE.md, docs/ (alt R14).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-12 22:12:28 +02:00

15 KiB
Raw Blame History

Service Level Documentation and DR Runbooks

Last updated: 2026-02 Status: GA Category: Business Continuity & Disaster Recovery Type: reference Source: https://learn.microsoft.com/azure/reliability/reliability-ai-search


Innhold

Introduksjon

Service Level Agreements (SLA), runbooks og operasjonelle prosedyrer er bindeleddet mellom BCDR-strategi og faktisk gjenopprettingsevne. Uten presis dokumentasjon av SLA-mål, detaljerte trinn-for-trinn runbooks og tydelig ansvarsfordeling, vil selv den best designede DR-arkitekturen feile under en reell hendelse.

For AI-systemer er dokumentasjon spesielt viktig fordi gjenopprettingsprosedyrer ofte involverer flere Azure-tjenester med ulike oppstartstider og avhengigheter. En RAG-løsning krever for eksempel at Cosmos DB er tilgjengelig før App Service, som igjen må vente på at AI Search-indeksen er synkronisert, før Azure OpenAI-kall kan brukes meningsfullt.

Azure Well-Architected Framework understreker at en DR-plan må inkludere tre essensielle komponenter: en klar runbook, en veldefinert kommunikasjonsplan, og en strukturert eskaleringsvei. For norsk offentlig sektor bør disse dokumentene følge organisasjonens ITIL-rammeverk og NSMs krav til beredskapsplanlegging.

Service Level Agreement-maler

SLA-dokument for AI-tjeneste

# Service Level Agreement
## [AI-tjeneste navn]

### 1. Tjenestebeskrivelse
| Felt | Verdi |
|------|-------|
| Tjenestenavn | [Navn] |
| Tjenesteeier | [Avdeling/person] |
| Versjon | [X.Y] |
| Gyldig fra | [Dato] |
| Neste revisjon | [Dato] |

### 2. Tjenestenivåmål (SLO)

#### 2.1 Tilgjengelighet
| Mål | Verdi | Måleperiode | Ekskluderinger |
|-----|-------|-------------|----------------|
| Tilgjengelighet | 99.9% | Månedlig | Planlagt vedlikehold |
| Oppetid (beregnet) | ~43.8 min nedetid/mnd | — | — |

#### 2.2 Ytelse
| Mål | Verdi | Målepunkt |
|-----|-------|-----------|
| Chat response time (P95) | < 5 sekunder | End-to-end |
| Search query time (P95) | < 500 ms | API-nivå |
| Throughput | > 100 samtidige brukere | Applikasjonsnivå |

#### 2.3 Gjenoppretting
| Mål | Verdi | Merknad |
|-----|-------|---------|
| RTO | 15 minutter | Fra deteksjon til gjenopprettet |
| RPO | 5 minutter | Maks akseptabelt datatap |
| MTTR | < 30 minutter | Gjennomsnittlig gjenopprettingstid |

### 3. Ansvar og eskalering
| Rolle | Ansvarlig | Telefon | Epost |
|-------|-----------|---------|-------|
| Tjenesteeier | [Navn] | [Tlf] | [Epost] |
| Teknisk ansvarlig | [Navn] | [Tlf] | [Epost] |
| DR-koordinator | [Navn] | [Tlf] | [Epost] |
| Backup kontakt | [Navn] | [Tlf] | [Epost] |

### 4. Vedlikehold og unntak
- Planlagt vedlikehold: Tirsdager 02:0004:00 CET
- Varsling: Minimum 72 timer i forkant
- Nødvedlikehold: Varsling så snart som mulig

### 5. Rapportering
- Månedlig SLA-rapport til tjenesteeier
- Kvartalsvis trendrapport til ledelsen
- Umiddelbar hendelsesrapport ved SLA-brudd

RTO og RPO dokumentasjonsstandarder

Detaljert RTO/RPO-dokumentasjon

# RTO/RPO Spesifikasjon — AI Platform

## Komponentoversikt med gjenopprettingsmål

| ID | Komponent | Kritikalitet | RTO | RPO | DR-strategi | Region |
|----|-----------|-------------|-----|-----|-------------|--------|
| C01 | Azure OpenAI | Høy | 5 min | N/A | Multi-region failover | NE→SC |
| C02 | Azure AI Search | Høy | 15 min | 30 min | Dual-indexing | NE→SC |
| C03 | Cosmos DB | Kritisk | ~0 | ~0 | Multi-region writes | NE+SC |
| C04 | App Service | Høy | 5 min | N/A | Multi-region + TM | NE→SC |
| C05 | Azure Key Vault | Kritisk | Auto | Auto | MS-managed failover | NE→SC |
| C06 | Blob Storage (docs) | Middels | 15 min | 15 min | GZRS | NE→SC |
| C07 | Redis Cache | Middels | 10 min | 5 min | Geo-replication | NE→SC |
| C08 | App Configuration | Lav | 5 min | ~0 | Geo-replication | NE→SC |

## Avhengighetsrekkefølge for gjenoppretting

```mermaid
graph LR
    KV[Key Vault C05] --> DB[Cosmos DB C03]
    KV --> Redis[Redis C07]
    DB --> App[App Service C04]
    Redis --> App
    Config[App Config C08] --> App
    Storage[Blob Storage C06] --> Search[AI Search C02]
    Search --> App
    App --> AOAI[Azure OpenAI C01]

Gjenopprettingsrekkefølge

  1. Key Vault (automatisk failover)
  2. Cosmos DB (automatisk multi-region)
  3. Redis Cache (geo-replication failover)
  4. App Configuration (geo-replication failover)
  5. Blob Storage (GRS failover if needed)
  6. AI Search (start indexer i sekundær region)
  7. App Service (deploy/scale i sekundær region)
  8. Azure OpenAI (verifiser sekundært endpoint)
  9. Traffic Manager (oppdater routing)

## Disaster Recovery Runbooks og Playbooks

### Master DR Runbook

```markdown
# DR Runbook — AI Platform

## Forutsetninger
- Tilgang til Azure Portal med Owner-rolle på rg-ai-dr
- Azure CLI installert og autentisert
- Tilgang til organisasjonens incident management system
- Kontaktliste for eskalering tilgjengelig

## Fase 1: Deteksjon og Vurdering (05 minutter)

### Steg 1.1: Verifiser hendelsen
- [ ] Sjekk Azure Service Health: https://status.azure.com
- [ ] Sjekk intern monitoring: [Dashboard URL]
- [ ] Verifiser med automatisk helsesjekk:
  ```bash
  curl -s https://ai-app-prod.azurewebsites.net/health/deep | jq .

Steg 1.2: Klassifiser hendelsen

Scenario Alvorlighetsgrad Aksjon
Enkelt komponent nede P2 Standard feilsøking
Regional degradering P1 Vurder partial failover
Full regional outage P0 Initier full DR

Steg 1.3: Deklarer hendelse

  • Opprett incident i [ITSM-system]
  • Varsle DR-koordinator
  • Aktiver kommunikasjonsplan

Fase 2: Failover-initiering (510 minutter)

Steg 2.1: Verifiser DR-region readiness

# Sjekk at DR-ressurser er tilgjengelige
az resource list \
  --resource-group "rg-ai-dr" \
  --query "[].{Name:name, Type:type, Location:location}" \
  --output table

# Sjekk Cosmos DB replikering
az cosmosdb show \
  --name "cosmos-ai-state" \
  --resource-group "rg-ai-prod" \
  --query "readLocations[].{Region:locationName, State:failoverPriority}" \
  --output table

Steg 2.2: Scale up DR-ressurser

# Scale AI Search til produksjonsnivå
az search service update \
  --name "search-secondary-swedencentral" \
  --resource-group "rg-ai-dr" \
  --replica-count 3

# Scale App Service
az appservice plan update \
  --name "asp-ai-dr" \
  --resource-group "rg-ai-dr" \
  --sku P3v3

# Verifiser OpenAI-endpoint i DR-region
curl -s -H "api-key: $AOAI_DR_KEY" \
  "https://aoai-secondary-swedencentral.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-10-21" \
  -d '{"messages":[{"role":"user","content":"test"}]}' | jq .status

Steg 2.3: Oppdater Traffic Manager

# Switch til sekundær region
az network traffic-manager endpoint update \
  --resource-group "rg-networking" \
  --profile-name "tm-ai-platform" \
  --name "primary-norwayeast" \
  --type azureEndpoints \
  --endpoint-status Disabled

az network traffic-manager endpoint update \
  --resource-group "rg-networking" \
  --profile-name "tm-ai-platform" \
  --name "secondary-swedencentral" \
  --type azureEndpoints \
  --endpoint-status Enabled

Fase 3: Verifikasjon (1015 minutter)

Steg 3.1: Funksjonell testing

  • Test health endpoint: curl https://ai-app-dr.azurewebsites.net/health/deep
  • Test chat-funksjonalitet manuelt
  • Test search-funksjonalitet
  • Verifiser brukerautentisering

Steg 3.2: Data-integritet

  • Sjekk Cosmos DB datakonsistens
  • Verifiser AI Search indeksstatus
  • Kontroller at siste data er tilgjengelig

Steg 3.3: Ytelsesverifisering

  • Kjør syntetisk lasttest (lav belastning)
  • Verifiser at responstider er akseptable
  • Sjekk at auto-scaling fungerer

Fase 4: Stabilisering og Kommunikasjon

Steg 4.1: Oppdater interessenter

  • Send statusoppdatering til alle berørte
  • Oppdater statusside
  • Informer kundeservice

Steg 4.2: Overvåking

  • Sett opp forsterket overvåking i DR-region
  • Konfigurer alerts med lavere terskler
  • Start kontinuerlig helsesjekk

Fase 5: Failback (når primær region er tilgjengelig)

Steg 5.1: Verifiser primær region

  • Bekreft at Azure Service Health viser "Resolved"
  • Test primær region infrastruktur
  • Verifiser data-synkronisering

Steg 5.2: Planlegg failback

  • Velg lavtrafikk-vindu for failback
  • Kommuniser plan til interessenter
  • Forbered failback-runbook

Steg 5.3: Utfør failback

# Re-aktiver primær region
az network traffic-manager endpoint update \
  --resource-group "rg-networking" \
  --profile-name "tm-ai-platform" \
  --name "primary-norwayeast" \
  --type azureEndpoints \
  --endpoint-status Enabled

# Gradvis shift trafikk tilbake (weighted routing)
# eller oppdater priority

Steg 5.4: Nedskaler DR-region

# Etter verifisert failback, nedskaler DR
az search service update \
  --name "search-secondary-swedencentral" \
  --resource-group "rg-ai-dr" \
  --replica-count 2

az appservice plan update \
  --name "asp-ai-dr" \
  --resource-group "rg-ai-dr" \
  --sku P2v3

Fase 6: Post-Incident

  • Gjennomfør post-mortem innen 5 virkedager
  • Oppdater runbooks basert på erfaringer
  • Logg faktisk RTO/RPO vs. mål
  • Oppdater BCDR-dokumentasjon

## Trinn-for-trinn gjenopprettingsprosedyrer

### Spesifikk prosedyre: Azure AI Search Index Rebuild

```markdown
# Prosedyre: Rebuild AI Search Index i DR-region

## Når brukes denne?
- AI Search primær region er utilgjengelig
- Search indeks i DR-region er utdatert (> RPO)
- Corrupted index detected

## Forutsetninger
- Kildedokumenter tilgjengelig i DR-region (Blob Storage GZRS)
- Search service i DR-region er kjørende
- Skillset og indexer-definisjoner lagret i IaC (Git)

## Prosedyre

### 1. Verifiser at indeksdefinisjoner er tilgjengelige
```bash
# Hent indeksdefinisjon fra IaC-repo
git clone https://github.com/org/ai-infrastructure.git
cd ai-infrastructure/search-indexes/
cat knowledge-base-index.json | jq .name

2. Opprett/oppdater indeks i DR-region

# Opprett indeks
curl -X PUT \
  "https://search-secondary-swedencentral.search.windows.net/indexes/knowledge-base?api-version=2024-07-01" \
  -H "api-key: $SEARCH_DR_KEY" \
  -H "Content-Type: application/json" \
  -d @knowledge-base-index.json

# Opprett datasource
curl -X PUT \
  "https://search-secondary-swedencentral.search.windows.net/datasources/blob-source?api-version=2024-07-01" \
  -H "api-key: $SEARCH_DR_KEY" \
  -H "Content-Type: application/json" \
  -d @blob-datasource-dr.json

# Opprett skillset (hvis AI enrichment brukes)
curl -X PUT \
  "https://search-secondary-swedencentral.search.windows.net/skillsets/embedding-skillset?api-version=2024-07-01" \
  -H "api-key: $SEARCH_DR_KEY" \
  -H "Content-Type: application/json" \
  -d @embedding-skillset.json

3. Start full re-indeksering

# Opprett og kjør indexer
curl -X PUT \
  "https://search-secondary-swedencentral.search.windows.net/indexers/blob-indexer?api-version=2024-07-01" \
  -H "api-key: $SEARCH_DR_KEY" \
  -H "Content-Type: application/json" \
  -d @blob-indexer.json

# Overvåk indexer-status
watch -n 10 'curl -s \
  "https://search-secondary-swedencentral.search.windows.net/indexers/blob-indexer/status?api-version=2024-07-01" \
  -H "api-key: $SEARCH_DR_KEY" | jq ".lastResult.status, .lastResult.itemsProcessed"'

4. Verifiser indekskvalitet

# Sjekk dokumenttelling
curl -s "https://search-secondary-swedencentral.search.windows.net/indexes/knowledge-base/docs/\$count?api-version=2024-07-01" \
  -H "api-key: $SEARCH_DR_KEY"

# Test en søkespørring
curl -s "https://search-secondary-swedencentral.search.windows.net/indexes/knowledge-base/docs/search?api-version=2024-07-01" \
  -H "api-key: $SEARCH_DR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"search": "test query", "top": 5}' | jq '.value | length'

5. Forventet tidsbruk

Indeksstørrelse Estimert tid Merknad
< 10,000 docs 1020 min Inkl. embedding-generering
10,000100,000 3060 min Avhenger av skillset
> 100,000 14 timer Vurder parallel indexing

## Eierskap og eskaleringsmatrise

### RACI-matrise for DR

| Aktivitet | Platform Team | AI Team | Security | Management | Microsoft |
|-----------|:------------:|:-------:|:--------:|:----------:|:---------:|
| Deteksjon | R | I | I | I | C |
| Beslutning om failover | A | C | C | I | — |
| Teknisk failover | R | C | I | I | C |
| Kommunikasjon (intern) | I | I | I | R/A | — |
| Kommunikasjon (ekstern) | I | I | I | R/A | — |
| Verifisering | R | R | C | I | — |
| Failback-planlegging | R | C | C | A | C |
| Post-mortem | R | R | C | A | — |

*R = Responsible, A = Accountable, C = Consulted, I = Informed*

## Referanser

- [Document your DR plan](https://learn.microsoft.com/en-us/azure/well-architected/design-guides/disaster-recovery#document-your-dr-plan) — WAF DR-dokumentasjon
- [DR communication plan](https://learn.microsoft.com/en-us/azure/well-architected/design-guides/disaster-recovery#document-your-dr-plan) — Kommunikasjonsplan
- [Test regularly and improve the plan](https://learn.microsoft.com/en-us/azure/well-architected/design-guides/disaster-recovery#test-regularly-and-improve-the-plan) — Testing av DR-plan
- [Create an effective incident management plan](https://learn.microsoft.com/en-us/azure/well-architected/design-guides/incident-management) — Incident management
- [Recommendations for defining reliability targets](https://learn.microsoft.com/en-us/azure/well-architected/reliability/metrics) — SLO-definisjoner
- [Reliability in Azure AI Search](https://learn.microsoft.com/en-us/azure/reliability/reliability-ai-search) — AI Search DR

## For arkitekten

- **Bruk denne referansen** når kunden trenger maler for SLA-dokumentasjon, DR-runbooks eller eskaleringsprosedyrer for AI-systemer.
- DR-runbooks MÅ være executable — hvert steg skal ha konkrete kommandoer, ikke bare beskrivelser.
- Versjonér runbooks i Git som kode — de endres like ofte som infrastrukturen.
- Gjenopprettingsrekkefølge er kritisk — dokumentér avhengigheter eksplisitt og test at rekkefølgen fungerer.
- For norsk offentlig sektor: RACI-matrise bør inkludere personvernombud (DPO) for hendelser som involverer persondata.