Grafana 发布开源 eBPF 自动检测工具 Grafana Beyla
Grafana 发布了开源 eBPF 自动检测工具 Grafana Beyla,用于应用程序的可观测性。Beyla 能够报告 Linux HTTP/S 和 gRPC 服务的 Span 信息和 RED 指标(Rate-Errors-Duration),且无需修改代码插入探针。
支持的语言和服务
Beyla 支持用 Go、NodeJS、Python、Rust、Ruby、.NET 等语言编写的 HTTP 和 HTTPS 服务。对于 Java 应用,目前仅支持 HTTP。此外,Beyla 也支持用 Go 编写的 gRPC 服务。
安装与配置
安装 Beyla 后,可以通过提供可执行文件的详细信息以及指标导出器来检测主机上正在运行的服务。可执行文件可以通过其名称(使用环境变量 EXECUTABLE_NAME)或应用程序中的任何开放端口(使用环境变量 OPEN_PORT)来选择。以下示例配置 Beyla 检测拥有端口 8080 的应用程序,并将跟踪信息发送到标准输出,RED 指标发送到 localhost:8999/metrics:
$ BEYLA_PROMETHEUS_PORT=8999 PRINT_TRACES=true OPEN_PORT=8080 sudo -E beyla查询服务将返回以下格式的日志:
Request_time (response_duration) status_code http_method path source->destination request_size架构与数据处理
Beyla 的 EBPF tracer 会检测进程、创建跟踪信息,并将其传递给路由装饰器。通过 routes decorator,可以将 HTTP 路径(如 /user/1234/info)映射到 HTTP 路由(如 /user/{id}/info)。随后,数据被转发到各种导出器和端点。
指标导出
Beyla 支持以 OpenTelemetry 和 Prometheus 格式导出指标。OTEL metrics exporter 将数据导出到外部的 OpenTelemetry 指标收集器。OTEL traces exporter 可用于将 Span 数据发送到外部的 OpenTelemetry 跟踪收集器。Prometheus HTTP endpoint 创建一个 HTTP 端点,允许以 Prometheus 格式抓取指标。此外,Beyla 的内部指标也可以以 Prometheus 格式获取。
运行方式
Beyla 可以作为独立的 Linux 进程、Docker 容器或 Kubernetes 的 sidecar 容器运行。Docker 方法可用于检测容器内运行的进程。运行 Beyla 需要 Linux 内核版本 4.18 或更高,并且主机必须启用 eBPF。
RED 指标的概念
RED 指标由 Grafana 的 CTO Tom Wilkie 在 2015 年提出。Wilkie 意识到 USE 方法不适用于服务后,创建了 RED 方法。USE 方法关注资源的利用率、饱和度和错误,而 RED 方法则关注请求的速率(每秒请求数)、错误(失败的请求数)和持续时间(请求所花费的时间)。Wilkie 指出:
RED 方法是衡量客户满意度的良好指标。如果错误率高,用户会直接感受到页面加载错误;如果持续时间长,网站就会变慢。因此,这些指标对于构建有意义的警报和衡量 SLA 非常有帮助。
获取与许可
Grafana Beyla 目前处于公开预览阶段,可在 GitHub 上下载,遵循 Apache 2.0 许可证。更多发布详情可参阅 Grafana 博客 和 Beyla 文档。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。