AI-200
Azure
Back to Observe and troubleshoot apps on Azure

Analyze app telemetry with logs and metrics

Explore logs for errors and performance

Overview

Once telemetry is in Application Insights, use KQL to hunt failures and latency. Focus on Success, DurationMs, ResultCode, and OperationId across the standard App Insights tables.

Exam tips

  • Failed requests: AppRequests | where Success == false
  • Slow dependencies: AppDependencies | where DurationMs > …
  • Error rate over time: countif(Success == false) + bin(TimeGenerated, …)
  • Use percentile(DurationMs, 95) for P95 — better than average alone
  • Join exceptions to requests on OperationId

Key fields

FieldMeaning
TimeGeneratedWhen the telemetry was ingested/recorded
SuccessWhether the operation succeeded
DurationMsLatency in milliseconds
ResultCodeHTTP/status-style result
NameOperation or dependency name
TargetDownstream host/resource for dependencies
OperationIdEnd-to-end correlation ID

Find failed requests

Kql
AppRequests
| where TimeGenerated > ago(1h)
| where Success == false
| project TimeGenerated, Name, ResultCode, DurationMs, OperationId
| order by TimeGenerated desc

Find slow dependencies

Dependencies are outbound calls — databases, HTTP APIs, queues. High DurationMs here often explains slow API requests upstream.

Kql
AppDependencies
| where TimeGenerated > ago(1h)
| where DurationMs > 500
| summarize Calls = count(), AvgMs = avg(DurationMs), P95 = percentile(DurationMs, 95)
    by Name, Target
| order by P95 desc

Error rate over time

Kql
AppRequests
| where TimeGenerated > ago(24h)
| summarize
    Total = count(),
    Failures = countif(Success == false)
    by bin(TimeGenerated, 1h)
| extend ErrorRate = round(100.0 * Failures / Total, 2)
| render timechart

Exceptions with request context

Kql
AppExceptions
| where TimeGenerated > ago(6h)
| join kind=inner (
    AppRequests
    | where TimeGenerated > ago(6h)
  ) on OperationId
| project TimeGenerated, ProblemId, OuterMessage, Name, ResultCode
| order by TimeGenerated desc

AI-specific explorations

Kql
// Requests tagged with model name via custom dimensions
AppRequests
| where TimeGenerated > ago(24h)
| extend model = tostring(customDimensions["gen_ai.model"])
| where isnotempty(model)
| summarize
    count(),
    avg(DurationMs),
    percentile(DurationMs, 95)
  by model, Name
Kql
// Trace messages mentioning token or embedding errors
AppTraces
| where TimeGenerated > ago(6h)
| where Message has "embedding" or Message has "token"
| project TimeGenerated, Message, SeverityLevel, OperationId

Learn more