Steg 9 (R4): unified migrate-corpus.mjs --write over engineering/governance/ infrastructure/security. 327 filer mutert, verified=null, prosa byte-identisk (fra første ## seksjon), advisor urørt (0 endringer). To applier-fixes oppdaget under kjøring (TDD, RED→GREEN): - insertHeaderFields: anker faller nå tilbake når en meta-linje selv passerer 500B (2 filer pakket et avsnitt i **Status:** → Type/Source landet utenfor scan-vinduet, applierens post-write-assertion fanget + restaurerte). - normalizeStaleVerified: fjerner nå ALLE stale non-date **Verified:** i 500B-vinduet, inkl. stray body-dup rett under --- (9 mlops-genaiops-filer var ellers falskt "verified"/fresh, droppet fra worklist). Operatør-godkjent utvidelse av carve-out; kun stray metadata-linjer, aldri prosa. test-transform-criterion: precondition oppdatert til post-migrasjons-sannhet (fila bærer nå Source). Suite 728/728 grønn.
368 lines
16 KiB
Markdown
368 lines
16 KiB
Markdown
# Observability Patterns for Copilot Extensions and Plugins
|
||
|
||
**Last updated:** 2026-05
|
||
**Status:** GA
|
||
**Category:** Monitoring & Observability
|
||
**Type:** reference
|
||
**Source:** https://learn.microsoft.com/microsoft-cloud/dev/copilot/isv/observability-for-ai
|
||
|
||
---
|
||
|
||
## Innhold
|
||
|
||
- [Introduksjon](#introduksjon)
|
||
- [Kjernekomponenter](#kjernekomponenter)
|
||
- [Arkitekturmønstre](#arkitekturmønstre)
|
||
- [Beslutningsveiledning](#beslutningsveiledning)
|
||
- [Integrasjon med Microsoft-stakken](#integrasjon-med-microsoft-stakken)
|
||
- [Offentlig sektor (Norge)](#offentlig-sektor-norge)
|
||
- [Kostnad og lisensiering](#kostnad-og-lisensiering)
|
||
- [For arkitekten (Cosmo)](#for-arkitekten-cosmo)
|
||
- [Kilder og verifisering](#kilder-og-verifisering)
|
||
|
||
## Introduksjon
|
||
|
||
Når organisasjoner utvider Microsoft Copilot med custom plugins, connectors og extensions, blir observability kritisk for å sikre pålitelighet, ytelse og compliance. I motsetning til standalone applikasjoner opererer Copilot-extensions i et distribuert økosystem hvor telemetri må samles fra flere lag: plugin-kjøretid, API-kall, LLM-interaksjoner og brukeropplevelse.
|
||
|
||
Microsoft tilbyr et helhetlig observability-rammeverk basert på Azure Application Insights, Copilot Studio analytics og Azure Monitor. Dette gir innsikt i plugin performance, token-forbruk, error rates, user engagement og sikkerhetshendelser. For Copilot Studio-agenter er Application Insights-integrasjon nå en out-of-the-box feature som logger incoming/outgoing messages, topic triggers og custom telemetry events.
|
||
|
||
Utfordringen ligger i å instrumentere extensions korrekt, definere relevante metrics (både system- og business-metrics), og bygge dashboards som gir actionable insights for både utviklere, data scientists og business stakeholders. I offentlig sektor må observability også dekke compliance-logging for Forvaltningsloven § 11 (journalføring av vedtak) og GDPR Article 35 (DPIA monitoring).
|
||
|
||
---
|
||
|
||
## Kjernekomponenter
|
||
|
||
### Telemetry Layers for Copilot Extensions
|
||
|
||
| Layer | Data Captured | Tool | Purpose |
|
||
|-------|---------------|------|---------|
|
||
| **Copilot Studio Agent** | Messages, topics, custom events, design mode | Application Insights | Track agent behavior, conversation flow, topic performance |
|
||
| **Plugin/Connector Runtime** | API calls, latency, errors, token usage | Application Insights SDK | Monitor external integrations, debug failures |
|
||
| **LLM Interaction** | Prompt tokens, completion tokens, model latency, groundedness | Azure OpenAI metrics | Cost tracking, performance optimization |
|
||
| **User Engagement** | Thumbs up/down, edit distance, session duration | Custom events | Measure usefulness, iterate on UX |
|
||
| **Security/Compliance** | Filtered prompts, PII detection, audit logs | Microsoft Sentinel, Purview | Governance, risk management |
|
||
|
||
### Application Insights Integration for Copilot Studio
|
||
|
||
**Configuration Steps:**
|
||
1. Navigate to **Settings → Advanced** in Copilot Studio
|
||
2. Add Application Insights **Connection string** (from Azure Portal)
|
||
3. Enable optional settings:
|
||
- **Log activities**: Incoming/outgoing messages and events
|
||
- **Log sensitive Activity properties**: userid, name, text, speak (vurder GDPR-implikasjoner)
|
||
- **Log custom telemetry events**: Via "Log custom telemetry event" node in topics
|
||
|
||
**Custom Dimensions (customDimensions field):**
|
||
|
||
| Field | Description | Sample Values |
|
||
|-------|-------------|---------------|
|
||
| `type` | Activity type | `message`, `conversationUpdate`, `event`, `invoke` |
|
||
| `channelId` | Channel identifier | `emulator`, `directline`, `msteams`, `webchat` |
|
||
| `designMode` | Test canvas vs. production | `True` / `False` |
|
||
| `locale` | User locale | `en-us`, `nb-no`, `sv-se` |
|
||
| `text` | Message text (if logging enabled) | User prompt/agent response |
|
||
|
||
### Pre-Built Dashboards
|
||
|
||
**Copilot Studio Workbook (Preview)** – Tilgjengelig i Application Insights:
|
||
- **Path:** Application Insights → Monitoring → Workbooks → "Copilot Studio Dashboard"
|
||
- **Metrics:** Total conversations, latency, exceptions, tool usage, topic analytics
|
||
- **Customization:** Edit mode for adding KQL queries (e.g., track custom attributes)
|
||
|
||
---
|
||
|
||
## Arkitekturmønstre
|
||
|
||
### Pattern 1: Centralized Telemetry Hub
|
||
|
||
**Bruk:** Enterprise med mange Copilot-extensions på tvers av teams.
|
||
|
||
**Arkitektur:**
|
||
```
|
||
Copilot Studio Agent(s) → Application Insights (Workspace 1)
|
||
↓
|
||
M365 Copilot Plugin(s) → Application Insights (Workspace 2) → Azure Workbook (Consolidated)
|
||
↓
|
||
Power Platform Connector(s) → Application Insights (Workspace 3)
|
||
↓
|
||
Microsoft Sentinel (Audit Logs via Purview)
|
||
```
|
||
|
||
**Fordeler:**
|
||
- Felles sikkerhetspolicy og RBAC (Reader role for team members)
|
||
- Cross-correlation av events på tvers av extensions
|
||
- Compliance-logging aggregert i Sentinel
|
||
|
||
**Ulemper:**
|
||
- Krever Application Insights API-tilgang for cross-workspace queries
|
||
- Høyere kostnad ved separate workspaces (vurder single workspace hvis <500GB/month)
|
||
|
||
---
|
||
|
||
### Pattern 2: Plugin-Specific Instrumentation
|
||
|
||
**Bruk:** Custom plugin/connector utviklet med pro-code (C#, TypeScript).
|
||
|
||
**Implementering:**
|
||
```csharp
|
||
// C# example - Application Insights SDK
|
||
using Microsoft.ApplicationInsights;
|
||
using Microsoft.ApplicationInsights.DataContracts;
|
||
|
||
var telemetryClient = new TelemetryClient();
|
||
telemetryClient.Context.GlobalProperties["PluginName"] = "SalesforceConnector";
|
||
|
||
// Track plugin execution
|
||
var stopwatch = Stopwatch.StartNew();
|
||
try
|
||
{
|
||
var result = await ExecutePluginAsync(request);
|
||
telemetryClient.TrackEvent("PluginSuccess", new Dictionary<string, string>
|
||
{
|
||
{ "operation", request.Operation },
|
||
{ "duration_ms", stopwatch.ElapsedMilliseconds.ToString() }
|
||
});
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
telemetryClient.TrackException(ex);
|
||
telemetryClient.TrackMetric("PluginErrorRate", 1);
|
||
}
|
||
```
|
||
|
||
**Fordeler:**
|
||
- Full kontroll over metrics og custom properties
|
||
- Multi-layer instrumentation (tokenize → infer → generate → detokenize)
|
||
- Granular performance debugging
|
||
|
||
**Ulemper:**
|
||
- Requires code changes for every extension
|
||
- DevOps overhead (ensure SDK updates)
|
||
|
||
---
|
||
|
||
### Pattern 3: User Feedback Loop
|
||
|
||
**Bruk:** Kontinuerlig forbedring basert på brukerrespons.
|
||
|
||
**Flow:**
|
||
1. User interacts with Copilot → Agent response
|
||
2. Thumbs up/down → Custom telemetry event: `UserFeedback`
|
||
3. Edit distance tracked → Metric: `avg_edit_distance`
|
||
4. KQL query identifies low-rated topics → Trigger re-evaluation
|
||
|
||
**KQL Example:**
|
||
```kusto
|
||
customEvents
|
||
| where name == "UserFeedback"
|
||
| extend rating = customDimensions['rating']
|
||
| where rating == "down"
|
||
| summarize count() by tostring(customDimensions['topicName'])
|
||
| order by count_ desc
|
||
```
|
||
|
||
**Fordeler:**
|
||
- Direkte input fra sluttbrukere
|
||
- Data-driven topic/prompt iteration
|
||
|
||
**Ulemper:**
|
||
- Feedback bias (users rarely rate neutral experiences)
|
||
- Privacy concerns (GDPR Article 6 – lawful basis for processing feedback)
|
||
|
||
---
|
||
|
||
## Beslutningsveiledning
|
||
|
||
### Når bruke hvilken løsning?
|
||
|
||
| Scenario | Anbefalt Tool | Reasoning |
|
||
|----------|---------------|-----------|
|
||
| Copilot Studio agent (low/no-code) | Built-in analytics + App Insights | No SDK required, out-of-the-box setup |
|
||
| Custom M365 Copilot plugin (TypeScript) | Application Insights SDK | Full control, correlation with Azure OpenAI metrics |
|
||
| Power Platform connector | Power Platform telemetry + App Insights | Hybrid (connector-level + custom events) |
|
||
| Compliance audit (Forvaltningsloven) | Microsoft Sentinel + Purview | Audit logs for decisions/actions |
|
||
| Cost tracking (Azure OpenAI) | Azure Monitor (OpenAI resource metrics) | Token-level billing data |
|
||
|
||
### Vanlige feil
|
||
|
||
| Feil | Konsekvens | Løsning |
|
||
|------|------------|---------|
|
||
| **Logger sensitive data (PII) uten consent** | GDPR Article 5 brudd, Datatilsynet-varsel | Disable "Log sensitive Activity properties" OR anonymize/hash userid/text |
|
||
| **Inkluderer test-data i production metrics** | Falske performance-trender | Filter `designMode == "False"` in all KQL queries |
|
||
| **Mangler correlation IDs** | Kan ikke tracke multi-step flows | Use `Activity.Current.RootId` (ASP.NET Core) eller custom correlation headers |
|
||
| **Ignorer latency breakdown** | Identify bottleneck i feil lag | Instrument tokenize, infer, generate, detokenize separat |
|
||
| **Ingen alerting på error spikes** | Incidents oppdages for sent | Set up Azure Monitor alerts (e.g., >5% error rate in 5 min window) |
|
||
|
||
### Røde flagg
|
||
|
||
- **Manglende telemetri i 30+ dager** → Brukere ikke adoptert extension?
|
||
- **Edit distance >50% of response length** → Agent gir irrelevante svar
|
||
- **>10% filtered prompts** → Content filtering blokkerer legitim bruk (juster policy)
|
||
- **Token cost øker 3x uten brukerøkning** → Prompt inefficiency eller token leakage
|
||
|
||
---
|
||
|
||
## Integrasjon med Microsoft-stakken
|
||
|
||
### Azure Monitor Ecosystem
|
||
|
||
```
|
||
Application Insights ← Copilot Studio, Plugins, Connectors
|
||
↓
|
||
Azure Monitor Workspace → Azure Copilot observability agent (preview)
|
||
↓
|
||
Microsoft Sentinel ← Audit logs (via Purview)
|
||
↓
|
||
Power BI / Azure Workbooks → Executive dashboards
|
||
```
|
||
|
||
**Key Integrations:**
|
||
|
||
| Integration | Use Case | Configuration |
|
||
|-------------|----------|---------------|
|
||
| **Azure OpenAI metrics** | Token usage, model latency, throttling | No extra config – auto-emitted to Azure Monitor |
|
||
| **Purview audit logs** | Copilot Studio events (BotCreate, BotPublish, BotShare) | Enable audit logging for Microsoft 365 license holders |
|
||
| **Sentinel analytics** | Custom detection rules (e.g., unusual token spikes) | Ingest App Insights logs, create KQL-based rules |
|
||
| **Copilot Studio Kit** | Automated testing + telemetry enrichment | Register Azure AD app, grant App Insights API permissions |
|
||
|
||
### Cross-Service Correlation
|
||
|
||
**Scenario:** M365 Copilot plugin calls Azure Function → Azure OpenAI → Cosmos DB
|
||
|
||
**Solution:**
|
||
1. **Distributed tracing**: Use `traceparent` HTTP header (W3C standard)
|
||
2. **Correlation ID**: Propagate `operation_Id` through all layers
|
||
3. **KQL join**:
|
||
```kusto
|
||
requests
|
||
| join (dependencies) on operation_Id
|
||
| join (customEvents | where name == "LLMInvocation") on operation_Id
|
||
| project timestamp, request_name, dependency_name, llm_tokens=customDimensions['tokens']
|
||
```
|
||
|
||
---
|
||
|
||
## Offentlig sektor (Norge)
|
||
|
||
### GDPR og Schrems II
|
||
|
||
**Utfordring:** Application Insights lagrer data i Azure-region (e.g., West Europe). Schrems II krever vurdering av USA-baserte sub-processors.
|
||
|
||
**Mitigering:**
|
||
- Bruk **EU Data Boundary** (Microsoft commitment per nov 2024)
|
||
- Aktivér **Data Residency** i Application Insights (Settings → Data retention)
|
||
- DPIA for logging av `text` (personopplysninger i meldinger)
|
||
|
||
### Forvaltningsloven § 11
|
||
|
||
**Krav:** Journalføring av vedtak truffet av forvaltning.
|
||
|
||
**Implementering:**
|
||
1. Custom telemetry event når Copilot-agent treffer "decision topic":
|
||
```csharp
|
||
telemetryClient.TrackEvent("DecisionMade", new Dictionary<string, string>
|
||
{
|
||
{ "decisionType", "LoanApproval" },
|
||
{ "caseId", "2026-001234" },
|
||
{ "timestamp", DateTime.UtcNow.ToString("o") }
|
||
});
|
||
```
|
||
2. Sentinels analytics rule → arkivering i case management system (e.g., ePhorte)
|
||
|
||
### AI Act (EU 2024/1689)
|
||
|
||
**Artikkel 12:** High-risk AI-systemer skal logge operations for traceability.
|
||
|
||
**Relevans:** Copilot-agent som automatiserer saksbehandling = high-risk.
|
||
|
||
**Compliance:**
|
||
- Log alle inputs (prompts), outputs (responses), intermediate steps (topic flow)
|
||
- Retention: Minimum 6 måneder (AI Act Article 12(1))
|
||
- Access control: Kun autoriserte brukere (RBAC via Application Insights)
|
||
|
||
---
|
||
|
||
## Kostnad og lisensiering
|
||
|
||
### Prismodell (Application Insights)
|
||
|
||
| Component | Pricing | Optimization Tips |
|
||
|-----------|---------|-------------------|
|
||
| **Data ingestion** | $2.76/GB (first 5GB free/month) | Use sampling (e.g., 50% for non-critical events) |
|
||
| **Data retention** | Free (90 days), $0.12/GB/month beyond | Archive to Azure Storage for long-term compliance |
|
||
| **Web tests** | $5.75 per test/month | Not required for Copilot extensions (use synthetic monitoring via Azure Functions) |
|
||
|
||
**Estimert cost for Copilot Studio agent (1000 users, 50k msgs/month):**
|
||
- Telemetry volume: ~10GB/month (hvis logging av messages enabled)
|
||
- Cost: $13.80/month (ingestion) + retention cost
|
||
- **Tip:** Disable "Log sensitive Activity properties" → reduser volume 30%
|
||
|
||
### Lisens-krav
|
||
|
||
| Feature | License Requirement |
|
||
|---------|---------------------|
|
||
| Copilot Studio analytics (built-in) | Power Virtual Agents license / Copilot Studio capacity |
|
||
| Application Insights integration | Azure subscription (free tier available) |
|
||
| Microsoft Sentinel (audit logs) | Microsoft 365 E5 OR Sentinel standalone |
|
||
| Power BI dashboards | Power BI Pro per user OR Premium capacity |
|
||
|
||
---
|
||
|
||
## For arkitekten (Cosmo)
|
||
|
||
### 5 spørsmål å stille kunden
|
||
|
||
1. **Scope:** Hvilke Copilot-extensions skal overvåkes? (Copilot Studio agents, M365 plugins, Power Platform connectors?)
|
||
2. **Compliance:** Er dette high-risk AI under AI Act? Trenger dere audit trail for Forvaltningsloven?
|
||
3. **Sensitive data:** Logger dere meldingstekst? Har dere DPIA for logging av personopplysninger?
|
||
4. **Alerting:** Hvem skal varsles ved error spikes, cost overruns eller security events?
|
||
5. **Retention:** Hvor lenge må telemetri oppbevares? (GDPR minimums vs. compliance-krav)
|
||
|
||
### Fallgruver
|
||
|
||
| Fallgruve | Impact | Hvordan unngå |
|
||
|-----------|--------|---------------|
|
||
| **Over-logging i test-fase** | Kostnadssprekk | Filter `designMode == "False"` i KQL |
|
||
| **Manglende sampling strategy** | Unødvendig detaljnivå → dyrt | 100% logging for errors, 10-50% for success events |
|
||
| **Ingen incident response plan** | Treg respons på security events | Set up Azure Monitor action groups (email, SMS, webhook til Teams/Slack) |
|
||
| **Siloed telemetry** | Kan ikke correlate plugin + LLM + backend | Bruk distributed tracing (W3C traceparent) |
|
||
|
||
### Anbefalinger per modenhetsnivå
|
||
|
||
#### Level 1: MVP (First Copilot Extension)
|
||
- Bruk Copilot Studio built-in analytics
|
||
- Enable Application Insights med basic logging (ikke sensitive properties)
|
||
- Set up 2-3 alerts (error rate >5%, response time >3s)
|
||
|
||
#### Level 2: Production Scale (5+ extensions)
|
||
- Centralized Application Insights workspace
|
||
- Custom telemetry events for business metrics (e.g., "LoanApprovalGranted")
|
||
- Pre-built dashboards (Copilot Studio Workbook + custom Azure Workbook)
|
||
|
||
#### Level 3: Enterprise/Compliance-heavy
|
||
- Microsoft Sentinel integration for audit logs
|
||
- Distributed tracing across all tiers (plugin → LLM → backend)
|
||
- Automated anomaly detection (Azure Monitor ML-based alerts)
|
||
- Quarterly compliance audit exports (GDPR, AI Act)
|
||
|
||
---
|
||
|
||
## Kilder og verifisering
|
||
|
||
**Verified (fra Microsoft Learn MCP):**
|
||
1. [Capture telemetry with Application Insights - Copilot Studio](https://learn.microsoft.com/en-us/microsoft-copilot-studio/advanced-bot-framework-composer-capture-telemetry) – Full guide til App Insights setup, KQL queries, custom dimensions
|
||
2. [Observability for pro-code generative AI solutions](https://learn.microsoft.com/en-us/microsoft-cloud/dev/copilot/isv/observability-for-ai) – ISV-guidance: lifecycle phases, metrics categories, evaluation techniques
|
||
3. [Monitor operations, compliance, and capacity - Copilot Studio](https://learn.microsoft.com/en-us/microsoft-copilot-studio/guidance/sec-gov-phase5) – Operational monitoring, Sentinel integration, compliance auditing
|
||
4. [Application Insights telemetry with Microsoft Copilot Studio (Dynamics 365)](https://learn.microsoft.com/en-us/dynamics365/guidance/resources/copilot-studio-appinsights) – Prerequisites, custom events, topic tracking
|
||
5. [Enable Application Insights support in Copilot Studio Kit](https://learn.microsoft.com/en-us/microsoft-copilot-studio/guidance/kit-enable-application-insights) – Azure AD app registration, API permissions for telemetry enrichment
|
||
|
||
**Baseline (modellkunnskap, verifisert mot docs):**
|
||
- GDPR Article 5 (data minimization), Article 6 (lawful basis), Article 35 (DPIA)
|
||
- AI Act (EU 2024/1689) Article 12 (logging for high-risk AI)
|
||
- Forvaltningsloven § 11 (journalføring av vedtak)
|
||
|
||
**Konfidensnivå per seksjon:**
|
||
- Kjernekomponenter: **Verified** (App Insights docs, Copilot Studio Workbook)
|
||
- Arkitekturmønstre: **Baseline** (patterns basert på Azure Well-Architected Framework + docs)
|
||
- Offentlig sektor: **Verified** (GDPR/AI Act legal text + Microsoft EU Data Boundary docs)
|
||
- Kostnad: **Verified** (Azure pricing calculator, Application Insights pricing page)
|