Observabilidade

O que vem de graça

Toda aplicação Pipevine expõe telemetria OpenTelemetry desde o primeiro momento, sem nenhuma anotação manual no seu YAML ou no seu Program.cs:

  • Um ActivitySource próprio do motor de pipeline, nomeado "Pipevine". Ele produz um span por execução de pipeline (pipevine.pipeline.execute) e um span filho por step (pipevine.step.<type>), cada um marcado com o tipo e o id do step. Isso te dá, direto num backend de tracing distribuído, exatamente onde o tempo de uma requisição foi gasto — qual step, em qual rota.
  • Um Meter, também nomeado "Pipevine", com dois instrumentos:
    • pipevine.step.executions — um contador do número de execuções de step, marcado por aplicação, rota e tipo de step.
    • pipevine.step.duration — um histograma da duração de cada execução de step em milissegundos, com as mesmas marcações.

Nenhum desses dois precisa ser configurado no YAML — eles existem porque o motor de pipeline em si os produz, para qualquer aplicação, automaticamente.

Conectando um exportador

O que falta para efetivamente ver essa telemetria é registrar um exportador OpenTelemetry no Program.cs (caminho local) ou via configuração do host genérico (caminho conteinerizado) apontando para ActivitySource/Meter nomeados "Pipevine" — o mesmo padrão de qualquer aplicação ASP.NET Core instrumentada com OpenTelemetry:

builder.Services.AddOpenTelemetry()
    .WithTracing(tracing => tracing
        .AddSource("Pipevine")
        .AddAspNetCoreInstrumentation()
        .AddOtlpExporter())
    .WithMetrics(metrics => metrics
        .AddMeter("Pipevine")
        .AddAspNetCoreInstrumentation()
        .AddPrometheusExporter());

Qualquer exportador padrão do ecossistema OpenTelemetry para .NET funciona sem adaptação — OTLP para um coletor centralizado, Prometheus para scraping direto, ou qualquer outro que o seu backend de observabilidade exija.

samples/06-full-stack (no repositório do Pipevine) traz um exemplo completo rodando: Prometheus fazendo scraping de duas aplicações Pipevine (uma api, um consumer) e um dashboard Grafana pré-provisionado, mostrando taxa de execução e duração (p50/p95) por step, lado a lado com as métricas HTTP padrão do ASP.NET Core.

Para onde ir daqui