12-02-02 — Azure Monitor + App Insights + Foundry Tracing

⏱ 12 minFontes validadas em: 2026-04-29

TL;DR

Para stacks 100% Microsoft, a combinacao Azure Monitor + Application Insights + Azure AI Foundry Tracing entrega observabilidade completa sem sair do ecossistema Azure. App Insights captura traces e metricas do app. Foundry Tracing captura o detalhe das runs do agente (LLM calls, tool calls, evals). Tudo vai para o mesmo Log Analytics Workspace e voce cria alertas no Azure Monitor.

Arquitetura da stack Microsoft de observabilidade

graph LR APP["App .NET / Python"] -- OpenTelemetry --> AI["Application Insights"] FOUND["Azure AI Foundry\nAgente"] -- Foundry Tracing --> AI AI --> LAW["Log Analytics\nWorkspace"] LAW --> MON["Azure Monitor\nAlertas / Dashboards"] LAW --> WB["Azure Workbooks\n(dashboards customizados)"]

Application Insights: configuracao para LLMs

App Insights ja instrumenta automaticamente chamadas HTTP (incluindo Azure OpenAI) via SDK. Com algumas customizacoes, voce adiciona o contexto de IA.

Setup .NET (ASP.NET Core com Semantic Kernel)

// Program.cs
using Microsoft.ApplicationInsights.Extensibility;
using OpenTelemetry;
using OpenTelemetry.Trace;

var builder = WebApplication.CreateBuilder(args);

// Adicionar Application Insights
builder.Services.AddApplicationInsightsTelemetry(options =>
{
    options.ConnectionString = builder.Configuration["APPLICATIONINSIGHTS_CONNECTION_STRING"];
});

// Configurar OpenTelemetry para capturar spans do Semantic Kernel
builder.Services.AddOpenTelemetry()
    .WithTracing(tracing => tracing
        .AddSource("Microsoft.SemanticKernel*")
        .AddAzureMonitorTraceExporter()  // envia para App Insights
    );

// Habilitar dados sensiveis nos spans (apenas dev/staging)
AppContext.SetSwitch(
    "Microsoft.SemanticKernel.Experimental.GenAI.EnableOTelDiagnosticsSensitive", 
    builder.Environment.IsDevelopment()
);

// Adicionar Semantic Kernel
builder.Services.AddKernel()
    .AddAzureOpenAIChatCompletion(
        deploymentName: builder.Configuration["AZURE_OPENAI_DEPLOYMENT"],
        endpoint: builder.Configuration["AZURE_OPENAI_ENDPOINT"],
        apiKey: builder.Configuration["AZURE_OPENAI_KEY"]
    );

Metricas customizadas de IA via TelemetryClient

using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.DataContracts;

public class AgentMetricsService
{
    private readonly TelemetryClient _telemetry;

    public AgentMetricsService(TelemetryClient telemetry)
    {
        _telemetry = telemetry;
    }

    public void TrackAgentRun(AgentRunResult result)
    {
        // Metrica de custo por run
        _telemetry.TrackMetric("agent.tokens.input", result.InputTokens);
        _telemetry.TrackMetric("agent.tokens.output", result.OutputTokens);
        _telemetry.TrackMetric("agent.cost_usd", result.CostUsd);
        _telemetry.TrackMetric("agent.latency_ms", result.LatencyMs);

        // Evento customizado para analise posterior
        _telemetry.TrackEvent("AgentRunCompleted", new Dictionary<string, string>
        {
            ["userId"] = result.UserId,
            ["sessionId"] = result.SessionId,
            ["toolsUsed"] = string.Join(",", result.ToolsCalled),
            ["qualityScore"] = result.QualityScore.ToString("F2")
        });

        // Dependency tracking para tool calls
        foreach (var tool in result.ToolExecutions)
        {
            var dep = new DependencyTelemetry
            {
                Name = $"Tool: {tool.Name}",
                Duration = tool.Duration,
                Success = tool.Success,
                Type = "AI Tool"
            };
            _telemetry.TrackDependency(dep);
        }
    }
}

