分布式追踪

可观测性是在生产环境中运行服务的关键特性,使用这些数据,您可以识别异常状态并在发生错误时做出明智的决策来解决问题。分布式追踪是现代应用可观测性的关键要素。Harbor 可以为运维人员和管理员提供分布式追踪数据,以了解当前的运行状态并帮助进行故障排除。Harbor 使用 OpenTelemetry sdk 公开追踪数据,您可以轻松地通过 Otel 协议导出追踪数据,这些数据可以被 OpenTelemetry Collector 消费,然后暴露给几乎所有的本地或云追踪后端。由于 Jaeger 的普及,Harbor 也可以直接将追踪数据暴露给 Jaeger 后端。

在 harbor v2.4 及更高版本中,您可以在 Harbor 配置文件 中启用分布式追踪。但是我们一次只支持一个导出器(如果您启用了追踪,则不能设置 bosh 或不设置任何导出器)。如果您想将数据发送到多个导出器,您可以将 otel 设置为导出器,并利用 OpenTelemetry Collector 重新传输到多个后端。同样,Jaeger 导出器支持代理模式和端点模式,但一次只能启用一种模式。

暴露的数据

追踪数据由几个 Harbor 组件暴露:corejobserviceregistry。以下章节列出了可用的 Harbor 追踪数据。

数据 组件 示例
接收到的 HTTP 请求 Core 每个 HTTP 请求(例如 Harbor UI 上的操作、推送镜像等)
客户端发送的 HTTP 请求 Core core 通过 HTTP 访问其他服务(例如健康检查、代理到 chartmuseum、调用 job service API 等)
请求 ID Core 每个 http 追踪都会添加一个 X-Request-ID,这将有助于查找日志
数据库事务 Core 每个触发数据库事务的操作(例如创建项目、推送镜像到 Harbor 等)
接收到的 HTTP 请求 Jobservice 每个 HTTP 请求(例如健康检查、来自 core 的调用等)
客户端发送的 HTTP 请求 Jobservice jobservice 通过 HTTP 访问其他服务(例如复制作业调用 core API 推送镜像、GC 作业调用 registryctl API 等)
后端作业 Jobservice jobservice 运行的任何作业
接收到的 HTTP 请求 Registryctl 每个 HTTP 请求(例如来自 core 的健康检查、来自 jobservice 的调用等)