将 Cloud Trace 与 Zipkin 搭配使用

本页面介绍如何使用 Zipkin 服务器接收来自 Zipkin 客户端的跟踪记录,并将这些跟踪记录转发到 Cloud Trace 进行分析。

如果您的应用已通过 Zipkin 进行插桩处理,并且您不想运行自己的跟踪记录后端,或者希望访问 Cloud Trace 的高级分析工具,则可能需要使用 Zipkin 服务器。

本页面介绍了几种设置 Zipkin 服务器的方法:

使用容器映像来设置服务器

您可以在 GitHub 上获取 Cloud Trace Zipkin 收集器的容器映像。此代码库包含 Docker 构建定义(在基础 Zipkin Docker 映像之上添加 Google Cloud 支持)和详细的设置步骤。

您可以在所选的容器主机(包括 Google Kubernetes Engine)上运行此映像。

如需运行映像,请使用以下命令:

$ docker run -d -p 9411:9411 \
-e STORAGE_TYPE=stackdriver \
-e GOOGLE_APPLICATION_CREDENTIALS=/root/.gcp/credentials.json \
-e STACKDRIVER_PROJECT_ID=your_project \
-v $HOME/.gcp:/root/.gcp:ro \
openzipkin/zipkin-gcp

如果您在 Google Cloud 中运行此容器(例如在 Compute Engine 实例或 Google Kubernetes Engine 集群上),则系统会自动捕获环境的默认凭据并将跟踪记录自动发送到 Cloud Trace。

如需了解完整的设置流程,请转到 Zipkin Docker 映像的 GitHub 代码库

按照本页中的说明,您还必须配置 Zipkin 跟踪器

在 Google Cloud 之外运行服务器

如果您想要在 Google Cloud 之外(例如在本地运行的物理服务器上)构建和运行收集器,请完成以下步骤:

创建或选择项目

  1. 登录您的 Google 帐号。

    如果您还没有 Google 帐号,请注册一个新帐号

  2. 在 Cloud Console 的项目选择器页面上,选择或创建 Cloud 项目。

    转到项目选择器页面

由于收集器未在 Google Cloud 上运行,因此不需要结算帐号。

创建服务帐号

如需允许您的服务向 Cloud Trace API 进行身份验证,请执行以下操作:

  1. 创建服务帐号
    1. 确保已向新服务帐号授予项目编辑者角色,因而此帐号可以向 Trace API 写入数据。
    2. 选择提供新的私钥并选择 JSON。
    3. 将 JSON 凭据文件保存到将运行收集器服务的机器上的目录中。

配置防火墙

对网络进行配置,使端口 9411 上的 TCP 流量可以传送至运行 Zipkin 收集器的机器。

如果您的应用托管在防火墙外部,则请注意,Zipkin 跟踪器到收集器的流量未经加密,也未经过身份验证。Cloud Trace Zipkin 收集器与 Cloud Trace API 之间的连接会经过加密和身份验证,来自 Cloud Trace 插桩库的连接也是如此。

使用容器映像来设置服务器

如需了解详情,请参阅使用容器映像

配置 Zipkin 跟踪器

按照本页面上常见的配置 Zipkin 跟踪器部分中的说明进行操作。

修改现有的 Zipkin 服务器

Zipkin 项目会保留有关如何将 Cloud Trace 用作现有 Zipkin 服务器的存储目标的说明。这些说明可在 Zipkin Docker 映像的 GitHub 代码库中找到。

如何配置 Zipkin 跟踪器

无论您如何托管 Cloud Trace Zipkin 收集器,都需要配置 Zipkin 跟踪器以向其发送数据。

如需引用收集器,请使用其内部 IP 地址、外部 IP 地址(如果它会接收来自 Google Cloud 外部托管的应用的跟踪记录)或主机名。每个 Zipkin 跟踪器的配置都不同。例如,要将 Brave 跟踪器指向 IP 地址为 1.2.3.4 的收集器,必须将以下代码行添加到您的 Java 代码库中:

    Reporter reporter = AsyncReporter.builder(OkHttpSender.create("1.2.3.4:9411/api/v1/spans")).build();
    Brave brave = Brave.Builder("example").reporter(reporter).build()

常见问题解答

问:有什么限制?

此版本有两项已知限制:

  1. Zipkin 跟踪器必须支持正确的 Zipkin 时间和时长语义。如需了解详情,请转到对库进行插桩处理 (Instrumenting a library),然后向下滚动到时间戳和时长 (Timestamps and duration) 部分。

  2. Zipkin 跟踪器和 Cloud Trace 插桩库无法将 span 附加到同一跟踪记录,因为它们使用不同的格式在服务之间传播跟踪上下文。结果是一个库捕获的跟踪记录不包含由另一个库进行插桩处理的服务的 span。

    因此,我们建议希望使用 Cloud Trace 的项目要么只使用兼容 Zipkin 的跟踪器与 Zipkin 收集器,要么使用原生支持 Cloud Trace 的插桩库。如需详细了解 Cloud Trace 库,请参阅 Node.jsJavaGo

    例如:

    Span 限制图示。

    向 Node.js Web 应用发出的请求将使用 Zipkin 库进行跟踪并发送到 Stackdriver Trace。但是,这些跟踪记录不包含由 ASP.NET API 应用生成的 span。Zipkin 库捕获的跟踪记录也不包含 APS.NET API 应用向其 MySQL 数据库发出的 RPC 调用的 span。

问:此功能可以用作完整的 Zipkin 服务器吗?

不可以,此功能只向 Cloud Trace 写入数据。