将 Beyla 作为 Docker 容器运行
Beyla 可以作为独立的 Docker 容器运行,并能够对运行在另一个容器中的进程进行埋点。
在 Docker Hub 上查找 Beyla 的最新镜像,名称如下
grafana/beyla:latest
Beyla 容器必须按以下方式配置
- 以 privileged 容器或具有
SYS_ADMIN
能力的容器运行(但后一个选项在某些容器环境中可能不起作用) - 与正在进行埋点的容器共享 PID 空间
Docker CLI 示例
对于此示例,您需要一个运行 HTTP/S 或 GRPC 服务的容器。如果您没有,可以使用这个用 Go 编写的简单博客引擎服务
docker run -p 18443:8443 --name goblog mariomac/goblog:dev
上述命令运行了一个简单的 HTTPS 应用程序。该进程打开容器的内部端口 8443
,然后在主机级别暴露为端口 18443
。
设置环境变量以配置 Beyla 打印到 stdout 并监听一个端口(容器)来检查可执行文件
export BEYLA_TRACE_PRINTER=text
export BEYLA_OPEN_PORT=8443
Beyla 需要使用以下设置运行
- 在
--privileged
模式下,或具有SYS_ADMIN
能力(尽管在某些容器环境中SYS_ADMIN
可能不足够) - 容器 PID 命名空间,使用选项
--pid="container:goblog"
。
docker run --rm \
-e BEYLA_OPEN_PORT=8443 \
-e BEYLA_TRACE_PRINTER=text \
--pid="container:goblog" \
--privileged \
grafana/beyla:latest
Beyla 运行后,在浏览器中打开 https://:18443
,使用应用程序生成测试数据,并验证 Beyla 会将跟踪请求打印到 stdout,类似于
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
现在 Beyla 正在跟踪目标 HTTP 服务,您可以配置它将指标和跟踪发送到 OpenTelemetry 端点,或者让 Prometheus 抓取指标。
有关如何导出跟踪和指标的信息,请参阅配置选项文档。
Docker Compose 示例
以下 Docker Compose 文件复制了 Docker CLI 示例的相同功能
version: "3.8"
services:
# Service to instrument. Change it to any
# other container that you want to instrument.
goblog:
image: mariomac/goblog:dev
ports:
# Exposes port 18843, forwarding it to container port 8443
- "18443:8443"
autoinstrumenter:
image: grafana/beyla:latest
pid: "service:goblog"
privileged: true
environment:
BEYLA_TRACE_PRINTER: text
BEYLA_OPEN_PORT: 8443
使用以下命令运行 Docker Compose 文件并使用应用程序生成跟踪
docker compose -f compose-example.yml up