Observabilidade
Logs
Métricas
Tracing
OpenTelemetry
Prometheus
Grafana
Cloud
DevOps

Observabilidad en sistemas distribuidos: registros, métricas y seguimiento

Observabilidad en sistemas distribuidos: registros, métricas y seguimiento

En entornos de microservicios, saber qué sucede dentro de la aplicación es fundamental. La observabilidad va más allá del simple monitoreo: le permite hacer preguntas a su sistema y recibir respuestas confiables.

Tres pilares de la observabilidad

  1. Registros estructurados, registros de eventos en formato JSON, facilitando consultas.
  2. Métricas, valores numéricos a lo largo del tiempo (latencia, tasa de error, uso de CPU).
  3. Seguimiento distribuido, seguimiento de solicitudes que cruzan múltiples servicios.

Estrategia de implementación

  • Centralizar registros usando Elastic Stack (Filebeat → Logstash → Elasticsearch → Kibana) o servicios administrados como CloudWatch Logs.
  • Exportar métricas a Prometheus y verlas en Grafana.
  • Código de instrumento con OpenTelemetry, enviando spans a Jaeger o Zipkin.

Lista de verificación de observabilidad

  • [] Configurar el registrador JSON (por ejemplo: Winston, Bunyan).
  • Configure service.name y environment en todos los registros.
  • Exportar métricas estándar (process_cpu_seconds_total, process_resident_memory_bytes).
  • Instrumentar clientes y servidores HTTP con OpenTelemetry.
  • [] Crear paneles de latencia, tasa de error y rendimiento.
  • [] Definir alertas de SLA (por ejemplo, latencia > 500 ms, error > 1 %).
  • Correlación de ID de documento (trace_id, span_id).

Ejemplo de registrador JSON (Node.js)

const winston = require('winston'); const logger = winston.createLogger({ level: 'info', format: winston.format.combine( winston.format.timestamp(), winston.format.json() ), defaultMeta: { service: process.env.SERVICE_NAME, environment: process.env.NODE_ENV }, transports: [new winston.transports.Console()] }); module.exports = logger;

Ejemplo de métrica personalizada con Prometheus (Node.js)

const client = require('prom-client'); const requestDuration = new client.Histogram({ name: 'http_request_duration_seconds', help: 'Duração das requisições HTTP em segundos', labelNames: ['method', 'route', 'status_code'] }); app.use((req, res, next) => { const end = requestDuration.startTimer({ method: req.method, route: req.path }); res.on('finish', () => end({ status_code: res.statusCode })); next(); });

Ejemplo de seguimiento con OpenTelemetry (Node.js)

const { NodeTracerProvider } = require('@opentelemetry/sdk-trace-node'); const { SimpleSpanProcessor } = require('@opentelemetry/sdk-trace-base'); const { JaegerExporter } = require('@opentelemetry/exporter-jaeger'); const provider = new NodeTracerProvider(); provider.addSpanProcessor(new SimpleSpanProcessor(new JaegerExporter({ endpoint: process.env.JAEGER_ENDPOINT }))); provider.register();

Conclusión

Implementar la observabilidad requiere disciplina, pero trae beneficios inmediatos: detección temprana de fallas, reducción del MTTR (tiempo medio de recuperación) y confianza para escalar sistemas críticos.


¿Cómo monitorean sus servicios? ¡Comparte tus herramientas favoritas!

Lea también