查看应用请求的延迟

了解如何从应用中收集和查看延迟时间数据:

  1. 使用 Google Cloud CLI 创建 Google Kubernetes Engine (GKE) 集群。

  2. 下载示例应用并将其部署到您的集群。

  3. 通过向示例应用发送 HTTP 请求来创建跟踪记录。

  4. 查看您创建的跟踪记录的延迟时间信息。

  5. 清理。


如需在 Google Cloud 控制台中直接遵循有关此任务的分步指导,请点击操作演示

操作演示


准备工作

  1. 您的组织定义的安全限制条件可能会导致您无法完成以下步骤。如需了解相关问题排查信息,请参阅在受限的 Google Cloud 环境中开发应用

  2. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  3. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  4. 确保您的 Google Cloud 项目已启用结算功能

  5. 启用 Google Kubernetes Engine and Cloud Trace API。

    启用 API

  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  7. 确保您的 Google Cloud 项目已启用结算功能

  8. 启用 Google Kubernetes Engine and Cloud Trace API。

    启用 API

创建 GKE 集群

  1. 在工具栏中,点击 激活 Cloud Shell,然后在 Cloud Shell 中执行以下步骤。

  2. 创建集群:

    gcloud container clusters create cloud-trace-demo --zone us-central1-c
    

    上一个命令(需要几分钟才能完成)会在可用区 us-central1-c 中创建一个名为 cloud-trace-demo 的标准集群。

  3. kubectl 配置为自动刷新其凭据以使用与 Google Cloud CLI 相同的身份:

    gcloud container clusters get-credentials cloud-trace-demo --zone us-central1-c
    
  4. 验证对集群的访问权限:

    kubectl get nodes
    

    此命令的示例输出如下:

    NAME                                              STATUS   ROLES    AGE   VERSION
    gke-cloud-trace-demo-default-pool-063c0416-113s   Ready    <none>   78s   v1.22.12-gke.2300
    gke-cloud-trace-demo-default-pool-063c0416-1n27   Ready    <none>   79s   v1.22.12-gke.2300
    gke-cloud-trace-demo-default-pool-063c0416-frkd   Ready    <none>   78s   v1.22.12-gke.2300
    

下载和部署应用

下载并部署 Python 应用,该应用使用 Flask 框架和 OpenTelemetry 软件包。本页的关于应用部分介绍了该应用。

在 Cloud Shell 中,执行以下操作:

  1. 如需从 GitHub 克隆 Python 应用,请运行以下命令:

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    
  2. 运行以下命令以部署示例应用:

    cd python-docs-samples/trace/cloud-trace-demo-app-opentelemetry && ./setup.sh
    

    脚本 setup.sh 需要几分钟才能完成。

    该脚本使用预构建的映像配置三项服务,然后等待所有资源预配完成。工作负载分别命名为 cloud-trace-demo-acloud-trace-demo-bcloud-trace-demo-c

    此命令的示例输出如下:

    deployment.apps/cloud-trace-demo-a is created
    service/cloud-trace-demo-a is created
    deployment.apps/cloud-trace-demo-b is created
    service/cloud-trace-demo-b is created
    deployment.apps/cloud-trace-demo-c is created
    service/cloud-trace-demo-c is created
    
    Wait for load balancer initialization complete......
    Completed.
    

创建跟踪记录数据

trace跟踪记录会描述应用完成单个操作所需的时间。

如需创建跟踪记录,请在 Cloud Shell 中运行以下命令:

curl $(kubectl get svc -o=jsonpath='{.items[?(@.metadata.name=="cloud-trace-demo-a")].status.loadBalancer.ingress[0].ip}')

上述命令的响应如下所示:

Hello, I am service A
And I am service B
Hello, I am service C

您可以多次执行 curl 命令以生成多条跟踪记录。

查看延迟时间数据

  1. 在 Google Cloud 控制台中,转到 Trace 探索器页面:

    转到 Trace 探索器

    您也可以使用搜索栏查找此页面。

    每个跟踪记录都由图表上的一个点和表中的一行表示。

    下面的屏幕截图显示了多条跟踪记录:

    快速入门的 Trace Explorer 窗口。

  2. 如需查看详细的跟踪记录,请选择图表中的相应点或表中的相应行。

    系统会刷新散点图,并用该点周围绘制一个圆圈来突出显示您选择的点,而代表所有其他轨迹的所有其他点则呈灰显状态。

    甘特图显示有关所选跟踪记录的信息。甘特图中的第一行是跟踪记录,跟踪记录中的每个 span 都有一行。Span 会描述执行完整子操作所需的时间。

    有关每个 span 的其他详细信息会显示在详细信息窗格中。

  3. 如需查看有关 span 的详细信息,请在甘特图中选择该 span。

