🎨 Sysprovider Code
Sysprovider LogoWiki
🇪🇸Hosting español para ecommerce

Observabilidad con OpenTelemetry en Linux

Actualizado el 26 de diciembre de 2025

Introducción a la Observabilidad Moderna con OpenTelemetry en Linux

La gestión de infraestructuras Linux modernas ha evolucionado más allá del simple monitoreo de recursos. Hoy, la observabilidad es la capacidad de comprender el estado interno de un sistema a partir de los datos que genera. OpenTelemetry (OTel) se ha convertido en el estándar de facto para instrumentar aplicaciones y sistemas, unificando métricas, trazas y logs en un ecosistema coherente.

En este artículo, exploraremos cómo implementar OpenTelemetry en entornos Linux, cubriendo desde la instalación del Collector hasta la correlación de señales. Si eres SysAdmin o DevOps, esto te dará las herramientas para diagnosticar problemas complejos sin depender de soluciones propietarias.

¿Por qué OpenTelemetry en Linux?

Linux es el sistema operativo dominante en servidores, contenedores y edge computing. Sin embargo, las herramientas tradicionales como top, iostat o journalctl ofrecen datos aislados. OpenTelemetry permite:

  • Correlacionar un pico de CPU (métrica) con una petición lenta (traza) y los errores en logs.
  • Estandarizar el formato de datos entre diferentes servicios (microservicios, bases de datos, etc.).
  • Reducir el vendor lock-in al usar un estándar abierto soportado por la CNCF.

[INFO] OpenTelemetry no es una herramienta de monitoreo en sí misma, sino un conjunto de APIs, SDKs y un Collector que recolecta, procesa y exporta datos a backends como Prometheus, Jaeger o Grafana.

Componentes Clave de OpenTelemetry

El Collector: El Corazón de la Observabilidad

El OpenTelemetry Collector es un agente que corre en servidores Linux y se encarga de recibir, procesar y exportar datos. Se puede configurar como:

  • Agent (modo liviano, adjunto a aplicaciones).
  • Gateway (modo centralizado para filtrar y enrutar datos).

Su arquitectura es modular, basada en receptores, procesadores y exportadores.

Las Tres Señales: Métricas, Trazas y Logs

SeñalDescripciónEjemplo en Linux
MétricasDatos numéricos agregados en el tiempoUso de CPU, memoria, I/O de disco
TrazasRegistro de flujos de peticiones distribuidasLlamadas a una API, consultas SQL
LogsEventos discretos con contextoEntradas de syslog, errores de aplicación

OpenTelemetry unifica estas señales mediante contexto de propagación, permitiendo que una traza tenga sus propias métricas y logs asociados.

Instalación del OpenTelemetry Collector en Linux

Paso 1: Descargar e Instalar

Usaremos la versión estable para Linux amd64:

# Descargar el binario
wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/latest/download/otelcol-contrib_linux_amd64.tar.gz

# Extraer
tar -xzf otelcol-contrib_linux_amd64.tar.gz

# Mover a /usr/local/bin
sudo mv otelcol-contrib /usr/local/bin/otelcol

Paso 2: Crear un Service Systemd

Para gestión como servicio:

sudo useradd -r -s /bin/false otelcol
sudo mkdir /etc/otelcol
sudo chown otelcol:otelcol /etc/otelcol

# Crear archivo de servicio
sudo tee /etc/systemd/system/otelcol.service <<EOF
[Unit]
Description=OpenTelemetry Collector
After=network.target

[Service]
User=otelcol
ExecStart=/usr/local/bin/otelcol --config /etc/otelcol/config.yaml
Restart=always

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable otelcol

Paso 3: Configuración Básica del Collector

Crea /etc/otelcol/config.yaml:

receivers:
  hostmetrics:
    collection_interval: 10s
  otlp:
    protocols:
      grpc:
        endpoint: localhost:4317

processors:
  batch:
    timeout: 1s
  memory_limiter:
    check_interval: 1s
    limit_mib: 512

exporters:
  prometheus:
    endpoint: "0.0.0.0:8889"
    namespace: "linux"
  logging:
    loglevel: debug

service:
  pipelines:
    metrics:
      receivers: [hostmetrics, otlp]
      processors: [memory_limiter, batch]
      exporters: [prometheus, logging]

Esta configuración:

  • Recolecta métricas del host (CPU, RAM, disco) cada 10 segundos.
  • Acepta datos vía OTLP (OpenTelemetry Protocol) desde aplicaciones instrumentadas.
  • Exporta a Prometheus y muestra logs en consola.

[TIP] Ajusta collection_interval a 5s para entornos de alta frecuencia, pero vigila el overhead.

Instrumentación de Aplicaciones Linux

Métricas del Sistema con Host Metrics Receiver

El receptor hostmetrics ya nos da métricas esenciales sin tocar código. Pero para obtener trazas y logs correlacionados, necesitamos instrumentar aplicaciones.

Ejemplo con Python usando el SDK de OpenTelemetry:

pip install opentelemetry-api opentelemetry-sdk opentelemetry-instrumentation-flask

Código de ejemplo:

from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.instrumentation.flask import FlaskInstrumentor
from flask import Flask

app = Flask(__name__)

# Configurar tracer
provider = TracerProvider()
processor = BatchSpanProcessor(OTLPSpanExporter())
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)

# Instrumentar Flask
FlaskInstrumentor().instrument_app(app)

@app.route('/')
def hello():
    return 'Hola, mundo instrumentado!'

if __name__ == '__main__':
    app.run(port=5000)

Cada petición HTTP generará una traza que el Collector enviará a Jaeger o Grafana Tempo.

Logs: Integración con el Sistema de Logging de Linux

Para enviar logs del sistema (syslog, journald) a OpenTelemetry, usamos el receptor filelog:

receivers:
  filelog:
    include: [ /var/log/syslog ]
    start_at: beginning

Luego en el pipeline:

service:
  pipelines:
    logs:
      receivers: [filelog]
      processors: [batch]
      exporters: [logging, elasticsearch]

[WARNING] Los logs pueden ser voluminosos. Usa procesadores como filter o transform para eliminar eventos irrelevantes.

Correlación de Señales: El Poder de la Observabilidad

La verdadera magia ocurre cuando métricas, trazas y logs se entrelazan. OpenTelemetry usa atributos comunes como service.name, trace_id y span_id.

Ejemplo Práctico: Diagnóstico de una Aplicación Lenta

  1. Métrica: El receptor hostmetrics detecta un pico de CPU al 95%.
  2. Traza: La aplicación instrumentada muestra que la ruta /api/report tarda 12 segundos.
  3. Log: El log asociado a esa traza muestra ERROR: Timeout en consulta a base de datos.

Con esto, sabes que el cuello de botella es una consulta SQL lenta, y no solo que el servidor tiene alta carga.

Para lograr esta correlación, asegúrate de que todos los componentes compartan el mismo contexto de propagación. En el Collector, habilita el procesador attributes para inyectar IDs:

processors:
  attributes:
    actions:
      - key: environment
        value: production
        action: insert

Exportación a Backends Populares

Prometheus para Métricas

El exportador Prometheus expone métricas en /metrics. Configura Prometheus para scrape:

scrape_configs:
  - job_name: 'otel-collector'
    static_configs:
      - targets: ['localhost:8889']

Jaeger o Tempo para Trazas

Usa el exportador Jaeger:

exporters:
  jaeger:
    endpoint: "localhost:14250"
    tls:
      insecure: true

Grafana Loki o Elasticsearch para Logs

Ejemplo con Elasticsearch:

exporters:
  elasticsearch:
    endpoints: ["http://localhost:9200"]
    logs_index: "otel-logs"

Buenas Prácticas para SysAdmin

1. Gestión de Recursos

El Collector puede consumir memoria si no se limita. Siempre usa el procesador memory_limiter:

processors:
  memory_limiter:
    limit_mib: 1024
    spike_limit_mib: 256

2. Seguridad

  • Usa TLS para el protocolo OTLP si los datos viajan por red.
  • Restringe el acceso al endpoint de métricas (puerto 8889) con firewall.

3. Monitoreo del Propio Collector

Expon métricas internas del Collector:

service:
  telemetry:
    metrics:
      address: ":8888"

Luego scrapea localhost:8888/metrics para ver su salud.

4. Pruebas en Entornos de Contenedores

Si usas Docker o Kubernetes, el Collector se despliega como sidecar o DaemonSet. La configuración es similar, pero ajusta los endpoints a la red interna.

Solución de Problemas Comunes

El Collector no recibe datos

# Verificar logs
journalctl -u otelcol -f

# Probar conectividad con el receptor OTLP
curl -v telnet localhost 4317

Métricas ausentes

Asegúrate de que el pipeline tenga el receptor correcto. El receptor hostmetrics requiere permisos de lectura de /proc.

Trazas no correlacionadas

Verifica que el contexto de propagación esté habilitado en todos los servicios. En aplicaciones HTTP, el header traceparent debe propagarse.

[INFO] OpenTelemetry soporta propagación W3C Trace Context, que es el estándar moderno.

Conclusión

La observabilidad con OpenTelemetry en Linux transforma la forma en que los SysAdmin y equipos DevOps diagnostican problemas. Al unificar métricas, trazas y logs bajo un mismo estándar, se eliminan los silos de información y se acelera la resolución de incidentes.

Implementar el Collector es solo el primer paso. La verdadera potencia está en instrumentar todas tus aplicaciones, desde scripts Bash hasta microservicios en Go, Python o Java. Con el tiempo, tu infraestructura Linux se vuelve transparente, permitiéndote anticipar fallos antes de que afecten a los usuarios.

Empieza hoy: instala el Collector, configura un pipeline básico y exporta a tu backend favorito. La comunidad de OpenTelemetry es activa y el ecosistema sigue creciendo. Linux y la observabilidad son el futuro de la administración de sistemas.

¿Necesitas ayuda?Son dos de nuestros técnicos, Agustín y Mikel, y están disponibles para resolver cualquier problema.

Hablar con ellos ahora
Agustín y Mikel