本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

Zipkin 是一款分布式追踪系统。它有助于收集解决服务架构中延迟问题所需的时序数据,功能包括此类数据的收集与查询。
如果日志文件中有跟踪ID,你可以直接跳转到对应的跟踪数据。否则,你可以根据服务名称、操作名称、标签和持续时间等属性进行查询。系统会为你汇总一些重要数据,例如在某个服务中花费的时间百分比,以及操作是否失败。
Zipkin UI 还提供依赖图,展示有多少跟踪请求经过了每个应用。这有助于识别聚合行为,包括错误路径或对已弃用服务的调用。
应用需要进行“ instrumentation”(即 instrumentation 配置)才能向 Zipkin 报告跟踪数据。这通常意味着需要配置追踪器或 instrumentation 库。向 Zipkin 报告数据最常用的方式是通过 HTTP 或 Kafka,但也存在许多其他选项,如 Apache ActiveMQ、gRPC 和 RabbitMQ。提供给 UI 的数据可以存储在内存中,或通过受支持的后端(如 Apache Cassandra 或 Elasticsearch)持久化存储。
最快速的启动方式是获取最新发布的服务器作为独立可执行 JAR 文件。注意,Zipkin 服务器需要至少 JRE 8 环境。例如:
curl -sSL [***] | bash -s java -jar zipkin.jar
你也可以通过 Docker 启动 Zipkin:
docker run -d -p 9411:9411 openzipkin/zipkin
服务器启动后,你可以通过 Zipkin UI 在 [***] 查看跟踪数据。
如果你的应用尚未发送跟踪数据,请使用Zipkin instrumentation 进行配置,或尝试我们的示例。
有关配置详情,请查看 zipkin-server 文档,或参考 docker-zipkin 了解如何使用 docker-compose。
核心库 供 Zipkin instrumentation 和 Zipkin 服务器使用。其最低支持 Java 6 语言级别,以支持编写代理 instrumentation。
该库包含 Zipkin v1 和 v2 JSON 格式的内置编解码器。通过精简和重新打包所用类,避免了对 gson(JSON 库)的直接依赖。生成的 JAR 包大小为 155k,不会与你使用的任何库冲突。
示例:
// 所有数据都记录在同一个端点,与你的服务图关联 localEndpoint = Endpoint.newBuilder().serviceName("tweetie").ip("192.168.0.1").build() span = Span.newBuilder() .traceId("d3d200866a77cc59") .id("d3d200866a77cc59") .name("targz") .localEndpoint(localEndpoint) .timestamp(epochMicros()) .duration(durationInMicros) .putTag("compression.level", "9"); // 现在,你可以将其编码为 JSON bytes = SpanBytesEncoder.JSON_V2.encode(span);
注意:以上仅为示例,通常你会希望使用现有的追踪库,如 Brave。
Zipkin 包含 StorageComponent,用于存储和查询跨度(span)及依赖链接。服务器、收集器或跨度报告器都会用到它。因此,存储组件的依赖极少,但大多数需要 Java 8+ 环境。
示例:
// 此操作不会创建网络连接 storage = ElasticsearchStorage.newBuilder() .hosts(asList("[***]")).build(); // 准备调用 traceCall = storage.spanStore().getTrace("d3d200866a77cc59"); // 同步或异步执行 trace = traceCall.execute(); // 清理会话等资源 storage.close();
InMemoryStorage 组件打包在 Zipkin 核心库中。它既不持久化数据,也不适用于实际工作负载。其用途是测试,例如在笔记本电脑上启动服务器而无需任何数据库。
Cassandra 组件使用 Cassandra 3.11.3+ 特性,但会针对最新的 Cassandra 3.11 补丁版本进行测试。
这是我们的第二代 Cassandra 模式。它使用 UDT 存储跨度,因此在 cqlsh 中看起来类似 Zipkin v2 JSON。其设计考虑了可扩展性,并结合使用 SASI 和手动实现的索引,使查询大量数据时更高效。
注意:此存储需要通过作业聚合依赖链接。
Elasticsearch 组件使用 Elasticsearch 5+ 特性,但会针对 Elasticsearch 6-7.x 进行测试。
它将跨度存储为 Zipkin v2 JSON,以便与其他工具集成。为帮助扩展,它结合使用自定义索引和手动实现的索引。
注意:此存储需要通过Spark 作业聚合依赖链接。
以下 API 端点提供搜索功能,默认启用。搜索主要用于 UI 的跟踪列表页面。
GET /services - distinct Span.localServiceNameGET /remoteServices?serviceName=X - 按 Span.localServiceName 筛选的 distinct Span.remoteServiceNameGET /spans?serviceName=X - 按 Span.localServiceName 筛选的 distinct Span.nameGET /autocompleteKeys - 受配置白名单限制的 Span.tags 键的 distinct 值GET /autocompleteValues?key=X - 按键筛选的 Span.tags 值的 distinct 值GET /traces - 匹配包含上述条件的查询的跟踪数据禁用搜索后,只能通过 ID(GET /trace/{traceId})检索跟踪数据。仅当存在其他查找跟踪 ID 的方式(如日志)时,禁用搜索才可行。禁用搜索可降低存储成本或提高写入吞吐量。
当 Zipkin 通过环境变量 SEARCH_ENABLED=false 运行时,会隐含 StorageComponent.Builder.searchEnabled(false)。
以下组件不再推荐使用,但为过渡到受支持的组件提供帮助。这些组件标为“v1”,因为它们使用基于 Zipkin V1 Thrift 模型的数据布局,而非当前使用的更简单的 v2 数据模型。
MySQL v1 组件使用 MySQL 5.6+ 特性,但会针对 MariaDB 10.3 进行测试。
该模式设计易于理解和上手,但并非为性能而设计。例如,跨度字段作为列,因此你可以使用 SQL 执行临时查询。然而,此组件存在已知性能问题:如果存入大量数据,查询最终会耗时数秒。
此存储不需要通过作业聚合依赖链接。但运行作业可提高依赖查询的性能。
Cassandra v1 组件使用 Cassandra 2.2+ 特性,但会针对最新的 Cassandra 3.11 补丁版本进行测试。
CQL 编写于 2015 年,基于 *** 的原始 Cassandra 模式,并经过扩展。跨度存储为不透明的 Thrift 数据,这意味着你无法在 cqlsh 中查询字段。该模式为可扩展性而设计,包括手动实现的索引,使查询大量数据时更高效。
注意:此存储需要通过作业聚合依赖链接。
Zipkin 服务器 通过 HTTP POST 接收跨度数据,并响应来自 UI 的查询。它还可以运行收集器,如 RabbitMQ 或 Kafka。
要从当前检出的源码运行服务器,请执行以下命令。编译源码需要 JDK 11。
# 构建服务器及其依赖 $ ./mvnw -DskipTests --also-make -pl zipkin-server clean install # 运行服务器 $ java -jar ./zipkin-server/target/zipkin-server-*exec.jar
服务器制品的 Maven groupId 为 io.zipkin,库制品的 Maven groupId 为 io.zipkin.zipkin2。
发布版本上传至 Bintray 并同步至 Maven Central。
提交至 master 分支后,快照版本上传至 JFrog。
zipkin-server 的发布版本发布至 Docker Hub,镜像名为 openzipkin/zipkin。详情参见 docker-zipkin。
[***] 包含版本化文件夹,其中包含每次(非 PR)构建及发布版本的 Javadoc。
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429