Azure AI Foundry Tracing

O Azure AI Foundry tem um sistema de tracing proprio integrado ao portal. Qualquer agente criado via Foundry SDK tem tracing automatico que aparece no portal em Foundry → Tracing.

import os
from azure.ai.projects import AIProjectClient
from azure.monitor.opentelemetry import configure_azure_monitor

# Configurar Azure Monitor como destino dos traces
configure_azure_monitor(
    connection_string=os.environ["APPLICATIONINSIGHTS_CONNECTION_STRING"]
)

# O Foundry SDK automaticamente envia traces para o App Insights configurado
client = AIProjectClient.from_connection_string(
    conn_str=os.environ["AIPROJECT_CONNECTION_STRING"]
)

# Habilitar tracing no projeto Foundry
client.telemetry.enable()

# A partir daqui, todos os agents criados tem tracing automatico
agent = client.agents.create_agent(
    model="gpt-4o",
    name="sales-agent",
    instructions="Voce e um assistente de vendas..."
)

# Runs aparecem automaticamente em:
# 1. Azure AI Foundry portal → Tracing
# 2. Application Insights → Transaction search
# 3. Log Analytics → customEvents

Queries KQL para dashboard de IA

Com os dados no Log Analytics, use KQL para criar dashboards especificos de IA:

// KQL: Custo diario por usuario (ultimos 7 dias)
customMetrics
| where name == "agent.cost_usd"
| summarize daily_cost = sum(value) by bin(timestamp, 1d), tostring(customDimensions.userId)
| order by timestamp desc

// KQL: Latencia P50/P95/P99 do agente
customMetrics
| where name == "agent.latency_ms"
| summarize 
    p50 = percentile(value, 50),
    p95 = percentile(value, 95),
    p99 = percentile(value, 99)
  by bin(timestamp, 1h)
| render timechart

// KQL: Tool calls mais frequentes
customEvents
| where name == "AgentRunCompleted"
| extend tools = split(tostring(customDimensions.toolsUsed), ",")
| mv-expand tools
| summarize count() by tostring(tools)
| order by count_ desc
| take 10

Alertas no Azure Monitor

Configure alertas para situacoes criticas:

  • Custo acima do threshold: Se agent.cost_usd diario superar USD 50
  • Latencia degradada: Se P95 de latencia superar 5 segundos
  • Taxa de erro elevada: Se mais de 5% das runs falharem em 15 minutos
  • Volume anomalo: Se o numero de requisicoes triplicar em 10 minutos (possivel abuso)
✅ Vantagem para empresas Microsoft
Toda a observabilidade fica no mesmo lugar que o monitoramento do resto da aplicacao (.NET, Azure Functions, bancos). Times de ops nao precisam aprender uma nova ferramenta — e o mesmo App Insights que ja usam.
⚠️ Custo do Log Analytics
App Insights cobra por GB de dados ingeridos (~USD 2,30/GB). Logs de conversas longas com conteudo completo de prompt/resposta podem gerar volumes significativos. Configure sampling (ex: 10% das requisicoes com payload completo) para controlar custo.

Como isso se conecta

  • 12-01-02 Tracing: App Insights e um dos destinos OTLP para traces GenAI
  • 09 Foundry: Foundry Tracing e nativo ao Azure AI Foundry — zero config adicional
  • 08 Semantic Kernel: SK tem suporte nativo a OTEL que exporta para App Insights
  • 12-03-01 Metricas: As queries KQL acima implementam as metricas de latencia, custo e qualidade

Fontes

  1. Microsoft Docs — Monitor your generative AI applications with Azure Monitor (2025)
  2. Microsoft Docs — Semantic Kernel observability with Azure Monitor (2025)
  3. Microsoft Docs — Enable Azure Monitor OpenTelemetry (2025)