Ejecutar OBI como un contenedor Docker
The content of this page may be outdated and some links may be invalid. A newer version of this page exists in English. To see the changes to the English page since this page was last updated: visit GitHub compare f7cb8b65..a4915a1d and search for More information ...
content/en/docs/zero-code/obi/setup/docker.md.
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!