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
host
para 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_ADMIN
puede 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!