主题
eBPF 全链路观测(Beyla + Tempo)on uat1
零侵入(不改代码、不注入 sidecar)为 uat1(RKE2)集群所有服务提供 RED 指标 + 分布式 Trace + 服务拓扑:Grafana Beyla DaemonSet 通过 eBPF 自动埋点节点上全部进程,指标直出 Prometheus,trace 直发 Tempo;Tempo metrics-generator 再聚合 spanmetrics / servicegraph 回写 Prometheus,Grafana 一处看板贯通 指标 ↔ trace ↔ 拓扑。
| 文件 | 说明 |
|---|---|
| 部署文档.md | 完整部署手册:架构、镜像同步、安装、Grafana 接入、验证、踩坑、生产注意事项、卸载 |
| 操作文档.md | 日常运维:看板使用、Trace 查询、指标速查、扩缩容/升级、排障速查 |
| deploy.sh | 一键部署(幂等;--sync 先同步镜像,需 export HARBOR_PASSWORD 或 .secrets.env) |
| sync-images.sh / images.txt | 镜像同步:docker.m.daocloud.io → Harbor observability 项目(2 个镜像) |
| tempo.yaml | Tempo v2.10.7 单实例 monolithic:OTLP 接收 + metrics-generator + local backend(NFS PVC) |
| beyla.yaml | Beyla v3.30.0 DaemonSet:SA/RBAC + ConfigMap + DS + metrics Service |
| monitoring.yaml | ServiceMonitor(beyla/tempo)+ PrometheusRule(RED 告警,接入现有飞书路由) |
| grafana/dashboard-ebpf-apm-red.json | RED 总览看板(uid=ebpf-apm-red,Grafana 导入即用) |
架构
各节点进程(HTTP/gRPC/SQL/Redis/Kafka…)
▲ eBPF uprobes/kprobes(零侵入)
Beyla DaemonSet(6 节点,hostPID,最小 caps)
├── Prometheus export :9090 ──► rancher-monitoring Prometheus(RED 指标,ServiceMonitor)
└── OTLP/gRPC ──► Tempo :4317(observability ns)
├── local backend:WAL + blocks(NFS PVC 10Gi,保留 48h)
└── metrics-generator ── remote_write ──► Prometheus
(traces_spanmetrics_* / traces_service_graph_*)
Grafana(rancher-monitoring)
├── 数据源 Prometheus(exemplar trace_id ──► 跳转 Tempo)
├── 数据源 Tempo(Node Graph 用 Prometheus servicegraph 数据)
└── 看板 eBPF APM - RED 总览(uid ebpf-apm-red)关键信息
- 组件版本:Beyla v3.30.0(已捐赠 OTel,亦称 OBI)、Tempo v2.10.7(未选 3.0:架构大改,UAT 求稳)
- 内核要求:5.8+ 且带 BTF;本集群 Rocky 9.8 内核 5.14 满足
- Beyla 权限:非 privileged,仅需
BPF + PERFMON + NET_ADMIN + SYS_PTRACEcaps + hostPID - Tempo 存储:local backend(UAT 够用),NFS PVC 10Gi,块保留 48h;生产换对象存储(S3/MinIO)
- 自动覆盖的协议:HTTP/HTTPS/HTTP2、gRPC、SQL、Redis、Kafka、Mongo(DNS/GPU 默认关闭)
- 实测自动埋点:Knative 全链路(activator/queue-proxy/user-container/kourier)、redis、proxysql、kibana、logstash(Java 通用模式)、k8sgpt 等,无需任何配置
- 告警:PrometheusRule
ebpf-apm-red——应用 5xx 错误率 >2%、P99 延迟 >1s、Beyla/Tempo down,复用现有 Alertmanager 飞书路由
已知限制(UAT 可接受)
- 跨进程 trace 断链:Go context propagation(写
traceparent头)需bpf_probe_write_user+ CAP_SYS_ADMIN,当前未加 SYS_ADMIN,跨服务调用链在进程边界断开(单服务内 span 完整) - Java TLS:JDK 进程 SSL 加密流量的 telemetry 不可用(
java attach timed out),明文 HTTP 正常 - 老 Go(<1.17)程序:仅通用 instrumentation,无 Go 专属高精度追踪
- Knative 缩容到零:ksvc 无流量 70s 后 pod 消失,对应 trace 也停止产生(正常现象)
- Tempo 单点:单实例无 HA,重启期间 trace 接收中断(Beyla 侧有重试缓冲,短暂中断可恢复)