菜单
文档breadcrumb arrow Beylabreadcrumb arrow 快速入门breadcrumb arrow C/C++ 快速入门
Grafana Cloud

快速入门:使用 Beyla 监测 C/C++ 服务

1. 运行一个可监测的 C/C++ 服务

运行一个可监测的 C/C++ 服务,或下载并运行一个简单的示例 C++ HTTP 服务

curl -OL https://raw.githubusercontent.com/grafana/beyla/main/examples/quickstart/cpp/httplib.h
curl -OL https://raw.githubusercontent.com/grafana/beyla/main/examples/quickstart/cpp/quickstart.cpp
g++ -std=c++11 quickstart.cpp -o quickstart && ./quickstart

如果需要,请将 g++ 命令替换为支持 C++11 的其他编译器。

2. 下载 Beyla

Beyla 发布页面 下载最新的 Beyla 可执行文件。解压并将 Beyla 可执行文件复制到您 $PATH 中的任何位置。

3. (可选)获取 Grafana Cloud 凭据

Beyla 可以将指标和追踪导出到任何 OpenTelemetry 端点,也可以将指标作为 Prometheus 端点暴露。然而,我们推荐使用 Grafana Cloud 中的 OpenTelemetry 端点。您可以在 Grafana 网站上获取一个免费的 Grafana Cloud 账户。

在 Grafana Cloud Portal 中,找到 OpenTelemetry 框,然后点击 Configure

OpenTelemetry Grafana Cloud portal

Password / API token 下方,点击 Generate now 并按照说明创建一个默认的 API token。

Environment Variables 将填充一组标准的 OpenTelemetry 环境变量,这些变量将为 Beyla 提供连接端点和凭据信息。

OTLP connection headers

复制 Environment Variables 并保存到下一步使用。

4. 使用最小配置运行 Beyla

要运行 Beyla,首先设置以下环境变量:

  • 从上一步复制的 OTEL_EXPORTER_OTLP_PROTOCOLOTEL_EXPORTER_OTLP_ENDPOINTOTEL_EXPORTER_OTLP_HEADERS 变量。
  • BEYLA_OPEN_PORT: 被监测服务正在使用的端口(例如,80443)。如果使用本指南第一节中的示例服务,将此变量设置为 8080

为了便于本地测试,设置 BEYLA_TRACE_PRINTER=text 环境变量。设置此选项后,Beyla 会将追踪以文本格式打印到标准输出。

注意:Beyla 需要管理员 (sudo) 权限,或者至少需要被授予 CAP_SYS_ADMIN 能力。

sh
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-09 10:31:33.19103133 (3.254486ms[3.254486ms]) 200 GET /foo [127.0.0.1]->[127.0.0.1:8080]
size:80B svc=[{quickstart  generic lima-ubuntu-lts-5074}] traceparent=[00-46214bd23716280eef43cf798dbe5522-0000000000000000-01]

上述追踪显示了:

  • 2024-01-09 10:31:33.19103133: 追踪时间
  • (3.254486ms[3.254486ms]): 请求的总响应时间
  • 200 GET /foo: 响应代码、HTTP 方法和 URL 路径
  • [127.0.0.1]->[127.0.0.1:8080] 源和目标 host:port
  • size:80B: HTTP 请求的大小(请求头和请求体的总和)
  • svc=[{quickstart generic lima-ubuntu-lts-5074}]: quickstart 服务,使用通用的基于内核的监测器,服务实例名称 lima-ubuntu-lts-5074 自动创建
  • traceparent:由父请求接收,如果父请求未指定,则为一个新的随机值

几分钟后,追踪将在 Grafana Cloud 中显示。例如,在 traces explorer 中:

Beyla traces explorer

6. 配置路由

在 Grafana Cloud 中显示的 span 名称是通用的 GET /**,但它应该显示类似 GET /foo 的内容(测试请求 URL 的路径)。

Beyla 将任何未知 URL 路径分组为 /**,以避免意外的基数爆炸(cardinality explosions)。

配置路由,告诉 Beyla 预期的路由。

对于本快速入门,让 Beyla 启发式地分组路由。

首先,创建一个名为 config.yml 的文件,内容如下:

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 grouped traces

后续步骤