@super-dev.app · Full-stack · ★ disponible para proyectos
12,8k suscriptores·47 vídeos·Activo desde 2017
Desarrollador full-stack .NET / Angular con perfil DevOps en Azure Cloud. También cómodo con Flutter + Firebase. Construyo productos, los despliego, los monitorizo.
Cuando una petición atraviesa tres servicios y es lenta, los logs por sí solos no dicen dónde . La observabilidad moderna se basa en tres señales correlacionadas — trazas, métricas, logs — y OpenTelemetry es su estándar neutral respecto al proveedor: se instrumenta una vez y se exporta a cualquier backend (Jaeger, Prometheus, Azure Monitor) sin reescribir el código.
Tres señales, una sola API
OpenTelemetry unifica los tres pilares de la observabilidad. Las trazas siguen una petición de extremo a extremo mediante una serie de spans correlacionados por un trace_id . Las métricas agregan contadores e histogramas (tasa de peticiones, latencia p95). Los logs aportan el contexto textual, ahora vinculado al trace_id actual. .NET expone de forma nativa estos conceptos a través de System.Diagnostics.Activity (los spans) y System.Diagnostics.Metrics .
La auto-instrumentación cubre gratuitamente lo esencial: AddAspNetCoreInstrumentation crea un span por petición entrante, AddHttpClientInstrumentation propaga el contexto en las llamadas salientes — la correlación entre servicios se realiza automáticamente a través de las cabeceras traceparent del estándar W3C. Para la lógica de negocio, se añaden spans manuales para medir una operación concreta y adjuntarle atributos de negocio.
Los atributos ( SetTag ) transforman una traza en herramienta de depuración: se filtra por order.total > 1000 o se identifica el span exacto que disparó la latencia.
El exportador OTLP y el Collector
OTLP (OpenTelemetry Protocol) es el formato de transporte común. En lugar de exportar directamente a un backend, se envía todo al Collector : un proceso intermedio que recibe, transforma (batching, muestreo, filtrado de atributos sensibles) y redistribuye hacia uno o varios destinos. La app solo conoce un endpoint; cambiar de backend se convierte en una modificación de configuración en el Collector, no en un redespliegue.
YAML
1receivers:
2otlp:
3protocols:
4grpc:
5endpoint: 0.0.0.0:4317
6processors:
7batch:
8timeout: 5s
9exporters:
10prometheus:
11endpoint: 0.0.0.0:8889
12otlp/jaeger:
13endpoint: jaeger:4317
14service:
15pipelines:
16traces:
17receivers: [otlp]
18processors: [batch]
19exporters: [otlp/jaeger]
20metrics:
21receivers: [otlp]
22processors: [batch]
23exporters: [prometheus]
La app apunta al Collector mediante OTEL_EXPORTER_OTLP_ENDPOINT , una variable de entorno estándar. La documentación de OpenTelemetry cubre el muestreo ( ParentBased , TraceIdRatioBased ) imprescindible en producción para no verse desbordado por el volumen de trazas.
Instrumentar con OpenTelemetry es desacoplar el código de la herramienta de monitorización. El día que se migra de Jaeger a Azure Monitor, no se toca ni una sola línea de la app : se cambia el exportador del Collector.