Grafana Beyla resuelve problema clásico de observability: instrumentar apps legacy o de terceros. En vez de requerir cambios de código + SDK integration, Beyla observa syscalls via eBPF y genera traces OpenTelemetry automáticamente. Para Go, Java, Python, Node, Rust — sin tocar el código.
Qué hace
- Auto-instrumentation de HTTP/gRPC requests.
- Genera spans OTel con service name, method, status, latency.
- Exporta OTLP a cualquier backend (Tempo, Jaeger, Datadog).
- Multi-language: funciona con compiled (Go, Rust) e interpreted (Python, Node).
- DNS tracking, SQL tracking (limited).
Arquitectura
[App] [App] [App]
\ | /
\ (syscalls)
\ | /
[Beyla eBPF agent]
↓ OTLP
[OTel Collector / Grafana Tempo]
Un Beyla por nodo (DaemonSet en K8s). Observa traffic de apps en el mismo nodo.
Instalación Kubernetes
helm repo add grafana https://grafana.github.io/helm-charts
helm install beyla grafana/beyla \
--set env.BEYLA_AUTO_INSTRUMENT_TARGET=my-service \
--set env.OTEL_EXPORTER_OTLP_ENDPOINT=http://tempo:4317
O config manual:
service_name: my-api
log_level: info
discovery:
services:
- open_ports: 8080
- exe_path: ".*/my-api"
otel_traces_export:
endpoint: http://tempo:4317
protocol: grpc
otel_metrics_export:
endpoint: http://mimir:4317
Target apps por puerto, exe path, k8s labels.
Lenguajes soportados
- Go: excelente (native, deep visibility).
- Rust: bueno.
- C/C++: funcional.
- Java: HTTP básico (auto-instrumentation via Java agent más rica).
- Python: requests, aiohttp, Django.
- Node.js: http, express, fetch.
- .NET: básico.
Para Go/Rust, casi como SDK manual. Para otros, complementa SDK.
Métricas y traces
Beyla genera:
Traces:
- Span per HTTP/gRPC request.
- Attributes: method, path, status, duration.
- Context propagation (via W3C TraceContext headers).
Métricas:
- RED metrics (rate, errors, duration).
- Histogram buckets para latency.
- Service graph metrics.
Output OTLP estándar — cualquier backend OTel compatible.
Beyla vs SDK
| Aspecto | Beyla (eBPF) | SDK manual |
|---|---|---|
| Code changes | Zero | Required |
| Granularity | Call boundaries | Custom business logic |
| Context propagation | Header-based | Explicit |
| Business metrics | No | Yes |
| Distributed tracing | Limited para async | Full |
| Performance overhead | 1-3% | 1-5% |
Beyla: great primer paso, apps legacy, quick wins. SDK: indispensable para rich business-level observability.
Usar ambos es pattern común: Beyla para coverage amplio, SDK para apps críticas con deep instrumentation.
Casos de uso
Donde Beyla brilla:
- Legacy apps que no puedes modify.
- 3rd party apps (databases, caches) para observar ingress/egress.
- Quick POC de observability antes de invertir en SDK.
- Fill gaps en apps donde SDK es imperfecto.
- Multi-language cluster con observability uniforme sin adaptar cada lenguaje.
Limitations
Honest:
- Context propagation limitado si app no forward trace headers.
- Deep spans dentro de app no visibles (solo ingress/egress).
- Business metrics impossible — Beyla solo ve syscalls.
- HTTPS encryption: Beyla no decrypta (ve solo TLS metadata).
- Performance overhead en apps I/O-heavy.
- eBPF kernel requirements: 5.8+ recommended.
Integración con stack Grafana
Stack completo:
- Beyla en cada nodo → OTLP.
- Grafana Alloy (optional) como collector.
- Grafana Tempo para traces.
- Grafana Mimir/Prometheus para metrics.
- Grafana para visualization.
Service Graph generado automáticamente de Beyla data.
Context propagation
Para traces distribuidos complete, apps deben forward W3C TraceContext:
- Go HTTP client: añadir OTel HTTP client middleware.
- Python requests: opentelemetry-instrumentation-requests.
- Envoy sidecar: automaticamente propaga.
Sin propagation, cada servicio tiene traces locales pero no unificadas cross-service.
Beyla vs Pixie
Pixie (CNCF sandbox) es competidor más completo:
- Visualization integrada.
- Query language (PxL).
- Flame graphs.
Beyla es más focused:
- Generate OTel data.
- Lightweight.
- Integra con Grafana stack nativo.
Para Grafana-heavy stacks, Beyla. Para Pixie-native, Pixie.
Overhead real
Medido:
- CPU: 0.5-2% per Beyla agent.
- Memory: ~50-100MB.
- Network: minimal (OTLP compressed).
- Latency on apps: <1ms added.
Low-enough para producción.
Security
Requiere:
- Privileged container (eBPF).
- HostPID para ver processes.
- HostNetwork para ciertos features.
Superficie de seguridad considerable. RBAC estricto recomendado.
Deployment incremental
Adoption path:
- Beyla en staging observando algunos services.
- Validate overhead y data quality.
- Roll out cluster-wide.
- Compare with SDK en apps instrumentadas, identify gaps.
- Decide qué apps mantienen ambos, cuáles solo Beyla.
Fácil rolling back — no changes en apps.
Conclusión
Grafana Beyla es tool ideal para kickstart observability sin project instrumentation largo. Para Go apps y legacy services, valor inmediato. Para apps modernas con SDK proper, Beyla complementa pero no reemplaza. La combinación Beyla + OTel SDK cubre spectrum de observability con minimum effort. Para teams en Grafana stack, inclusion natural. Para teams en Datadog/New Relic, Beyla output OTLP = portable.
Síguenos en jacar.es para más sobre observabilidad, eBPF y Grafana stack.