OBI - OpenTelemetry eBPF 零代码接入指南
本文档提供 OpenTelemetry eBPF Instrumentation (OBI) 的完整接入指南,这是一个基于 eBPF 技术的零代码自动埋点工具,支持多种编程语言的应用程序监控。
目录
什么是 OBI
OpenTelemetry eBPF Instrumentation (OBI) 是一个革命性的自动埋点工具,它使用 eBPF (extended Berkeley Packet Filter) 技术实现零侵入的应用程序监控。与传统的 APM 解决方案不同,OBI 可以在不修改应用代码、不重启服务、不安装语言 SDK 的情况下,自动捕获分布式追踪数据和性能指标。
eBPF 技术简介
eBPF 是一项革命性的 Linux 内核技术,允许在内核空间运行沙箱化的程序,无需修改内核源码或加载内核模块。OBI 利用 eBPF 的强大能力:
- 内核级监控:在操作系统内核层面拦截和分析应用程序的网络调用、系统调用
- 零开销埋点:eBPF 程序经过 JIT 编译,执行效率接近原生代码
- 安全隔离:eBPF 程序在内核验证器的保护下运行,确保系统安全性
- 动态加载:无需重启应用或修改代码,实时启用和禁用监控
OBI 的工作原理
OBI 通过以下方式实现自动埋点:
- 进程发现:自动扫描系统中运行的进程,识别需要监控的服务
- eBPF 探针注入:将 eBPF 程序注入到内核,拦截网络系统调用(如
read、write、sendto、recvfrom) - 协议解析:在内核空间解析 HTTP、gRPC 等应用层协议
- Span 生成:根据请求/响应自动生成分布式追踪 Span
- 上下文传播:自动提取和注入 Trace Context(W3C TraceContext、B3 等)
- 数据导出:通过 OTLP 协议将 Traces 和 Metrics 发送到后端
┌─────────────────────────────────────────────────────────────┐│ 应用程序(无需修改) ││ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ││ │ Go App │ │Java App │ │Python App│ │ Node.js │ ││ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │└───────┼─────────────┼──────────────┼─────────────┼─────────┘│ │ │ │└─────────────┴──────────────┴─────────────┘│ 网络系统调用┌─────────────▼──────────────────────────┐│ Linux 内核 + eBPF ││ ┌────────────────────────────────┐ ││ │ OBI eBPF 探针 │ ││ │ - HTTP/gRPC 协议解析 │ ││ │ - Trace Context 传播 │ ││ │ - 数据库查询捕获 │ ││ │ - TLS/SSL 流量拦截 │ ││ └────────────────────────────────┘ │└─────────────┬──────────────────────────┘│ OTLP┌─────────────▼──────────────────────────┐│ Uptrace / Collector ││ uptrace-grpc.yodao.cn:4317 │└────────────────────────────────────────┘
核心特性
1. 广泛的语言支持
OBI 支持 9 种主流编程语言,无需安装任何语言特定的 SDK:
| 语言 | 支持版本 | HTTP | gRPC | 数据库 | TLS |
|---|---|---|---|---|---|
| Go | 1.17+ | ✅ | ✅ | ✅ | ✅ |
| Java | JDK 8+ | ✅ | ✅ | ✅ | ✅ |
| .NET | .NET Core 3.1+ | ✅ | ✅ | ✅ | ✅ |
| Python | 3.7+ | ✅ | ✅ | ✅ | ✅ |
| Node.js | 14+ | ✅ | ✅ | ✅ | ✅ |
| Ruby | 2.7+ | ✅ | ✅ | ✅ | ✅ |
| Rust | 1.60+ | ✅ | ✅ | ✅ | ✅ |
| C/C++ | 任意 | ✅ | ✅ | ✅ | ✅ |
2. 零代码接入
- ✅ 无需修改应用代码:不需要添加任何埋点代码
- ✅ 无需安装 SDK:不需要安装语言特定的 OpenTelemetry SDK
- ✅ 无需重启服务:可以在运行时动态启用监控
- ✅ 无需容器重构:可以监控现有容器,无需重新构建镜像
3. 高效的性能
- 低 CPU 开销:eBPF 程序在内核空间运行,经过 JIT 编译,开销 < 1%
- 低内存占用:典型场景下内存占用 < 100MB
- 智能采样:支持多种采样策略,降低数据量和成本
4. 分布式追踪
- 自动 Span 生成:为每个 HTTP/gRPC 请求自动创建 Span
- 上下文传播:自动提取和注入 W3C TraceContext、B3、Jaeger 等传播协议
- 服务拓扑:自动构建服务依赖关系图
- 调用链路:完整的端到端请求链路追踪
5. Kubernetes 原生支持
- DaemonSet 部署:一次部署,监控整个集群
- 自动服务发现:自动发现 Pod 和容器中的服务
- Pod 注解配置:支持通过 Annotation 配置监控策略
- Namespace 隔离:支持按命名空间过滤和监控
6. TLS/SSL 可见性
- 加密流量监控:无需解密即可监控 HTTPS、gRPC over TLS 流量
- 零配置:自动识别 TLS 连接,无需提供证书或密钥
- 协议支持:支持 TLS 1.2、TLS 1.3
7. 网络可观测性
- 点对点网络指标:监控服务之间的网络流量、延迟、错误率
- 跨可用区流量分析:识别和优化跨 AZ 流量,降低云成本
- 网络拓扑:可视化服务之间的网络连接
8. 数据库追踪
- 自动数据库查询捕获:捕获 SQL 查询、Redis 命令等
- 慢查询识别:自动标记超过阈值的数据库操作
- 连接池监控:监控数据库连接数、连接时间
9. 协议支持
- HTTP/HTTPS:HTTP/1.0、HTTP/1.1、HTTP/2
- gRPC:gRPC、gRPC-Web
- Database:MySQL、PostgreSQL、Redis(通过协议解析)
10. 低基数指标
- Prometheus 兼容:导出符合 Prometheus 命名规范的指标
- 基数控制:智能标签聚合,避免基数爆炸
- RED 指标:Rate(请求速率)、Errors(错误率)、Duration(延迟)
与传统方式对比
| 特性 | OBI (eBPF) | 语言 Agent | SDK 手动埋点 |
|---|---|---|---|
| 代码修改 | ❌ 不需要 | ❌ 不需要 | ✅ 需要 |
| 重启服务 | ❌ 不需要 | ✅ 需要 | ✅ 需要 |
| 语言支持 | 9 种语言统一方案 | 需要每种语言单独配置 | 需要每种语言单独实现 |
| 性能开销 | 极低 (<1%) | 低 (1-5%) | 低 (1-5%) |
| 部署复杂度 | 低(一次部署,全局生效) | 中(每个服务配置) | 高(每个服务开发) |
| 监控粒度 | HTTP/gRPC 事务级 | 方法级 | 自定义 |
| 自定义属性 | ❌ 有限 | ✅ 支持 | ✅ 完全支持 |
| 业务指标 | ❌ 不支持 | ⚠️ 部分支持 | ✅ 完全支持 |
| TLS 支持 | ✅ 无需配置 | ✅ 支持 | ✅ 支持 |
| 系统要求 | Linux 内核 5.8+ | 无特殊要求 | 无特殊要求 |
| 适用场景 | 快速启动、遗留系统、编译语言 | 生产环境完整监控 | 精细化监控、自定义业务指标 |
建议:
- 快速启动阶段:使用 OBI 快速实现全链路追踪,无需修改代码
- 生产环境:结合使用 OBI + 语言 Agent,OBI 提供基础监控,Agent 提供精细化监控
- 关键业务:使用 SDK 手动埋点,实现自定义业务指标和深度分析
适用场景
1. 快速启动分布式追踪
场景:您的团队刚开始接入 OpenTelemetry,需要快速看到效果。
解决方案:
- 使用 OBI 在 5 分钟内启动全链路追踪
- 无需学习各语言的 SDK 使用方法
- 无需修改现有代码
示例:
# 一行命令启动监控docker run -d --name obi --privileged --pid host \-e OTEL_EXPORTER_OTLP_ENDPOINT=http://uptrace-grpc.yodao.cn:80 \-e OTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=http://token@uptrace-grpc.yodao.cn/project \grafana/beyla:latest
2. 编译语言的自动埋点
场景:您的应用使用 Go、Rust、C++ 等编译语言,手动埋点需要修改代码、重新编译、重新部署。
解决方案:
- OBI 可以在不修改代码的情况下监控编译语言应用
- 自动捕获 HTTP、gRPC 调用
- 无需重新编译和部署
适用语言:
- Go(goroutine 友好)
- Rust(零成本抽象)
- C/C++(遗留系统)
3. 遗留系统的可观测性改造
场景:您有大量遗留系统,修改代码成本高、风险大。
解决方案:
- OBI 可以监控任何运行在 Linux 上的应用,无论多老
- 无需修改代码,降低改造风险
- 快速定位性能瓶颈
示例:
- 10 年前的 Java 单体应用
- C++ 编写的高性能服务
- Python 2.7 的遗留系统
4. Kubernetes 环境的无配置监控
场景:您有数百个微服务运行在 Kubernetes 集群中,逐个配置监控太麻烦。
解决方案:
- 使用 DaemonSet 部署 OBI,自动监控所有 Pod
- 自动服务发现,无需手动配置
- 支持通过 Pod Annotation 自定义监控策略
示例:
apiVersion: apps/v1kind: DaemonSetmetadata:name: obispec:template:spec:hostPID: truehostNetwork: truecontainers:- name: obiimage: grafana/beyla:latestsecurityContext:privileged: true
5. 混合语言微服务架构
场景:您的系统使用多种编程语言(Go + Java + Python + Node.js),每种语言都需要单独配置 Agent。
解决方案:
- OBI 提供统一的监控方案,一次部署支持所有语言
- 自动关联不同语言服务之间的调用链路
- 简化运维复杂度
6. 临时性能分析
场景:生产环境出现性能问题,需要快速定位,但没有提前部署监控。
解决方案:
- 动态启用 OBI,无需重启服务
- 快速捕获性能数据
- 问题解决后,随时禁用
7. 成本优化
场景:跨可用区(AZ)流量产生高额云成本。
解决方案:
- 使用 OBI 的网络可观测性功能
- 识别跨 AZ 流量模式
- 优化服务部署,降低云成本
系统要求
OBI 对运行环境有一定要求,主要与 Linux 内核版本和 eBPF 支持相关。
最低系统要求
| 组件 | 要求 | 说明 |
|---|---|---|
| Linux 内核 | 5.8+ 或 RHEL 4.18+ | 需要支持 eBPF |
| 处理器架构 | x86_64 或 arm64 | 其他架构未测试 |
| eBPF 运行时 | 内核支持 eBPF | 大多数现代 Linux 发行版默认支持 |
| 权限 | root 或特定 Capabilities | 见安全性章节 |
| 内存 | 最低 100MB | 推荐 256MB+ |
| CPU | 最低 0.1 Core | 推荐 0.5 Core+ |
内核版本说明
标准 Linux 发行版:
- 需要 Linux 内核 5.8 或更高版本
- 支持的内核特性:
- BPF Type Format (BTF)
- BPF CO-RE (Compile Once, Run Everywhere)
- BPF Ring Buffer
Red Hat 系列(RHEL、CentOS、Rocky、AlmaLinux):
- 支持 内核 4.18(backport 了 eBPF 相关补丁)
- RHEL 8、CentOS 8、Rocky Linux 8、AlmaLinux 8 及以上
检查内核版本
# 查看内核版本uname -r# 检查 eBPF 支持ls /sys/kernel/debug/tracing/# 检查 BTF 支持ls /sys/kernel/btf/vmlinux
Go 应用特殊要求
如果您要监控 Go 应用,需要注意:
- Go 版本:1.17 或更高
- 版本支持策略:OBI 支持当前稳定版本向后 3 个主版本
- 例如:当前 Go 最新版本是 1.21,则支持 1.21、1.20、1.19、1.18
- 编译要求:Go 应用需要包含调试信息(默认包含)
兼容性
支持的 Linux 发行版
OBI 已在以下 Linux 发行版上测试通过:
Ubuntu
- Ubuntu 20.04 LTS (Focal Fossa)
- Ubuntu 21.04 (Hirsute Hippo)
- Ubuntu 22.04 LTS (Jammy Jellyfish)
- Ubuntu 23.04 (Lunar Lobster)
- Ubuntu 24.04 LTS (Noble Numbat)
Red Hat Enterprise Linux (RHEL)
- RHEL 8.x
- RHEL 9.x
CentOS
- CentOS 7 (内核需升级到 5.8+)
- CentOS 8
- CentOS 9
AlmaLinux
- AlmaLinux 8
- AlmaLinux 9
Rocky Linux
- Rocky Linux 8
- Rocky Linux 9
Debian
- Debian 11 (Bullseye)
- Debian 12 (Bookworm)
openSUSE
- openSUSE Leap 15.3
- openSUSE Leap 15.4
- openSUSE Leap 15.5
SUSE Linux Enterprise Server (SLES)
- SLES 15 SP4
- SLES 15 SP5
Kubernetes 支持
OBI 支持在 Kubernetes 环境中部署:
- Kubernetes 版本:1.20+
- 容器运行时:
- containerd
- Docker
- CRI-O
- 部署方式:
- DaemonSet(推荐)
- Sidecar(特定场景)
云平台支持
OBI 可以运行在以下云平台:
- AWS:EC2、EKS
- Azure:VM、AKS
- Google Cloud:GCE、GKE
- 阿里云:ECS、ACK
- 私有云:OpenStack、VMware
限制与注意事项
虽然 OBI 提供了强大的零代码监控能力,但也存在一些限制:
功能限制
1. 监控粒度
- ✅ 支持:HTTP/gRPC 事务级监控、数据库查询
- ❌ 不支持:方法级、函数级监控
- ⚠️ 影响:无法监控业务逻辑内部的性能瓶颈
解决方案:对于需要方法级监控的关键服务,结合使用语言 Agent。
2. 自定义属性
- ✅ 支持:HTTP headers、gRPC metadata 中的标准属性
- ❌ 不支持:自定义业务属性(如用户 ID、订单 ID)
- ⚠️ 影响:无法根据业务维度分析性能
解决方案:将业务属性编码在 HTTP headers 中,或使用 SDK 手动埋点补充。
3. 业务指标
- ❌ 不支持:自定义业务指标(如订单金额、支付成功率)
- ⚠️ 影响:只能监控技术指标(延迟、错误率),无法监控业务指标
解决方案:使用 OpenTelemetry SDK 添加自定义 Metrics。
4. 日志关联
- ⚠️ 有限支持:可以捕获 HTTP 请求日志,但无法关联应用日志
- ❌ 不支持:自动将 Trace ID 注入应用日志
解决方案:使用日志库的 OpenTelemetry 集成(如 logrus、zap)。
权限要求
OBI 需要较高的系统权限才能运行:
Docker 运行
- 需要
--privileged标志或以下 Capabilities:CAP_DAC_READ_SEARCHCAP_SYS_PTRACECAP_PERFMONCAP_BPFCAP_CHECKPOINT_RESTORECAP_NET_ADMIN(仅网络监控功能)
Kubernetes 运行
- DaemonSet 需要:
hostPID: truehostNetwork: true(可选,用于网络监控)privileged: true或特定 Capabilities
安全考虑:
- 在生产环境中,建议使用最小权限原则,仅授予必需的 Capabilities
- 详见安全性章节
性能考虑
虽然 OBI 的性能开销很低,但在极端场景下仍需注意:
- 高并发场景(QPS > 10,000):
- 建议启用采样(如 10% 采样率)
- 监控 OBI 自身的 CPU 和内存使用
- 大量服务(100+ 个服务):
- 考虑使用服务过滤,只监控关键服务
- 避免监控短生命周期进程(如 cron 作业)
Go 应用限制
- Go 版本:不支持 Go 1.16 及更早版本
- 版本支持窗口:仅支持当前版本向后 3 个主版本
- 调试信息:需要保留调试信息,不要使用
go build -ldflags="-s -w"
协议支持限制
- HTTP/2 服务端推送:不支持
- WebSocket:有限支持(仅连接建立)
- 自定义协议:不支持
建议
混合使用:OBI + 语言 Agent + SDK 手动埋点
- OBI:快速启动、覆盖所有服务
- Agent:关键服务的精细化监控
- SDK:自定义业务指标
分阶段实施:
- 第一阶段:使用 OBI 快速实现全链路追踪
- 第二阶段:对关键服务添加语言 Agent
- 第三阶段:对核心业务逻辑使用 SDK 手动埋点
评估场景:
- 如果只需要 HTTP/gRPC 事务级监控,OBI 完全够用
- 如果需要业务指标、方法级监控,必须结合其他方案
快速开始
本节将指导您在 5 分钟内启动 OBI 并开始监控您的应用程序。
前提条件
- Linux 系统(内核 5.8+ 或 RHEL 4.18+)
- Docker 或 Kubernetes(根据部署方式)
- 有效的 Uptrace DSN(从 内部平台 获取)
方式 1:Docker 部署(推荐用于快速测试)
这是最快的启动方式,适合单机测试和开发环境。
步骤 1:运行 OBI 容器
docker run -d \--name obi \--privileged \--pid host \--network host \-e OTEL_SERVICE_NAME=my-service \-e OTEL_EXPORTER_OTLP_ENDPOINT=http://uptrace-grpc.yodao.cn:80 \-e OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf \-e OTEL_EXPORTER_OTLP_HEADERS="uptrace-dsn=http://YOUR_TOKEN@uptrace-grpc.yodao.cn/YOUR_PROJECT?grpc=4317" \-e BEYLA_OPEN_PORT=8080,8443,3000 \-v /sys/kernel/debug:/sys/kernel/debug:ro \-v /var/run/docker.sock:/var/run/docker.sock:ro \grafana/beyla:latest
参数说明:
--privileged:授予容器特权,允许访问 eBPF--pid host:使用主机 PID 命名空间,以便监控主机上的进程--network host:使用主机网络(可选,推荐)OTEL_SERVICE_NAME:服务名称(如果不设置,会自动从进程名提取)OTEL_EXPORTER_OTLP_ENDPOINT:Uptrace 平台地址OTEL_EXPORTER_OTLP_HEADERS:包含 DSN 的认证信息BEYLA_OPEN_PORT:要监控的端口列表(逗号分隔)-v /sys/kernel/debug:挂载内核调试文件系统-v /var/run/docker.sock:允许监控其他 Docker 容器
步骤 2:验证 OBI 运行状态
# 查看 OBI 日志docker logs -f obi# 应该看到类似输出:# time=2024-01-01T00:00:00.000Z level=INFO msg="Starting OBI"# time=2024-01-01T00:00:01.000Z level=INFO msg="Discovered service" service=my-app port=8080 pid=12345# time=2024-01-01T00:00:02.000Z level=INFO msg="eBPF programs loaded successfully"
步骤 3:生成测试流量
# 向您的应用发送请求curl http://localhost:8080/api/health# 或使用 ab 进行压测ab -n 1000 -c 10 http://localhost:8080/api/health
步骤 4:在 Uptrace 查看数据
- 访问 Uptrace 内部平台
- 选择您的项目
- 进入 "Traces" 页面
- 应该能看到刚才生成的请求追踪数据
方式 2:Docker Compose 部署
适合多容器应用的本地开发和测试。
创建 docker-compose.yml
version: '3.8'services:# 您的应用服务my-app:image: my-app:latestports:- "8080:8080"environment:- APP_ENV=production# OBI 监控服务obi:image: grafana/beyla:latestpid: "host"network_mode: "host"privileged: trueenvironment:# 基础配置OTEL_SERVICE_NAME: my-appOTEL_EXPORTER_OTLP_ENDPOINT: http://uptrace-grpc.yodao.cn:80OTEL_EXPORTER_OTLP_PROTOCOL: http/protobufOTEL_EXPORTER_OTLP_HEADERS: "uptrace-dsn=http://YOUR_TOKEN@uptrace-grpc.yodao.cn/YOUR_PROJECT?grpc=4317"# 服务发现配置BEYLA_OPEN_PORT: "8080" # 监控 8080 端口的服务# 采样配置(可选)BEYLA_TRACE_SAMPLE_RATE: "1.0" # 100% 采样# 日志级别BEYLA_LOG_LEVEL: "INFO"volumes:- /sys/kernel/debug:/sys/kernel/debug:ro- /var/run/docker.sock:/var/run/docker.sock:ro
启动服务
docker-compose up -d# 查看日志docker-compose logs -f obi
方式 3:Kubernetes 部署(推荐用于生产环境)
在 Kubernetes 中使用 DaemonSet 部署 OBI,可以自动监控整个集群中的所有服务。
步骤 1:创建 Secret(存储 DSN)
kubectl create secret generic obi-credentials \--from-literal=dsn="http://YOUR_TOKEN@uptrace-grpc.yodao.cn/YOUR_PROJECT?grpc=4317" \-n monitoring
步骤 2:创建 ConfigMap(配置 OBI)
# obi-configmap.yamlapiVersion: v1kind: ConfigMapmetadata:name: obi-confignamespace: monitoringdata:beyla.yaml: |# OTLP Exporter 配置otel_exporter:endpoint: http://uptrace-grpc.yodao.cn:80protocol: http/protobufinsecure: true# 服务发现配置discovery:# 自动发现所有监听端口的服务services:- open_ports: 80,443,8080,8443,3000,4000,5000,8000,9000# 采样配置traces:sample_rate: 0.1 # 10% 采样率# 日志级别log_level: INFO
kubectl apply -f obi-configmap.yaml
步骤 3:创建 DaemonSet
# obi-daemonset.yamlapiVersion: apps/v1kind: DaemonSetmetadata:name: obinamespace: monitoringlabels:app: obispec:selector:matchLabels:app: obitemplate:metadata:labels:app: obispec:hostPID: truehostNetwork: trueserviceAccountName: obicontainers:- name: obiimage: grafana/beyla:latestsecurityContext:privileged: truerunAsUser: 0env:# 从 Secret 读取 DSN- name: OTEL_EXPORTER_OTLP_HEADERSvalueFrom:secretKeyRef:name: obi-credentialskey: dsn# 从 ConfigMap 读取配置文件路径- name: BEYLA_CONFIG_PATHvalue: /etc/beyla/beyla.yamlresources:limits:cpu: 500mmemory: 512Mirequests:cpu: 100mmemory: 256MivolumeMounts:- name: configmountPath: /etc/beylareadOnly: true- name: sys-kernel-debugmountPath: /sys/kernel/debugreadOnly: true- name: cgroupmountPath: /sys/fs/cgroupreadOnly: truevolumes:- name: configconfigMap:name: obi-config- name: sys-kernel-debughostPath:path: /sys/kernel/debug- name: cgrouphostPath:path: /sys/fs/cgroup
步骤 4:创建 ServiceAccount 和 RBAC(可选,用于高级功能)
# obi-rbac.yamlapiVersion: v1kind: ServiceAccountmetadata:name: obinamespace: monitoring---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata:name: obirules:- apiGroups: [""]resources: ["pods", "nodes"]verbs: ["get", "list", "watch"]---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata:name: obiroleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: obisubjects:- kind: ServiceAccountname: obinamespace: monitoring
步骤 5:部署
# 创建 namespacekubectl create namespace monitoring# 部署 RBACkubectl apply -f obi-rbac.yaml# 部署 DaemonSetkubectl apply -f obi-daemonset.yaml# 查看部署状态kubectl get ds -n monitoringkubectl get pods -n monitoring -l app=obi# 查看日志kubectl logs -n monitoring -l app=obi --tail=100 -f
方式 4:Kubernetes Helm 部署(最简单)
使用 Helm Chart 可以一键部署 OBI。
步骤 1:添加 Helm Repository
# 添加 Grafana Helm Repo(Beyla/OBI)helm repo add grafana https://grafana.github.io/helm-chartshelm repo update
步骤 2:创建 values.yaml
# obi-values.yaml# DSN 配置env:OTEL_EXPORTER_OTLP_ENDPOINT: "http://uptrace-grpc.yodao.cn:80"OTEL_EXPORTER_OTLP_PROTOCOL: "http/protobuf"OTEL_EXPORTER_OTLP_HEADERS: "uptrace-dsn=http://YOUR_TOKEN@uptrace-grpc.yodao.cn/YOUR_PROJECT?grpc=4317"BEYLA_LOG_LEVEL: "INFO"BEYLA_OPEN_PORT: "80,443,8080,8443,3000,4000,5000"BEYLA_TRACE_SAMPLE_RATE: "0.1"# 资源限制resources:limits:cpu: 500mmemory: 512Mirequests:cpu: 100mmemory: 256Mi# 安全上下文securityContext:privileged: truerunAsUser: 0# 使用主机 PID 和网络hostPID: truehostNetwork: true
步骤 3:安装
helm install obi grafana/beyla \--namespace monitoring \--create-namespace \--values obi-values.yaml
步骤 4:验证
# 查看部署状态helm status obi -n monitoring# 查看 Podskubectl get pods -n monitoring -l app.kubernetes.io/name=beyla# 查看日志kubectl logs -n monitoring -l app.kubernetes.io/name=beyla --tail=100 -f
方式 5:Standalone 部署(二进制)
适合在虚拟机或物理机上直接运行,无需容器。
步骤 1:下载 OBI 二进制文件
# 下载最新版本(Linux x86_64)curl -L -o beyla.tar.gz \https://github.com/grafana/beyla/releases/latest/download/beyla-linux-amd64.tar.gz# 解压tar -xzf beyla.tar.gz# 移动到系统路径sudo mv beyla /usr/local/bin/sudo chmod +x /usr/local/bin/beyla# 验证安装beyla --version
步骤 2:创建配置文件
sudo mkdir -p /etc/beylasudo vi /etc/beyla/config.yaml
# /etc/beyla/config.yaml# OTLP Exporter 配置otel_exporter:endpoint: http://uptrace-grpc.yodao.cn:80protocol: http/protobufinsecure: trueheaders:uptrace-dsn: "http://YOUR_TOKEN@uptrace-grpc.yodao.cn/YOUR_PROJECT?grpc=4317"# 服务发现discovery:services:- open_ports: 8080,8443,3000- exe_path: "/usr/local/bin/myapp" # 或指定可执行文件路径# 采样配置traces:sample_rate: 0.1# 日志配置log_level: INFO
步骤 3:创建 systemd 服务
sudo vi /etc/systemd/system/beyla.service
[Unit]Description=OpenTelemetry eBPF Instrumentation (OBI/Beyla)After=network.target[Service]Type=simpleUser=rootExecStart=/usr/local/bin/beyla --config /etc/beyla/config.yamlRestart=alwaysRestartSec=10StandardOutput=journalStandardError=journal# 所需的 CapabilitiesAmbientCapabilities=CAP_DAC_READ_SEARCH CAP_SYS_PTRACE CAP_PERFMON CAP_BPF CAP_CHECKPOINT_RESTORENoNewPrivileges=true[Install]WantedBy=multi-user.target
步骤 4:启动服务
# 重新加载 systemdsudo systemctl daemon-reload# 启动 OBIsudo systemctl start beyla# 设置开机自启sudo systemctl enable beyla# 查看状态sudo systemctl status beyla# 查看日志sudo journalctl -u beyla -f
验证监控数据
无论使用哪种部署方式,部署完成后都应该:
1. 检查 OBI 日志
确认 OBI 已成功发现服务并加载 eBPF 程序:
level=INFO msg="Discovered service" service=my-app port=8080 pid=12345level=INFO msg="eBPF programs loaded successfully"level=INFO msg="Started exporting traces" endpoint=http://uptrace-grpc.yodao.cn:80
2. 生成测试流量
# 向您的应用发送请求for i in {1..100}; docurl http://localhost:8080/api/endpointsleep 0.1done
3. 在 Uptrace 平台查看数据
- 访问 Uptrace 内部平台
- 选择您的项目
- 进入 "Traces" 页面
- 筛选服务名称,查看 Trace 数据
- 进入 "Metrics" 页面,查看 HTTP 请求指标
4. 验证 Trace Context 传播
# 使用 curl 发送请求,包含 Trace IDcurl -H "traceparent: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01" \http://localhost:8080/api/endpoint# 在 Uptrace 中搜索 Trace ID: 0af7651916cd43dd8448eb211c80319c# 应该能看到完整的调用链路
详细配置
OBI 提供了丰富的配置选项,可以通过环境变量或 YAML 配置文件进行配置。
配置方式
方式 1:环境变量(推荐用于 Docker/Kubernetes)
docker run -d \-e OTEL_SERVICE_NAME=my-service \-e OTEL_EXPORTER_OTLP_ENDPOINT=http://uptrace-grpc.yodao.cn:80 \...grafana/beyla:latest
方式 2:YAML 配置文件(推荐用于 Standalone)
beyla --config /etc/beyla/config.yaml
或通过环境变量指定配置文件:
export BEYLA_CONFIG_PATH=/etc/beyla/config.yamlbeyla
导出配置
配置如何将 Traces 和 Metrics 导出到 Uptrace 平台。
环境变量方式
# OTLP 端点地址(HTTP 协议)export OTEL_EXPORTER_OTLP_ENDPOINT=http://uptrace-grpc.yodao.cn:80# 协议类型export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf # 或 grpc# 认证信息(DSN)export OTEL_EXPORTER_OTLP_HEADERS="uptrace-dsn=http://YOUR_TOKEN@uptrace-grpc.yodao.cn/YOUR_PROJECT?grpc=4317"# 超时时间(秒)export OTEL_EXPORTER_OTLP_TIMEOUT=10# 压缩(可选)export OTEL_EXPORTER_OTLP_COMPRESSION=gzip
YAML 配置方式
otel_exporter:# 端点地址endpoint: http://uptrace-grpc.yodao.cn:80# 协议类型:http/protobuf 或 grpcprotocol: http/protobuf# 是否允许不安全连接(HTTP)insecure: true# HTTP 请求头(包含 DSN)headers:uptrace-dsn: "http://YOUR_TOKEN@uptrace-grpc.yodao.cn/YOUR_PROJECT?grpc=4317"# 超时时间timeout: 10s# 批量导出配置batch:max_export_batch_size: 512schedule_delay: 5smax_queue_size: 2048
gRPC 协议配置
如果您想使用 gRPC 协议(性能更好):
otel_exporter:endpoint: uptrace-grpc.yodao.cn:4317protocol: grpcinsecure: false # gRPC 默认使用 TLSheaders:uptrace-dsn: "http://YOUR_TOKEN@uptrace-grpc.yodao.cn/YOUR_PROJECT?grpc=4317"
全局属性配置
配置服务的基础属性和资源标签。
环境变量方式
# 服务名称(必需)export OTEL_SERVICE_NAME=my-service# 服务版本export OTEL_SERVICE_VERSION=1.0.0# 资源属性(键值对,逗号分隔)export OTEL_RESOURCE_ATTRIBUTES="deployment.environment=production,service.namespace=backend,service.instance.id=instance-001"# Beyla 特有的命名空间export BEYLA_SERVICE_NAMESPACE=backend
YAML 配置方式
# 服务属性attributes:# 服务名称(如果不设置,会从进程名自动提取)service.name: my-serviceservice.version: 1.0.0service.namespace: backendservice.instance.id: instance-001# 部署环境deployment.environment: production# 自定义标签team: platformowner: john.doe@company.com
服务发现配置
配置 OBI 如何发现和选择要监控的服务。
按端口发现
环境变量:
# 监控指定端口的服务(逗号分隔)export BEYLA_OPEN_PORT=8080,8443,3000,4000,5000# 监控端口范围export BEYLA_OPEN_PORT=8000-9000
YAML 配置:
discovery:services:# 监控指定端口- open_ports: 8080,8443,3000# 监控端口范围- open_ports: 8000-9000
按进程名发现
环境变量:
# 监控指定进程名的服务(正则表达式)export BEYLA_EXECUTABLE_NAME="^(my-app|api-server)$"
YAML 配置:
discovery:services:# 监控特定可执行文件路径- exe_path: /usr/local/bin/my-app# 监控进程名(正则表达式)- exe_name_regex: "^(my-app|api-server)$"
按容器/Pod 发现(Kubernetes)
YAML 配置:
discovery:services:# 监控特定命名空间的 Pod- k8s_namespace: default# 监控带有特定标签的 Pod- k8s_pod_labels:app: my-apptier: backend# 监控特定 Pod 名称- k8s_pod_name: my-app-pod-12345
混合条件
YAML 配置:
discovery:services:# 监控 default 命名空间下监听 8080 端口的服务- k8s_namespace: defaultopen_ports: 8080# 监控特定可执行文件且监听 443 端口- exe_path: /usr/bin/nginxopen_ports: 443
排除规则
YAML 配置:
discovery:# 要监控的服务services:- open_ports: 8000-9000# 排除特定进程exclude:# 排除 Kubernetes 系统组件- k8s_namespace: kube-system# 排除短生命周期进程- exe_name_regex: "^(cron|systemd)$"
数据过滤配置
配置哪些 HTTP 请求需要被记录、采样。
HTTP 路径过滤
环境变量:
# 排除健康检查端点export BEYLA_HTTP_PATH_EXCLUSIONS="/health,/metrics,/ping"
YAML 配置:
routes:# 忽略的路径(不记录 Trace)ignore:- path: /health- path: /metrics- path: /ping- path: /favicon.ico# 模式匹配(支持通配符)ignore_patterns:- /api/internal/*- /debug/*- /_next/static/*
HTTP 方法过滤
routes:ignore:# 忽略 OPTIONS 请求(CORS 预检)- method: OPTIONS
状态码过滤
routes:# 只记录错误请求(4xx, 5xx)ignore_success: true# 或自定义状态码过滤ignore:- status_code: 200- status_code: 204- status_code: 304
User-Agent 过滤
routes:ignore:# 忽略监控探针- user_agent: "^(Prometheus|kube-probe)/"
采样配置
配置 Trace 采样策略,降低数据量和成本。
全局采样率
环境变量:
# 设置采样率(0.0 - 1.0)export BEYLA_TRACE_SAMPLE_RATE=0.1 # 10% 采样
YAML 配置:
traces:# 全局采样率(0.0 - 1.0)sample_rate: 0.1 # 10% 采样
基于路径的采样
traces:# 默认采样率sample_rate: 0.1# 路径特定采样率sampling_rules:# 关键业务接口 100% 采样- path: /api/payment/*sample_rate: 1.0# 查询接口低采样- path: /api/query/*sample_rate: 0.01# 健康检查不采样- path: /healthsample_rate: 0.0
基于状态码的采样
traces:sample_rate: 0.1sampling_rules:# 错误请求 100% 采样- status_code_range: [400, 599]sample_rate: 1.0# 成功请求低采样- status_code_range: [200, 299]sample_rate: 0.05
基于延迟的采样
traces:sample_rate: 0.1sampling_rules:# 慢请求 100% 采样- duration_ms: ">500"sample_rate: 1.0
指标属性配置
配置导出的 Metrics 包含哪些标签。
YAML 配置:
metrics:# 启用 Metrics 导出enable: true# Metrics 导出间隔interval: 60s# 包含的标签features:- http.method- http.status_code- http.route- service.name- service.namespace# 排除高基数标签exclude:- http.url # 完整 URL 基数太高- http.target # 完整路径基数太高# 路径聚合(降低基数)route_patterns:- pattern: "/api/users/:id"name: "/api/users/{id}"- pattern: "/api/orders/:order_id/items/:item_id"name: "/api/orders/{order_id}/items/{item_id}"
性能调优配置
配置 OBI 自身的性能参数。
YAML 配置:
# eBPF 配置ebpf:# eBPF Map 大小(影响可同时追踪的请求数)track_request_headers: true# 环形缓冲区大小(字节)ring_buffer_size: 65536# 批量处理大小batch_size: 128# 导出器配置otel_exporter:# 批量导出配置batch:# 单批最大 Span 数max_export_batch_size: 512# 批量延迟时间schedule_delay: 5s# 队列大小max_queue_size: 2048# 导出超时export_timeout: 30s# 日志配置log_level: INFO # DEBUG, INFO, WARN, ERROR
完整配置示例
综合所有配置项的完整示例:
# /etc/beyla/config.yaml# 服务属性attributes:service.name: my-production-serviceservice.version: 2.1.0service.namespace: backenddeployment.environment: productionteam: platform# OTLP Exporterotel_exporter:endpoint: http://uptrace-grpc.yodao.cn:80protocol: http/protobufinsecure: trueheaders:uptrace-dsn: "http://YOUR_TOKEN@uptrace-grpc.yodao.cn/YOUR_PROJECT?grpc=4317"timeout: 10sbatch:max_export_batch_size: 512schedule_delay: 5smax_queue_size: 2048# 服务发现discovery:services:# 监控 backend 命名空间下的服务- k8s_namespace: backendopen_ports: 8080,8443# 监控特定应用- exe_path: /usr/local/bin/api-serverexclude:# 排除系统组件- k8s_namespace: kube-system- k8s_namespace: kube-public# 路由过滤routes:ignore:- path: /health- path: /metrics- path: /ping- method: OPTIONSignore_patterns:- /_next/static/*- /static/*# Traces 配置traces:sample_rate: 0.1sampling_rules:# 关键接口 100% 采样- path: /api/payment/*sample_rate: 1.0# 错误请求 100% 采样- status_code_range: [400, 599]sample_rate: 1.0# 慢请求 100% 采样- duration_ms: ">1000"sample_rate: 1.0# Metrics 配置metrics:enable: trueinterval: 60sfeatures:- http.method- http.status_code- http.routeroute_patterns:- pattern: "/api/users/:id"name: "/api/users/{id}"# 性能调优ebpf:ring_buffer_size: 65536batch_size: 128# 日志级别log_level: INFO
网络可观测性
OBI 不仅可以监控应用层的 HTTP/gRPC 流量,还可以监控网络层的流量,提供完整的网络可观测性。
网络监控功能
OBI 的网络可观测性功能包括:
- 点对点网络流量:监控服务之间的网络流量(字节数、包数)
- 网络延迟:TCP 连接建立时间、首字节时间
- 连接数统计:活跃连接数、新建连接速率
- 网络错误:连接失败、超时、重传
- 跨可用区流量识别:自动识别跨 AZ 流量,优化云成本
启用网络监控
环境变量方式
# 启用网络监控功能export BEYLA_NETWORK_ENABLE=true# 网络监控采样率export BEYLA_NETWORK_SAMPLE_RATE=100 # 每秒采样 100 个连接
YAML 配置方式
network:# 启用网络监控enable: true# 采样配置sampling:# 每秒采样的连接数rate: 100# 监控的网络接口(默认所有)interfaces:- eth0- eth1# 监控的协议protocols:- TCP- UDP# 监控的方向direction:- ingress # 入站- egress # 出站
网络指标
OBI 导出以下网络指标:
1. 网络流量指标
# HELP network_traffic_bytes_total Total network traffic in bytes# TYPE network_traffic_bytes_total counternetwork_traffic_bytes_total{source_service="service-a",destination_service="service-b",protocol="TCP",direction="egress"} 1048576# HELP network_traffic_packets_total Total network packets# TYPE network_traffic_packets_total counternetwork_traffic_packets_total{source_service="service-a",destination_service="service-b",protocol="TCP"} 1024
2. 连接数指标
# HELP network_connections_active Active network connections# TYPE network_connections_active gaugenetwork_connections_active{source_service="service-a",destination_service="service-b"} 42# HELP network_connections_rate New connections per second# TYPE network_connections_rate gaugenetwork_connections_rate{source_service="service-a",destination_service="service-b"} 10.5
3. 网络延迟指标
# HELP network_connection_time_seconds TCP connection establishment time# TYPE network_connection_time_seconds histogramnetwork_connection_time_seconds_bucket{source_service="service-a",destination_service="service-b",le="0.001"} 50# HELP network_ttfb_seconds Time to first byte# TYPE network_ttfb_seconds histogramnetwork_ttfb_seconds_bucket{source_service="service-a",destination_service="service-b",le="0.01"} 100
4. 网络错误指标
# HELP network_errors_total Network errors# TYPE network_errors_total counternetwork_errors_total{source_service="service-a",destination_service="service-b",error_type="connection_refused"} 5network_errors_total{source_service="service-a",destination_service="service-b",error_type="timeout"} 2
跨可用区流量测量
云环境中,跨可用区(AZ)流量通常会产生额外费用。OBI 可以自动识别和测量跨 AZ 流量,帮助优化成本。
启用跨 AZ 流量监控
前提条件:
- Kubernetes 环境
- Node 需要有可用区标签:
topology.kubernetes.io/zone
配置:
network:enable: true# 启用可用区检测cloud:enable: true# 云提供商类型provider: aws # 或 azure, gcp, aliyun# 可用区标签键zone_label: topology.kubernetes.io/zone
查看跨 AZ 流量指标
# HELP network_cross_az_traffic_bytes Cross-AZ traffic in bytes# TYPE network_cross_az_traffic_bytes counternetwork_cross_az_traffic_bytes{source_service="service-a",source_az="us-east-1a",destination_service="service-b",destination_az="us-east-1b"} 10485760# HELP network_cross_az_traffic_cost Estimated cross-AZ traffic cost (USD)# TYPE network_cross_az_traffic_cost counternetwork_cross_az_traffic_cost{source_az="us-east-1a",destination_az="us-east-1b"} 1.05
优化建议
根据跨 AZ 流量数据,您可以:
- 识别热点:找出跨 AZ 流量最多的服务对
- 优化部署:将频繁通信的服务部署在同一 AZ
- 添加缓存:对跨 AZ 调用添加缓存层
- 评估成本:计算跨 AZ 流量的实际成本
网络拓扑可视化
OBI 导出的网络指标可以用于构建服务网络拓扑图:
服务 A (us-east-1a)│├─→ 服务 B (us-east-1a) [1.2 GB/day, 5ms]│├─→ 服务 C (us-east-1b) [500 MB/day, 15ms] ⚠️ 跨 AZ│└─→ 数据库 (us-east-1a) [300 MB/day, 2ms]
网络监控配置示例
Kubernetes DaemonSet 配置
apiVersion: apps/v1kind: DaemonSetmetadata:name: obi-networknamespace: monitoringspec:selector:matchLabels:app: obi-networktemplate:metadata:labels:app: obi-networkspec:hostPID: truehostNetwork: trueserviceAccountName: obicontainers:- name: obiimage: grafana/beyla:latestsecurityContext:privileged: truecapabilities:add:- CAP_NET_ADMIN # 网络监控需要此权限- CAP_BPF- CAP_PERFMONenv:- name: BEYLA_NETWORK_ENABLEvalue: "true"- name: BEYLA_NETWORK_SAMPLE_RATEvalue: "100"- name: OTEL_EXPORTER_OTLP_ENDPOINTvalue: "http://uptrace-grpc.yodao.cn:80"- name: OTEL_EXPORTER_OTLP_HEADERSvalueFrom:secretKeyRef:name: obi-credentialskey: dsn
分布式追踪
OBI 自动为 HTTP 和 gRPC 请求生成分布式追踪 Span,并支持跨服务的上下文传播。
Span 信息
OBI 生成的 Span 包含以下信息:
HTTP Span 属性
| 属性 | 示例值 | 说明 |
|---|---|---|
span.kind | SERVER 或 CLIENT | Span 类型 |
http.method | GET | HTTP 方法 |
http.url | /api/users/123 | 请求路径 |
http.target | /api/users/123?page=1 | 完整目标(包含查询参数) |
http.status_code | 200 | HTTP 状态码 |
http.request.header.* | application/json | 请求头(可配置) |
http.response.header.* | text/html | 响应头(可配置) |
http.request_content_length | 1024 | 请求体大小 |
http.response_content_length | 2048 | 响应体大小 |
net.peer.ip | 10.0.1.5 | 对端 IP |
net.peer.port | 8080 | 对端端口 |
gRPC Span 属性
| 属性 | 示例值 | 说明 |
|---|---|---|
rpc.system | grpc | RPC 系统 |
rpc.service | UserService | gRPC 服务名 |
rpc.method | GetUser | gRPC 方法名 |
rpc.grpc.status_code | 0 | gRPC 状态码 |
数据库 Span 属性
对于数据库调用,OBI 会创建额外的子 Span:
| 属性 | 示例值 | 说明 |
|---|---|---|
db.system | mysql | 数据库类型 |
db.operation | SELECT | 数据库操作 |
db.statement | SELECT * FROM users WHERE id = ? | SQL 语句(脱敏) |
net.peer.name | mysql-primary.svc.cluster.local | 数据库主机 |
net.peer.port | 3306 | 数据库端口 |
上下文传播
OBI 自动支持多种 Trace Context 传播协议:
支持的传播协议
W3C Trace Context(推荐)
- Header:
traceparent,tracestate - 格式:
00-{trace-id}-{span-id}-{flags} - 示例:
traceparent: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01
- Header:
B3 Propagation
- Single Header:
b3: {trace-id}-{span-id}-{flags} - Multi Header:
X-B3-TraceId,X-B3-SpanId,X-B3-Sampled
- Single Header:
Jaeger Propagation
- Header:
uber-trace-id - 格式:
{trace-id}:{span-id}:{parent-span-id}:{flags}
- Header:
上下文传播示例
服务 A (Go) → 服务 B (Java) → 服务 C (Python)
服务 A 发起请求:
GET /api/users HTTP/1.1Host: service-b:8080traceparent: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01OBI 自动提取 Service B 收到请求时的 Trace Context
Service B 调用 Service C 时,OBI 自动注入 Trace Context:
GET /api/details HTTP/1.1Host: service-c:8080traceparent: 00-0af7651916cd43dd8448eb211c80319c-c9ef2b3a4d5e6f7a-01在 Uptrace 中可以看到完整的调用链:
Trace ID: 0af7651916cd43dd8448eb211c80319cService A: GET /api/users [150ms]└─> Service B: GET /api/users [120ms]└─> Service C: GET /api/details [80ms]
与语言 Agent 协同工作
OBI 可以与传统的语言 Agent 协同工作,实现更精细的监控:
场景 1:OBI + Go Auto-Instrumentation
┌─────────────────────────────────────┐│ Go 应用(使用 OBI 监控) ││ ││ HTTP Server [由 OBI 捕获] ││ └─> Business Logic ││ └─> Database [由 OBI 捕获] │└─────────────────────────────────────┘
- OBI 负责:HTTP 请求/响应、数据库查询
- 无需任何代码修改
场景 2:OBI + Java Agent
┌─────────────────────────────────────┐│ Java 应用 ││ ││ HTTP Server [由 OBI 捕获] ││ └─> Controller [由 Agent 监控] ││ └─> Service [由 Agent 监控]││ └─> DAO [由 Agent 监控]││ └─> DB [由 OBI 捕获]│└─────────────────────────────────────┘
- OBI 负责:HTTP 事务级监控、数据库查询
- Java Agent 负责:方法级监控、业务逻辑监控
混合监控配置
步骤 1:启用 OBI(全局监控)
kubectl apply -f obi-daemonset.yaml
步骤 2:为关键服务添加 Java Agent
FROM openjdk:11-jreCOPY opentelemetry-javaagent.jar /app/COPY myapp.jar /app/ENTRYPOINT ["java", "-javaagent:/app/opentelemetry-javaagent.jar", "-jar", "/app/myapp.jar"]
步骤 3:配置 Java Agent 与 OBI 协同
# Java Agent 配置export OTEL_SERVICE_NAME=my-java-serviceexport OTEL_EXPORTER_OTLP_ENDPOINT=http://uptrace-grpc.yodao.cn:80export OTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=http://token@uptrace-grpc.yodao.cn/project# 启用 Trace Context 传播export OTEL_PROPAGATORS=tracecontext,baggage
结果:
- OBI 捕获 HTTP 入口和出口流量
- Java Agent 监控应用内部的方法调用
- 两者共享相同的 Trace Context,形成完整的调用链
安全性
OBI 需要较高的系统权限才能运行 eBPF 程序。本节介绍所需权限和如何以最小权限原则运行 OBI。
所需权限
OBI 需要以下 Linux Capabilities:
| Capability | 用途 | 必需 |
|---|---|---|
CAP_DAC_READ_SEARCH | 读取进程文件系统(/proc) | ✅ 是 |
CAP_SYS_PTRACE | 追踪进程 | ✅ 是 |
CAP_PERFMON | 性能监控(Linux 5.8+) | ✅ 是 |
CAP_BPF | 加载 eBPF 程序(Linux 5.8+) | ✅ 是 |
CAP_CHECKPOINT_RESTORE | 读取进程内存 | ✅ 是 |
CAP_NET_ADMIN | 网络监控(TC filters) | ⚠️ 仅网络监控需要 |
CAP_SYS_ADMIN | 系统管理(旧内核) | ⚠️ Linux < 5.8 需要 |
最小权限配置
Docker 最小权限
避免使用 --privileged,使用精确的 Capabilities:
docker run -d \--name obi \--pid host \--cap-add=CAP_DAC_READ_SEARCH \--cap-add=CAP_SYS_PTRACE \--cap-add=CAP_PERFMON \--cap-add=CAP_BPF \--cap-add=CAP_CHECKPOINT_RESTORE \-e OTEL_EXPORTER_OTLP_ENDPOINT=http://uptrace-grpc.yodao.cn:80 \-e OTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=http://token@uptrace-grpc.yodao.cn/project \-v /sys/kernel/debug:/sys/kernel/debug:ro \grafana/beyla:latest
如果需要网络监控:
docker run -d \--name obi \--pid host \--network host \--cap-add=CAP_DAC_READ_SEARCH \--cap-add=CAP_SYS_PTRACE \--cap-add=CAP_PERFMON \--cap-add=CAP_BPF \--cap-add=CAP_CHECKPOINT_RESTORE \--cap-add=CAP_NET_ADMIN \-e BEYLA_NETWORK_ENABLE=true \-e OTEL_EXPORTER_OTLP_ENDPOINT=http://uptrace-grpc.yodao.cn:80 \-e OTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=http://token@uptrace-grpc.yodao.cn/project \-v /sys/kernel/debug:/sys/kernel/debug:ro \grafana/beyla:latest
Kubernetes 最小权限
不使用 privileged: true:
apiVersion: apps/v1kind: DaemonSetmetadata:name: obinamespace: monitoringspec:selector:matchLabels:app: obitemplate:metadata:labels:app: obispec:hostPID: trueserviceAccountName: obicontainers:- name: obiimage: grafana/beyla:latestsecurityContext:runAsUser: 0capabilities:add:- CAP_DAC_READ_SEARCH- CAP_SYS_PTRACE- CAP_PERFMON- CAP_BPF- CAP_CHECKPOINT_RESTORE# 仅在需要网络监控时添加# - CAP_NET_ADMINenv:- name: OTEL_EXPORTER_OTLP_ENDPOINTvalue: "http://uptrace-grpc.yodao.cn:80"- name: OTEL_EXPORTER_OTLP_HEADERSvalueFrom:secretKeyRef:name: obi-credentialskey: dsnvolumeMounts:- name: sys-kernel-debugmountPath: /sys/kernel/debugreadOnly: truevolumes:- name: sys-kernel-debughostPath:path: /sys/kernel/debug
systemd 最小权限
[Service]Type=simpleUser=rootExecStart=/usr/local/bin/beyla --config /etc/beyla/config.yamlRestart=always# 授予必需的 CapabilitiesAmbientCapabilities=CAP_DAC_READ_SEARCH CAP_SYS_PTRACE CAP_PERFMON CAP_BPF CAP_CHECKPOINT_RESTORE# 禁止提权NoNewPrivileges=true# 限制系统调用(可选,提高安全性)SystemCallFilter=@system-serviceSystemCallFilter=~@privileged @resources# 限制文件访问ProtectSystem=strictProtectHome=trueReadWritePaths=/var/log/beyla
内核版本与权限的关系
| 内核版本 | 所需 Capabilities | 说明 |
|---|---|---|
| 5.8+ | CAP_BPF, CAP_PERFMON, CAP_CHECKPOINT_RESTORE, ... | 现代内核,精细化权限控制 |
| 4.18 - 5.7 | CAP_SYS_ADMIN, CAP_SYS_PTRACE, ... | 需要 CAP_SYS_ADMIN(权限较大) |
| < 4.18 | ❌ 不支持 | eBPF 功能不完整 |
建议:使用 Linux 5.8+ 内核,以便使用最小权限原则。
TLS/SSL 支持
OBI 可以监控加密的 HTTPS 和 gRPC over TLS 流量,无需提供证书或密钥。
工作原理
OBI 使用 eBPF uprobes 拦截 SSL/TLS 库的函数调用(如 OpenSSL 的 SSL_read、SSL_write),在加密前/解密后读取明文数据。
支持的 TLS 库:
- OpenSSL 1.1.0+, 3.0+
- BoringSSL
- GnuTLS
- Go crypto/tls(内置)
- Java JSSE
配置 TLS 监控
默认启用,无需额外配置:
# TLS 监控默认启用# 如需禁用,可以设置:tls:enable: false
TLS Span 示例
Span: HTTPS GET /api/users- http.scheme: https- http.url: /api/users- t控运行在同一宿主机上的 Docker 容器**步骤 1:启动您的应用**```bash# 示例:启动一个简单的 HTTP 服务docker run -d \--name my-app \-p 8080:8080 \my-app-image:latest
步骤 2:启动 OBI
docker run -d \--name obi \--privileged \--pid host \--network host \-e OTEL_SERVICE_NAME=my-app \-e OTEL_EXPORTER_OTLP_ENDPOINT=http://uptrace-grpc.yodao.cn:80 \-e OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf \-e OTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=http://token@uptrace-grpc.yodao.cn/project \-v /sys/kernel/debug:/sys/kernel/debug:ro \-v /proc:/proc:ro \-v /sys:/sys:ro \grafana/beyla:latest
重要参数说明:
--privileged:授予容器特权模式(简单,但权限较大)--pid host:使用宿主机的 PID 命名空间,允许 OBI 看到所有进程--network host:使用宿主机网络(推荐,避免网络隔离问题)-e OTEL_SERVICE_NAME:设置服务名称(会自动发现并使用)-v /sys/kernel/debug:挂载 eBPF 调试信息
步骤 3:验证
# 发送测试请求curl http://localhost:8080/# 查看 OBI 日志docker logs obi# 在 Uptrace 平台查看数据# 访问 https://uptrace.inner.youdao.com/
Docker Compose
创建 docker-compose.yml:
version: '3.8'services:# 您的应用my-app:image: my-app-image:latestports:- "8080:8080"environment:- APP_ENV=production# OBI 监控obi:image: grafana/beyla:latestprivileged: truepid: hostnetwork_mode: hostenvironment:# 服务发现配置- BEYLA_OPEN_PORT=8080- OTEL_SERVICE_NAME=my-app# OTLP 导出配置(内部平台)- OTEL_EXPORTER_OTLP_ENDPOINT=http://uptrace-grpc.yodao.cn:80- OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf- OTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=http://token@uptrace-grpc.yodao.cn/project# 采样配置- BEYLA_TRACE_PRINTER=disabled- BEYLA_METRICS_INTERVAL=30svolumes:- /sys/kernel/debug:/sys/kernel/debug:ro- /proc:/proc:ro- /sys:/sys:ro- /var/run/docker.sock:/var/run/docker.sock:ro
启动:
docker-compose up -d
Kubernetes 部署
使用 DaemonSet 部署(推荐)
场景:在 Kubernetes 集群中监控所有 Pod
步骤 1:创建 ConfigMap
创建 obi-config.yaml:
apiVersion: v1kind: ConfigMapmetadata:name: obi-confignamespace: monitoringdata:beyla-config.yml: |# 服务发现配置discovery:services:- k8s_namespace: defaultk8s_pod_name: "*"# OTLP 导出配置(内部平台)otel_exporter_otlp:endpoint: http://uptrace-grpc.yodao.cn:80protocol: http/protobuf# DSN 将通过环境变量 OTEL_EXPORTER_OTLP_HEADERS 设置# 网络监控(可选)network:enable: false# 采样配置traces:sampler:name: traceidratioarg: "0.1" # 10% 采样率# 日志级别log_level: info
步骤 2:创建 DaemonSet
创建 obi-daemonset.yaml:
apiVersion: apps/v1kind: DaemonSetmetadata:name: obinamespace: monitoringlabels:app: obispec:selector:matchLabels:app: obitemplate:metadata:labels:app: obispec:hostPID: truehostNetwork: trueserviceAccountName: obicontainers:- name: obiimage: grafana/beyla:latestimagePullPolicy: IfNotPresentsecurityContext:privileged: truereadOnlyRootFilesystem: truerunAsUser: 0capabilities:add:- SYS_ADMIN- SYS_RESOURCE- SYS_PTRACE- NET_ADMIN- NET_RAW- BPF- PERFMONenv:# OTLP Exporter 配置(内部平台)- name: OTEL_EXPORTER_OTLP_ENDPOINTvalue: "http://uptrace-grpc.yodao.cn:80"- name: OTEL_EXPORTER_OTLP_PROTOCOLvalue: "http/protobuf"- name: OTEL_EXPORTER_OTLP_HEADERSvalue: "uptrace-dsn=http://PROJECT_TOKEN@uptrace-grpc.yodao.cn/PROJECT_ID"# 配置文件路径- name: BEYLA_CONFIG_PATHvalue: "/etc/beyla/beyla-config.yml"# Kubernetes 元数据- name: KUBE_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: KUBE_NODE_NAMEvalueFrom:fieldRef:fieldPath: spec.nodeNameresources:limits:memory: 300Micpu: 200mrequests:memory: 100Micpu: 50mvolumeMounts:- name: configmountPath: /etc/beylareadOnly: true- name: sys-kernel-debugmountPath: /sys/kernel/debugreadOnly: true- name: procmountPath: /host/procreadOnly: true- name: sysmountPath: /sysreadOnly: true- name: runmountPath: /var/runreadOnly: true- name: tmpmountPath: /tmpvolumes:- name: configconfigMap:name: obi-config- name: sys-kernel-debughostPath:path: /sys/kernel/debug- name: prochostPath:path: /proc- name: syshostPath:path: /sys- name: runhostPath:path: /var/run- name: tmpemptyDir: {}tolerations:- effect: NoScheduleoperator: Exists- effect: NoExecuteoperator: Exists
步骤 3:创建 ServiceAccount 和 RBAC
创建 obi-rbac.yaml:
apiVersion: v1kind: ServiceAccountmetadata:name: obinamespace: monitoring---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRolemetadata:name: obirules:- apiGroups: [""]resources:- pods- services- endpointsverbs:- get- list- watch- apiGroups: ["apps"]resources:- deployments- replicasetsverbs:- get- list- watch---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata:name: obiroleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: obisubjects:- kind: ServiceAccountname: obinamespace: monitoring
步骤 4:部署
# 创建命名空间kubectl create namespace monitoring# 应用配置kubectl apply -f obi-rbac.yamlkubectl apply -f obi-config.yamlkubectl apply -f obi-daemonset.yaml# 验证部署kubectl get daemonset -n monitoringkubectl get pods -n monitoring -l app=obikubectl logs -n monitoring -l app=obi --tail=50
使用 Helm 部署
步骤 1:添加 Helm 仓库
helm repo add grafana https://grafana.github.io/helm-chartshelm repo update
步骤 2:创建 values.yaml
创建 obi-values.yaml:
# 镜像配置image:repository: grafana/beylatag: latestpullPolicy: IfNotPresent# 部署模式:daemonset 或 deploymentdeploymentMode: daemonset# 资源限制resources:limits:memory: 300Micpu: 200mrequests:memory: 100Micpu: 50m# OTLP 导出配置(内部平台)env:OTEL_EXPORTER_OTLP_ENDPOINT: "http://uptrace-grpc.yodao.cn:80"OTEL_EXPORTER_OTLP_PROTOCOL: "http/protobuf"OTEL_EXPORTER_OTLP_HEADERS: "uptrace-dsn=http://PROJECT_TOKEN@uptrace-grpc.yodao.cn/PROJECT_ID"# Beyla 配置config:discovery:services:- k8s_namespace: defaultk8s_pod_name: "*"traces:sampler:name: traceidratioarg: "0.1"log_level: info# 网络监控(可选)networkMonitoring:enabled: false# 容忍度(允许在所有节点运行)tolerations:- effect: NoScheduleoperator: Exists- effect: NoExecuteoperator: Exists
步骤 3:安装
helm install obi grafana/beyla \--namespace monitoring \--create-namespace \-f obi-values.yaml
步骤 4:验证
helm status obi -n monitoringkubectl get pods -n monitoring -l app.kubernetes.io/name=beyla
Pod 注解控制
通过 Pod 注解可以控制是否监控特定 Pod:
apiVersion: v1kind: Podmetadata:name: my-appannotations:# 启用 OBI 监控beyla.grafana.com/enabled: "true"# 自定义服务名称beyla.grafana.com/service-name: "my-custom-service"# 指定监控端口beyla.grafana.com/port: "8080"spec:containers:- name: appimage: my-app:latestports:- containerPort: 8080
Standalone 部署
二进制安装
步骤 1:下载二进制文件
# 下载最新版本VERSION=$(curl -s https://api.github.com/repos/grafana/beyla/releases/latest | grep tag_name | cut -d '"' -f 4)wget https://github.com/grafana/beyla/releases/download/${VERSION}/beyla-${VERSION}-linux-amd64.tar.gz# 解压tar -xzf beyla-${VERSION}-linux-amd64.tar.gzsudo mv beyla /usr/local/bin/sudo chmod +x /usr/local/bin/beyla
步骤 2:创建配置文件
创建 /etc/beyla/config.yml:
# 服务发现配置discovery:services:- open_port: 8080name: my-service# OTLP 导出配置(内部平台)otel_exporter_otlp:endpoint: http://uptrace-grpc.yodao.cn:80protocol: http/protobufheaders:uptrace-dsn: "http://PROJECT_TOKEN@uptrace-grpc.yodao.cn/PROJECT_ID"# 采样配置traces:sampler:name: traceidratioarg: "0.1"# 日志级别log_level: info
步骤 3:创建 systemd 服务
创建 /etc/systemd/system/beyla.service:
[Unit]Description=OBI (OpenTelemetry eBPF Instrumentation)Documentation=https://grafana.com/docs/beyla/After=network.target[Service]Type=simpleUser=rootExecStart=/usr/local/bin/beyla -config /etc/beyla/config.ymlRestart=alwaysRestartSec=10StandardOutput=journalStandardError=journalSyslogIdentifier=beyla# 安全配置NoNewPrivileges=falsePrivateTmp=trueProtectSystem=strictProtectHome=trueReadWritePaths=/tmp# 权限配置AmbientCapabilities=CAP_SYS_ADMIN CAP_SYS_RESOURCE CAP_SYS_PTRACE CAP_NET_ADMIN CAP_NET_RAW CAP_BPF CAP_PERFMON[Install]WantedBy=multi-user.target
步骤 4:启动服务
# 重新加载 systemdsudo systemctl daemon-reload# 启动 Beylasudo systemctl start beyla# 设置开机自启sudo systemctl enable beyla# 查看状态sudo systemctl status beyla# 查看日志sudo journalctl -u beyla -f
使用命令行直接运行
# 方式 1:使用配置文件sudo beyla -config /etc/beyla/config.yml# 方式 2:使用环境变量sudo OTEL_EXPORTER_OTLP_ENDPOINT=http://uptrace-grpc.yodao.cn:80 \OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf \OTEL_EXPORTER_OTLP_HEADERS=uptrace-dsn=http://TOKEN@uptrace-grpc.yodao.cn/PROJECT \BEYLA_OPEN_PORT=8080 \beyla# 方式 3:指定进程 PIDsudo beyla -target-pid 12345 \-config /etc/beyla/config.yml
详细配置
由于 OBI 文档篇幅限制,详细的配置说明请参考以下完整的配置文件示例和说明。完整文档内容已超过 2300 行,包含了网络可观测性、分布式追踪、安全性配置、高级主题、实战示例以及最佳实践与故障排查等完整内容。
完整配置示例
# Beyla 完整配置示例# 服务发现discovery:services:- open_port: 8080name: my-servicenamespace: production# OTLP 导出(内部平台)otel_exporter_otlp:endpoint: http://uptrace-grpc.yodao.cn:80protocol: http/protobufheaders:uptrace-dsn: "http://PROJECT_TOKEN@uptrace-grpc.yodao.cn/PROJECT_ID"timeout: 10compression: gzip# Traces 配置traces:exporter: otlpsampler:name: parentbased_traceidratioarg: "0.1"batch:max_queue_size: 2048max_export_batch_size: 512batch_timeout: 5s# Metrics 配置metrics:exporter: otlpinterval: 30s# 全局属性attributes:instance_id: "${HOSTNAME}"service_namespace: "production"# 路径配置routes:ignore:- /health- /metrics# 日志级别log_level: info
网络可观测性
OBI 不仅可以监控应用程序本身,还可以监控服务之间的网络流量,提供完整的网络可观测性。
启用网络监控
配置文件方式:
# beyla-config.ymlnetwork:enable: true# 网络接口(默认自动检测)interface: eth0# 采样率sampling_rate: 100
环境变量方式:
export BEYLA_NETWORK_ENABLE=trueexport BEYLA_NETWORK_INTERFACE=eth0
网络指标
启用网络监控后,OBI 会收集以下指标:
流量指标
network_bytes_sent_total- 发送的字节数network_bytes_received_total- 接收的字节数network_packets_sent_total- 发送的数据包数network_packets_received_total- 接收的数据包数
连接指标
network_connections_active- 活跃连接数network_connections_established_total- 建立的连接总数network_connections_closed_total- 关闭的连接总数
延迟指标
network_rtt_seconds- 网络往返时间(RTT)network_latency_seconds- 网络延迟直方图
跨可用区流量测量
对于云环境,OBI 可以标记跨可用区(AZ)的流量,帮助分析成本:
# beyla-config.ymlnetwork:enable: true# 启用 AZ 检测detect_az: trueattributes:# 添加 AZ 属性custom:source_az: "${AWS_AVAILABILITY_ZONE}"
指标示例:
# 跨 AZ 流量(GB)sum(network_bytes_sent_total{source_az!~dest_az}) / 1024 / 1024 / 1024# AZ 内流量(GB)sum(network_bytes_sent_total{source_az=dest_az}) / 1024 / 1024 / 1024
分布式追踪
Trace Span 结构
OBI 生成的 Span 包含以下信息:
HTTP Span
{"traceId": "4bf92f3577b34da6a3ce929d0e0e4736","spanId": "00f067aa0ba902b7","parentSpanId": "00f067aa0ba902b6","name": "GET /users/{id}","kind": "SERVER","startTime": "2024-01-15T10:30:00Z","endTime": "2024-01-15T10:30:00.123Z","attributes": {"http.method": "GET","http.url": "/users/123","http.status_code": 200,"http.request_content_length": 0,"http.response_content_length": 1234,"net.peer.ip": "192.168.1.100","net.host.ip": "192.168.1.50","net.host.port": 8080,"service.name": "my-service","service.namespace": "production"}}
gRPC Span
{"traceId": "4bf92f3577b34da6a3ce929d0e0e4736","spanId": "00f067aa0ba902b8","name": "grpc.UserService/GetUser","kind": "SERVER","attributes": {"rpc.system": "grpc","rpc.service": "UserService","rpc.method": "GetUser","rpc.grpc.status_code": 0,"net.peer.ip": "192.168.1.101"}}
上下文传播
OBI 自动注入和提取追踪上下文:
HTTP Headers
traceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01tracestate: congo=t61rcWkgMzE
gRPC Metadata
grpc-trace-bin: <binary encoded trace context>
安全性与权限
所需权限
OBI 需要以下 Linux Capabilities:
| Capability | 用途 | 必需 |
|---|---|---|
CAP_SYS_ADMIN | 加载 eBPF 程序(旧内核) | ✅ |
CAP_BPF | 加载 eBPF 程序(新内核 5.8+) | ✅ |
CAP_PERFMON | 使用性能监控 | ✅ |
CAP_SYS_PTRACE | 附加到进程 | ✅ |
CAP_DAC_READ_SEARCH | 读取系统文件 | ✅ |
CAP_CHECKPOINT_RESTORE | 读取 /proc 文件 | ✅ |
CAP_NET_ADMIN | 网络监控 | ⚠️ 可选 |
最小权限配置
Docker:
docker run \--cap-add=CAP_BPF \--cap-add=CAP_PERFMON \--cap-add=CAP_SYS_PTRACE \--cap-add=CAP_DAC_READ_SEARCH \--cap-add=CAP_CHECKPOINT_RESTORE \-v /sys/kernel/debug:/sys/kernel/debug:ro \grafana/beyla:latest
Kubernetes:
securityContext:capabilities:add:- BPF- PERFMON- SYS_PTRACE- DAC_READ_SEARCH- CHECKPOINT_RESTORE
高级主题
与 Cilium 兼容性
如果您的集群使用 Cilium 作为 CNI,需要注意:
- Cilium 也使用 eBPF 技术
- OBI 和 Cilium 可以共存
- 确保 OBI 的网络监控不与 Cilium 冲突
建议配置:
# 禁用 OBI 的网络监控,使用 Cilium 的 Hubblenetwork:enable: false
指标基数管理
OBI 自动控制指标基数以降低成本:
基数计算:
基数 = 服务数 × 路由数 × 方法数 × 状态码分类数示例:- 10 个服务- 每个服务 20 个路由- 4 个 HTTP 方法(GET、POST、PUT、DELETE)- 3 个状态码分类(2xx、4xx、5xx)基数 = 10 × 20 × 4 × 3 = 2400 个时间序列
优化策略:
- 使用路径聚合:
/users/{id}而不是/users/123 - 过滤不重要的路径:
/health、/metrics - 限制监控的服务数量
实战示例
示例 1:监控 Go HTTP 服务
应用代码(无需修改):
// main.gopackage mainimport ("fmt""net/http")func main() {http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "Hello, World!")})http.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "Users list")})http.ListenAndServe(":8080", nil)}
OBI 配置:
# obi-config.ymldiscovery:services:- open_port: 8080name: go-http-serviceotel_exporter_otlp:endpoint: http://uptrace-grpc.yodao.cn:80protocol: http/protobufheaders:uptrace-dsn: "http://TOKEN@uptrace-grpc.yodao.cn/PROJECT"
部署:
# 编译并运行应用go build -o app main.go./app &# 启动 OBIsudo beyla -config obi-config.yml
示例 2:Kubernetes 集群监控
部署应用:
kubectl create deployment my-app --image=my-app:latestkubectl expose deployment my-app --port=8080
部署 OBI DaemonSet:
kubectl apply -f obi-daemonset.yaml
查看数据:
访问 Uptrace 平台,筛选 service.name=my-app,查看:
- 请求量、错误率、延迟
- 服务拓扑图
- 追踪详情
最佳实践
部署建议
DaemonSet vs Sidecar:
- DaemonSet:推荐,每个节点一个 OBI,资源效率高
- Sidecar:适用于需要精细控制的场景
资源规划:
- CPU:每节点 50-200m
- 内存:每节点 100-300Mi
- 根据监控的进程数量调整
采样策略:
- 生产环境:10-20% 采样率
- 测试环境:100% 采样率
- 关键路径:始终采样
监控策略
分层监控:
- OBI:全局视图,所有服务
- 语言 Agent:关键服务详细信息
告警配置:
- 错误率 > 1%
- P99 延迟 > 1s
- 请求量突增/突降
故障排查
常见问题
1. 数据未上报
检查步骤:
# 查看 OBI 日志kubectl logs -n monitoring -l app=obi# 检查网络连接telnet uptrace-grpc.yodao.cn 80# 验证 DSNecho $OTEL_EXPORTER_OTLP_HEADERS
2. 内核版本不兼容
错误信息:
Error: kernel version 4.15.0 is not supported, minimum required: 4.18.0
解决方法:
# 升级内核sudo apt updatesudo apt install --install-recommends linux-generic-hwe-20.04
3. 权限不足
错误信息:
Error: failed to load eBPF program: permission denied
解决方法:
# 添加权限docker run --cap-add=SYS_ADMIN --cap-add=BPF ...
调试技巧
启用调试日志:
log_level: debug
使用 trace printer:
traces:printer: stdout # 将 trace 打印到标准输出
下一步:
- 选择合适的部署方式(Docker/Kubernetes/Standalone)
- 配置 OTLP 导出到内部 Uptrace 平台
- 在 Uptrace 平台查看数据
- 根据需要调整采样率和过滤规则
- 对关键服务补充语言 Agent 获取详细信息
获取帮助:
- 📖 OBI 官方文档
- 📖 Uptrace 平台使用指南
- 📖 各语言 SDK 文档
- 💬 内部支持渠道:APM 项目工单
总结
OBI (OpenTelemetry eBPF Instrumentation) 是一个强大的零代码自动埋点工具,特别适合:
- ✅ 快速启动分布式追踪
- ✅ 编译型语言(Go、Rust、C++)的监控
- ✅ Kubernetes 环境的全面监控
- ✅ 遗留系统的可观测性改造
- ✅ 多语言微服务架构
下一步
- 网络可观测性配置 - 配置网络流量监控
- 分布式追踪详解 - 了解 Trace Span 的详细信息
- 安全性配置 - 配置权限和安全选项
- Uptrace 平台使用 - 在 Uptrace 平台查看和分析数据
- 各语言 SDK 文档 - 对比使用语言 Agent