快速入门:使用 Beyla 检测 Go 服务
1. 运行一个可检测的 Go 服务
运行一个可检测的 Go 服务,或下载并运行一个简单的示例 Go HTTP 服务。
curl -OL https://raw.githubusercontent.com/grafana/beyla/main/examples/quickstart/golang/quickstart.go
go run quickstart.go
2. 下载 Beyla
从 Beyla 发布页面 下载最新 Beyla 可执行文件。解压并将 Beyla 可执行文件复制到您的 $PATH
中的任何位置。
作为替代方案(如果您的主机已安装 Go 工具集),您可以使用 go install
命令直接下载 Beyla 可执行文件
go install github.com/grafana/beyla/cmd/beyla@latest
3. (可选) 获取 Grafana Cloud 凭证
Beyla 可以将指标和分布式追踪导出到任何 OpenTelemetry 端点,也可以将指标作为 Prometheus 端点暴露。但是,我们推荐使用 Grafana Cloud 中的 OpenTelemetry 端点。您可以在 Grafana 网站 获取免费的 Grafana Cloud 账户。
在 Grafana Cloud Portal 中,找到 OpenTelemetry 方框并点击 配置。
在 Password / API token 下,点击 立即生成 并按照说明创建一个默认 API token。
Environment Variables 将会填充一组标准的 OpenTelemetry 环境变量,这些变量将为 Beyla 提供连接端点和凭证信息。
复制 Environment Variables 并保留以便下一步使用。
4. 运行 Beyla 并进行最少配置
要运行 Beyla,首先设置以下环境变量
- 从上一步复制的
OTEL_EXPORTER_OTLP_PROTOCOL
、OTEL_EXPORTER_OTLP_ENDPOINT
和OTEL_EXPORTER_OTLP_HEADERS
变量。 BEYLA_OPEN_PORT
: 被检测服务使用的端口(例如,80
或443
)。如果使用本指南第一节中的示例服务,将此变量设置为8080
。
为了方便本地测试,设置环境变量 BEYLA_TRACE_PRINTER=text
。启用此选项后,Beyla 会将分布式追踪以文本格式打印到标准输出。
注意: Beyla 需要管理员 (sudo) 权限,或者至少需要被授予 CAP_SYS_ADMIN
能力。
export BEYLA_OPEN_PORT=8080
export BEYLA_TRACE_PRINTER=text
export OTEL_EXPORTER_OTLP_PROTOCOL="http/protobuf"
export OTEL_EXPORTER_OTLP_ENDPOINT="https://otlp-gateway-prod-eu-west-0.grafana.net/otlp"
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Basic ...your-encoded-credentials..."
sudo -E beyla
5. 测试服务
在 Beyla 和服务运行的情况下,向被检测服务发起 HTTP 请求
curl https://:8080/foo
Beyla 应向标准输出打印类似于以下的分布式追踪
2024-01-08 14:06:14.182614 (432.191µs[80.421µs]) 200 GET /foo [127.0.0.1]->[localhost:8080]
size:0B svc=[{quickstart go lima-ubuntu-lts-8222}] traceparent=[00-0f82735dab5798dfbf7f7a26d5df827b-0000000000000000-01]
上述分布式追踪显示
2024-01-08 14:06:14.182614
: 分布式追踪的时间(432.191µs[80.421µs])
: 请求的总响应时间,其中包含请求的实际内部执行时间(不包括请求排队时间)200 GET /foo
: 响应代码、HTTP 方法和 URL 路径[127.0.0.1]->[localhost:8080]
源和目的 host:portsize:0B
: HTTP 请求体的大小(0 字节,因为这是一个GET
请求)。对于非 Go 程序,此大小还将包括请求头的大小svc=[{quickstart go lima-ubuntu-lts-8222}]
:quickstart
服务,用 Go 编写,服务实例名称自动创建为lima-ubuntu-lts-8222
traceparent
,如父请求接收到的,如果父请求未指定则为新的随机值
几分钟后,分布式追踪将出现在 Grafana Cloud 中。例如,在分布式追踪浏览器中
6. 配置路由
Grafana Cloud 中暴露的 Span 名称是通用的 GET /**
,而它应该显示类似 GET /foo
的内容(测试请求 URL 的路径)。
Beyla 将任何未知 URL 路径归类为 /**
,以避免意外的基数爆炸。
配置路由以告知 Beyla 预期的路由。
对于本快速入门,让 Beyla 启发式地分组路由。
首先,创建一个 config.yml
文件,内容如下
routes:
unmatched: heuristic
然后,使用 -config
参数运行 Beyla(或者改用 BEYLA_CONFIG_PATH
环境变量)
sudo -E beyla -config config.yml
最后,发起 HTTP 请求
curl https://:8080/foo
curl https://:8080/user/1234
curl https://:8080/user/5678
Grafana 现在将启发式地为每个分布式追踪分配路由。/foo
获得自己的路由,而 /user/1234
和 /user/5678
则被归类到 /user/*
路由中。
后续步骤
- 获取更多关于不同 Beyla 配置选项 的详细信息。
- 了解如何将 Beyla 部署为 Docker 容器 或 Kubernetes DaemonSet 或 sidecar。