菜单
Grafana Cloud

将 Beyla 作为 Docker 容器运行

Beyla 可以作为独立的 Docker 容器运行,并能够对运行在另一个容器中的进程进行埋点。

在 Docker Hub 上查找 Beyla 的最新镜像,名称如下

grafana/beyla:latest

Beyla 容器必须按以下方式配置

  • privileged 容器或具有 SYS_ADMIN 能力的容器运行(但后一个选项在某些容器环境中可能不起作用)
  • 与正在进行埋点的容器共享 PID 空间

Docker CLI 示例

对于此示例,您需要一个运行 HTTP/S 或 GRPC 服务的容器。如果您没有,可以使用这个用 Go 编写的简单博客引擎服务

sh
docker run -p 18443:8443 --name goblog mariomac/goblog:dev

上述命令运行了一个简单的 HTTPS 应用程序。该进程打开容器的内部端口 8443,然后在主机级别暴露为端口 18443

设置环境变量以配置 Beyla 打印到 stdout 并监听一个端口(容器)来检查可执行文件

sh
export BEYLA_TRACE_PRINTER=text
export BEYLA_OPEN_PORT=8443

Beyla 需要使用以下设置运行

  • --privileged 模式下,或具有 SYS_ADMIN 能力(尽管在某些容器环境中 SYS_ADMIN 可能不足够)
  • 容器 PID 命名空间,使用选项 --pid="container:goblog"
sh
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,类似于

sh
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 示例的相同功能

yaml
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 文件并使用应用程序生成跟踪

sh
docker compose -f compose-example.yml up