Ejecutar OBI como un contenedor Docker
OBI puedes ejecutar un contenedor Docker independiente que puede instrumentar un proceso que se ejecuta en otro contenedor.
Encuentra la última imagen de OBI en Docker Hub con el siguiente nombre:
ebpf-instrument:main
El contenedor OBI debe configurarse de la siguiente manera:
- Ejecutarse como un contenedor privilegiado o como un contenedor con la
capacidad
SYS_ADMIN(pero esta última opción podría no funcionar en algunos entornos de contenedores). - Utilizar el espacio de nombres PID
hostpara permitir el acceso a los procesos de otros contenedores.
Ejemplo de CLI de Docker
Para este ejemplo, se necesita un contenedor que ejecute un servicio HTTP/S o gRPC. Si no tiene uno, puedes utilizar este sencillo servicio de motor de blog escrito en Go:
docker run -p 18443:8443 --name goblog mariomac/goblog:dev
El comando anterior ejecuta una aplicación HTTPS sencilla. El proceso abre el
puerto interno del contenedor 8443, que luego se expone en el nivel del host
como el puerto 18443. Establece las variables de entorno para configurar OBI
para que imprima en stdout y escuche un puerto (contenedor) para inspeccionar el
ejecutable:
export OTEL_EBPF_TRACE_PRINTER=text
export OTEL_EBPF_OPEN_PORT=8443
OBI debe ejecutarse con la siguiente configuración:
- en modo
--privileged, o con la capacidadSYS_ADMIN(a pesar de queSYS_ADMINpuede no ser suficiente en algunos entornos de contenedores) - el espacio de nombres PID del host, con la opción
--pid=host.
docker run --rm \
-e OTEL_EBPF_OPEN_PORT=8443 \
-e OTEL_EBPF_TRACE_PRINTER=text \
--pid=host \
--privileged \
docker.io/otel/ebpf-instrument:main
Una vez que OBI esté en funcionamiento, abre https://localhost:18443 en tu
navegador, utiliza la aplicación para generar datos de prueba y comprueba que
OBI imprime solicitudes de trazado en stdout similares a:
time=2023-05-22T14:03:42.402Z level=INFO msg="creating instrumentation pipeline"
time=2023-05-22T14:03:42.526Z level=INFO msg="Starting main node"
2023-05-22 14:03:53.5222353 (19.066625ms[942.583µs]) 200 GET / [172.17.0.1]->[localhost:18443] size:0B
2023-05-22 14:03:53.5222353 (355.792µs[321.75µs]) 200 GET /static/style.css [172.17.0.1]->[localhost:18443] size:0B
2023-05-22 14:03:53.5222353 (170.958µs[142.916µs]) 200 GET /static/img.png [172.17.0.1]->[localhost:18443] size:0B
2023-05-22 14:13:47.52221347 (7.243667ms[295.292µs]) 200 GET /entry/201710281345_instructions.md [172.17.0.1]->[localhost:18443] size:0B
2023-05-22 14:13:47.52221347 (115µs[75.625µs]) 200 GET /static/style.css [172.17.0.1]->[localhost:18443] size:0B
Ahora que OBI está rastreando el servicio HTTP de destino, puedes configurarlo para enviar métricas y trazas a un endpoint de OpenTelemetry, o haz que Prometheus recopile las métricas.
Para obtener información sobre cómo exportar trazas y métricas, consulta la documentación de opciones de configuración.
Ejemplo de Docker Compose
El siguiente archivo Docker Compose reproduce la misma funcionalidad del ejemplo de la CLI de Docker:
version: '3.8'
services:
# Servicio a instrumentar. Cambiar por cualquier otro contenedor
# que desee instrumentar.
goblog:
image: mariomac/goblog:dev
ports:
# Expone el puerto 18843 y lo reenvía al puerto 8443 del contenedor
- '18443:8443'
autoinstrumenter:
image: docker.io/otel/ebpf-instrument:main
pid: 'host'
privileged: true
environment:
OTEL_EBPF_TRACE_PRINTER: text
OTEL_EBPF_OPEN_PORT: 8443
Ejecuta el archivo Docker Compose con el siguiente comando y utiliza la aplicación para generar trazas:
docker compose -f compose-example.yml up
Comentarios
¿Fue útil esta página?
Thank you. Your feedback is appreciated!
Please let us know how we can improve this page. Your feedback is appreciated!