CnOps 智能运维与可观测社区
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题
导航菜单
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题

CnOps 智能运维与可观测社区

愿景

CnOps 智能运维与可观测社区是一个以"智能运维与可观测"为核心的开放、包容、分享的技术社区,旨在聚集运维专家、开发者和爱好者,共同探讨、学习和分享可观测最佳实践与最新技术,与众多技术社区合作互动,共同探讨交叉领域的技术挑战,推动可观测领域的创新与进步。

内容社区

  • 实践文章
  • 视频课程
  • 开源项目
  • 常见问答
  • 开发者工具

友情链接

  • Prometheus
  • Grafana Lab
  • OpenTelemetry
  • LoongCollector

关注我们

阿里云云原生公众号阿里云云原生
阿里云可观测公众号阿里云可观测

Copyright © 2026 CnOps 社区. All rights reserved.

首页/开源项目/OpenTelemetry/构建认证器扩展
文档目录
文档开始手动插桩使用插桩库导出器资源采样什么是 OpenTelemetry?
API 参考文档示例
快速入门安装 Collector
管理发行版故障排查Collector 扩容转换遥测数据架构定制 Collector
构建认证器扩展
基准测试自适应性
支持库列表

OpenTelemetry

构建认证器扩展

OpenTelemetry Collector 允许将接收器和导出器连接到认证器, 从而在接收端对传入连接进行身份验证,并在导出端为传出的请求添加认证数据。 这种机制是通过[扩展][extensions]实现的,本文将指导你实现自己的认证器。 如果你正在寻找如何使用现有认证器的文档,请参考入门指南页面以及你的认证器文档。 你可以在本网站的注册表中找到现有认证器的列表。...

OpenTelemetry Collector 允许将接收器和导出器连接到认证器,
从而在接收端对传入连接进行身份验证,并在导出端为传出的请求添加认证数据。

这种机制是通过扩展实现的,本文将指导你实现自己的认证器。
如果你正在寻找如何使用现有认证器的文档,请参考入门指南页面以及你的认证器文档。
你可以在本网站的注册表中找到现有认证器的列表。

请使用本指南作为构建自定义认证器的常规指导,并参考最新的
API 参考指南
以了解每种类型和函数的实际语义。

如果你需要帮助,可以随时加入
CNCF Slack 工作区中的
#opentelemetry-collector 聊天室。

架构 {#architecture}

认证器是普通的扩展,但同时满足与认证机制相关的一个或多个接口。
服务器认证器与接收器一起使用,可以拦截 HTTP 和 gRPC 请求;
客户端认证器与导出器一起使用,可以向 HTTP 和 gRPC 请求添加认证数据。
一个认证器可以同时实现这两个接口,从而允许同一个扩展实例同时用于处理传入和传出的请求。
但请注意,用户可能仍然希望针对传入和传出请求使用不同的认证器,
因此不要让你的认证器必须同时在两端使用。

一旦认证器扩展可用于 Collector 发行版中,就可以像普通扩展一样在配置文件中引用此扩展:

extensions:
  oidc:

receivers:
processors:
exporters:

service:
  extensions:
    - oidc
  pipelines:
    traces:
      receivers: []
      processors: []
      exporters: []

但是,认证器必须由使用它的组件引用才能生效。
下面的示例展示了与上面相同的扩展,但现在它被名为 otlp/auth 的接收器使用:

extensions:
  oidc:

receivers:
  otlp/auth:
    protocols:
      grpc:
         endpoint: 0.0.0.0:4317
        auth:
          authenticator: oidc

processors:
exporters:

service:
  extensions:
    - oidc
  pipelines:
    traces:
      receivers:
        - otlp/auth
      processors: []
      exporters: []

当需要多个相同类型的认证器实例时,可以给它们不同的名称:

extensions:
  oidc/some-provider:
  oidc/another-provider:

receivers:
  otlp/auth:
    protocols:
      grpc:
         endpoint: 0.0.0.0:4317
        auth:
          authenticator: oidc/some-provider

processors:
exporters:

service:
  extensions:
    - oidc/some-provider
    - oidc/another-provider
  pipelines:
    traces:
      receivers:
        - otlp/auth
      processors: []
      exporters: []

服务器认证器 {#server-authenticators}

服务器认证器本质上是一个带有 Authenticate 函数的扩展,该函数接收载荷头作为参数。
如果认证器能够验证传入连接,应返回 nil 错误;如果无法认证,则返回具体错误。
作为扩展,认证器应确保在
Start
阶段初始化所需的所有资源,并在 Shutdown 时清理这些资源。

Authenticate 调用是传入请求的热路径的一部分,会阻塞管道,
因此要正确处理任何可能阻塞的操作。具体来说,如果提供了上下文的截止时间,要确保遵守该截止时间。
此外,还要为扩展添加足够的可观测性,尤其是通过指标和追踪,
以便用户在错误率高于某个水平时能够设置通知系统,并能调试特定的失败情况。

客户端认证器 {#client-authenticators}

客户端认证器是实现了客户端认证器中定义的一个或多个接口的扩展。

与服务器认证器类似,它们本质上是带有额外函数的扩展,
每个函数都会接收一个对象,让认证器有机会向其中注入认证数据。
例如,HTTP 客户端认证器会提供一个
http.RoundTripper,
而 gRPC 客户端认证器则可以生成
credentials.PerRPCCredentials。

将自定义认证器添加到发行版 {#adding-your-custom-authenticator-to-a-distribution}

自定义认证器必须与主要 Collector 位于同一个可执行文件中。
当你构建自己的认证器时,通常需要同时构建自定义发行版,或者为用户提供将你的扩展作为其发行版一部分的方式。
幸运的是,可以使用 OpenTelemetry Collector Builder 工具轻松构建自定义发行版。

文章大纲