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
ActivitySourcepró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.