open-telemetry/opentelemetry-ebpf-instrumentation

GitHub: open-telemetry/opentelemetry-ebpf-instrumentation

基于 eBPF 的 OpenTelemetry 自动化插桩工具,无需修改应用代码即可采集分布式追踪与指标遥测数据。

Stars: 446 | Forks: 100

# OpenTelemetry eBPF Instrumentation 本仓库提供了基于 OpenTelemetry 标准的 eBPF instrumentation。 它提供了一种轻量且高效的方式,使用 eBPF 为用户空间应用程序收集遥测数据。 **O**penTelemetry e-**B**PF **I**nstrumentation 通常简称为 OBI。 ## 项目状态 OBI 目前处于开发阶段。在项目处于 `v0` 阶段时,用户应预料到次要版本之间可能会出现破坏性变更。 如果您正在评估 OBI 以用于生产环境: - 请固定使用特定的 semver 发布标签,而不是依赖 `latest`,因为后者是一个不断变动且不稳定的标签 - 在次要版本之间升级之前,请查阅发布说明 - 预料在 `v0` 的次要版本之间,配置、行为、支持的环境以及发出的遥测数据可能会发生变化 - 在 OBI 宣布这些层面稳定之前,避免假定仪表盘、警报或下游处理器的遥测连续性 有关项目的版本控制与稳定性策略,请参见 [VERSIONING.md](./VERSIONING.md)。 有关 OBI 目前文档记录为受支持的环境和构件平台,请参见 [SUPPORT_MATRIX.md](./SUPPORT_MATRIX.md)。 ## 如何开始开发 前提条件: * Docker * GNU Make 1. 首先,通过 `make docker-generate` 生成所有 eBPF Go bindings。每次在 [`bpf/`](./bpf) 文件夹下添加或修改 C 文件时,您都需要重新运行此 make 任务。 2. 要运行代码检查器和单元测试:`make fmt verify`。 3. 要运行集成测试,请运行以下任一命令: ``` make integration-test make integration-test-k8s make oats-test ``` ,或者运行上述所有任务。每个集成测试目标最多可能需要 50 分钟才能完成,但您可以 使用标准的 `go` 命令行工具,在 [internal/test/integration](./internal/test/integration) 和 [internal/test/integration/k8s](./internal/test/integration/k8s) 文件夹下单独运行每个集成测试套件。 ## 零代码 Instrumentation 以下是使用二进制文件下载或容器镜像快速启动并运行 OBI 的参考说明。有关全面的设置、配置和故障排除指南,请参阅 [OpenTelemetry 零代码 instrumentation 文档](https://opentelemetry.io/docs/zero-code/),这是权威的可靠信息源。 有关发布构件的验证和安装详细信息,请参见: - [将 OBI 作为独立进程运行](https://opentelemetry.io/docs/zero-code/obi/setup/standalone/) - [将 OBI 作为 Docker 容器运行](https://opentelemetry.io/docs/zero-code/obi/setup/docker/) ## 安装说明 ### 二进制文件下载 OBI 为 Linux(amd64 和 arm64)提供了预编译的二进制文件。请从 [发布页面](https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/releases) 下载最新版本。 每个版本包含: - `obi-v-linux-amd64.tar.gz` - Linux AMD64/x86_64 归档文件 - `obi-v-linux-arm64.tar.gz` - Linux ARM64 归档文件 - `obi-v-linux-amd64.cyclonedx.json` - AMD64 归档文件的 CycloneDX SBOM - `obi-v-linux-arm64.cyclonedx.json` - ARM64 归档文件的 CycloneDX SBOM - `obi-v-source-generated.cyclonedx.json` - 源码生成归档文件的 CycloneDX SBOM - `obi-java-agent-v.cyclonedx.json` - 内置 Java agent 及其 Java 依赖项的 CycloneDX SBOM - `SHA256SUMS` - 用于验证发布归档文件和 SBOM 资产的校验和 #### 下载并验证 ``` # 设置所需的版本(在 https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/releases 查找最新版本) export VERSION=1.0.0 # 确定您的架构 # 对于 Intel/AMD 64 位:amd64 # 对于 ARM 64 位:arm64 export ARCH=amd64 # Change to arm64 for ARM systems ``` 下载归档文件和校验和清单: ``` # 下载适用于您架构的压缩包 wget https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/releases/download/v${VERSION}/obi-v${VERSION}-linux-${ARCH}.tar.gz # 下载校验和 wget https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/releases/download/v${VERSION}/SHA256SUMS ``` 验证下载的发布资产: ``` # 验证您下载的压缩包 sha256sum -c SHA256SUMS --ignore-missing ``` 成功验证后,会为您下载的每个文件打印一个 `OK` 结果: ``` obi-v${VERSION}-linux-${ARCH}.tar.gz: OK ``` 如果验证失败,`sha256sum` 将报告 `FAILED`。请重新下载 受影响的文件,并在继续操作前确保您验证的是来自同一发布 版本的资产。 解压归档文件: ``` tar -xzf obi-v${VERSION}-linux-${ARCH}.tar.gz # 该压缩包包含: # - obi:主 OBI 二进制文件 # - k8s-cache:Kubernetes 缓存二进制文件 # - LICENSE:项目许可证 # - NOTICE:法律声明 # - NOTICES/:第三方许可证和归属 ``` #### 可选:下载并检查 SBOM CycloneDX SBOM 文件是用于供应链审查和自动化的可选元数据。 安装或运行 OBI 并不强制要求这些文件。 发布 SBOM 以 [CycloneDX JSON 格式](https://cyclonedx.org/) 描述了已发布归档文件的内容及内置 组件。它们可以被依赖项分析和漏洞扫描工具直接使用,而无需 解压或执行二进制文件。 下载您想检查的 SBOM: ``` # 您下载的二进制包的 SBOM wget https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/releases/download/v${VERSION}/obi-v${VERSION}-linux-${ARCH}.cyclonedx.json # 嵌入式 Java agent 及其 Java 依赖项的 SBOM wget https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/releases/download/v${VERSION}/obi-java-agent-v${VERSION}.cyclonedx.json # 可选:也根据 SHA256SUMS 验证下载的 SBOM 文件 sha256sum -c SHA256SUMS --ignore-missing ``` 使用常用工具检查 SBOM 内容: ``` # 列出压缩包 SBOM 中的组件名称和版本 jq '.components[] | {name, version}' obi-v${VERSION}-linux-${ARCH}.cyclonedx.json # 使用 Grype 扫描 SBOM grype sbom:obi-v${VERSION}-linux-${ARCH}.cyclonedx.json # 检查 Java agent 依赖图 jq '.components[] | {name, version}' obi-java-agent-v${VERSION}.cyclonedx.json ``` #### 安装到系统 解压归档文件后,您可以将二进制文件安装到您的 PATH 中的某个位置,以便在任何目录下使用它们。 Java agent 已嵌入在 `obi` 二进制文件中,因此不需要单独安装 Java agent JAR。 在运行时,OBI 会将内置的 Java agent 解压到用户缓存目录(通常是 `$XDG_CACHE_HOME/obi/java` 或 `~/.cache/obi/java`)中,并在多次运行之间复用以校验和命名的缓存文件。 以下示例将文件安装到 `/usr/local/bin`,这是大多数 Linux 发行版中的标准位置。您也可以安装到 PATH 中的任何其他目录: ``` # 将二进制文件移动到您 PATH 中的目录 sudo cp obi /usr/local/bin/ sudo cp k8s-cache /usr/local/bin/ # 验证安装 obi --version ``` ### 容器镜像 OBI 也以容器镜像的形式提供: ``` # 设置所需的版本。 export VERSION=v0.7.0 # (可选)验证容器镜像的签名 cosign verify --certificate-identity-regexp 'https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/' --certificate-oidc-issuer 'https://token.actions.githubusercontent.com' otel/ebpf-instrument:${VERSION} # (可选)从 GHCR 验证同一版本 cosign verify --certificate-identity-regexp 'https://github.com/open-telemetry/opentelemetry-ebpf-instrumentation/' --certificate-oidc-issuer 'https://token.actions.githubusercontent.com' ghcr.io/open-telemetry/opentelemetry-ebpf-instrumentation/ebpf-instrument:${VERSION} # 拉取镜像 docker pull otel/ebpf-instrument:${VERSION} # 或者从 GHCR 拉取相同的镜像 docker pull ghcr.io/open-telemetry/opentelemetry-ebpf-instrumentation/ebpf-instrument:${VERSION} # 在容器中运行 OBI # 注意:OBI 需要提升的权限 (--privileged) 来 instrument 进程 # 详见 https://opentelemetry.io/docs/zero-code/obi/setup/docker/ docker run --privileged otel/ebpf-instrument:${VERSION} ``` 成功的 `cosign verify` 输出会声明声明已被验证,并返回已签名的镜像摘要。如果验证失败,请确认您查询的仓库中存在该镜像标签,并且您正在使用上述所示的 GitHub OIDC 签发者和身份正则表达式。 ## 示例 - [OTel Collector Receiver 示例](./examples/otel-collector/README.md) - [NGINX 多路由与代理示例](./examples/nginx/README.md) ## 贡献指南 参见 [CONTRIBUTING](CONTRIBUTING.md) ## 许可证 OpenTelemetry eBPF Instrumentation 根据 Apache 软件许可证 2.0 版的条款获得许可。 有关更多详细信息,请参见 [许可证文件](./LICENSE)。
标签:API集成, DNS解析, Docker, Docker镜像, GET参数, Go语言, OBI, OpenTelemetry, 内核技术, 分布式追踪, 可观测性, 子域名突变, 安全防御评估, 客户端加密, 开源项目, 性能分析, 性能监控, 指标收集, 无侵入监控, 日志审计, 用户代理, 用户空间监控, 程序破解, 请求拦截, 遥测数据, 零代码插桩