关于应用

本快速入门中使用的示例应用可在 GitHub 代码库中找到。此代码库包含有关如何在除 Cloud Shell 之外的环境中使用应用的信息。示例应用使用 Python 编写,使用 Flask 框架和 OpenTelemetry 软件包,并在 GKE 集群上执行。

插桩

GitHub 代码库中的文件 app.py 包含捕获跟踪记录数据并将其发送到 Google Cloud 项目所需的插桩:

  • 该应用导入了多个 OpenTelemetry 软件包:

    from opentelemetry import trace
    from opentelemetry.exporter.cloud_trace import CloudTraceSpanExporter
    from opentelemetry.instrumentation.flask import FlaskInstrumentor
    from opentelemetry.instrumentation.requests import RequestsInstrumentor
    from opentelemetry.propagate import set_global_textmap
    from opentelemetry.propagators.cloud_trace_propagator import CloudTraceFormatPropagator
    from opentelemetry.sdk.trace import TracerProvider
    from opentelemetry.sdk.trace.export import BatchSpanProcessor
    
  • 应用使用跟踪上下文检测 Web 请求,并自动跟踪 Flask 处理程序和对其他服务的请求:

    app = flask.Flask(__name__)
    FlaskInstrumentor().instrument_app(app)
    RequestsInstrumentor().instrument()
  • 应用将 Cloud Trace 导出器配置为跟踪记录提供程序,以 Cloud Trace 格式传播跟踪记录上下文:

    def configure_exporter(exporter):
        """Configures OpenTelemetry context propagation to use Cloud Trace context
    
        Args:
            exporter: exporter instance to be configured in the OpenTelemetry tracer provider
        """
        set_global_textmap(CloudTraceFormatPropagator())
        tracer_provider = TracerProvider()
        tracer_provider.add_span_processor(BatchSpanProcessor(exporter))
        trace.set_tracer_provider(tracer_provider)
    
    
    configure_exporter(CloudTraceSpanExporter())
    tracer = trace.get_tracer(__name__)
  • 以下代码段展示了如何在 Python 中发送请求。 OpenTelemetry 使用传出请求隐式传播跟踪上下文:

    if endpoint is not None and endpoint != "":
        data = {"body": keyword}
        response = requests.get(
            endpoint,
            params=data,
        )
        return keyword + "\n" + response.text
    else:
        return keyword, 200
    
    

应用的工作原理

为简洁起见,在此部分中,在服务名称中省略了 cloud-trace-demo。例如,服务 cloud-trace-demo-c 的引用名称为 c

此应用会创建三项服务,其名分别为 abc。服务 a 配置为调用服务 b,服务 b 配置为调用服务 c。如需详细了解这些服务的配置,请参阅 GitHub 代码库中的 YAML 文件。

在本快速入门中,当您向服务 a 发出了 HTTP 请求后,请使用以下 curl 命令:

curl $(kubectl get svc -o=jsonpath='{.items[?(@.metadata.name=="cloud-trace-demo-a")].status.loadBalancer.ingress[0].ip}')

curl 命令的工作原理如下:

  1. kubectl 会获取名为 cloud-trace-demo-a 的服务的 IP 地址。
  2. 然后,curl 命令会将 HTTP 请求发送到服务 a
  3. 服务 a 会接收 HTTP 请求并向服务 b 发送请求。
  4. 服务 b 会接收 HTTP 请求并向服务 c 发送请求。
  5. 服务 c 接收来自服务 b 的 HTTP 请求,并将字符串 Hello, I am service C 返回给服务 b
  6. 服务 b 接收来自服务 c 的响应,将其附加到字符串 And I am service B 中,并将结果返回给服务 a
  7. 服务 a 接收来自服务 b 的响应,并将其附加到字符串 Hello, I am service A 中。
  8. 来自服务 a 的响应会输出到 Cloud Shell 中。

清理

为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。

如果您创建了一个新项目,但不再需要该项目,请删除项目

如果您使用的是现有项目,请执行以下操作:

  1. 如需删除集群,请在 Cloud Shell 中运行以下命令:

    gcloud container clusters delete cloud-trace-demo --zone us-central1-c

后续步骤