剖析在 Google Cloud 外部运行的应用的性能

本页面介绍了如何剖析在 Google Cloud 外部运行的应用的性能。

在这种情况下,您的应用和 Cloud Profiler 代理在 Google Cloud 外部运行,但您可以使用 Cloud Profiler 界面分析相关性能剖析数据。

使用 Profiler 界面分析性能剖析数据时,需要使用一个 Google Cloud 项目。在其他位置运行的性能剖析代理必须能够返回性能剖析文件以供分析之用。要实现这一点,您必须执行以下操作:

  1. 创建一个 Google Cloud 项目并启用相应 API。
  2. 获取性能剖析代理在上传性能剖析文件时要使用的凭据。
  3. 配置代理以使用这些凭据和 Google Cloud 项目 ID。

创建 Google Cloud 项目

在 Google Cloud Console 的项目选择器页面上,点击创建以开始创建新的 Google Cloud 项目。

转到项目选择器页面

启用 Profiler API

在新项目的 Cloud Console 页面中,转到 API 和服务页面:

  1. 转到 API 和服务信息中心:

    转到 API 和服务

  2. 点击添加 API 和服务按钮。

    添加 API 和服务

  3. 搜索 Profiler API

  4. 在搜索结果中,选择 Cloud Profiler API

  5. 如果系统显示 API 已启用,则表示此 API 已经启用。如未显示,请点击启用按钮。

为代理获取凭据

您可以通过以下两种方法获取代理要使用的凭据:

  • 让代理使用需要进行私钥身份验证的服务帐号
  • 让代理使用应用默认凭据 (ADC)。

使用服务帐号

为了支持代理使用需要进行私钥身份验证的服务帐号,您必须执行以下操作:

  1. 创建一个服务帐号。例如,可以运行以下 Cloud SDK 命令:

    gcloud iam service-accounts create MY_SVC_ACCT_ID --display-name "my service account"
    

    如需了解详情,请参阅创建服务帐号

  2. 向服务帐号授予 roles/cloudprofiler.agent 角色,以便该帐号可以写入性能剖析数据。例如,可以运行以下 Cloud SDK 命令:

     gcloud projects add-iam-policy-binding GCP_PROJECT_ID \
         --member serviceAccount:MY_SVC_ACCT_ID@GCP_PROJECT_ID.iam.gserviceaccount.com \
         --role roles/cloudprofiler.agent
    

    如需了解详情,请参阅向服务帐号授予角色

  3. 为服务帐号创建 JSON 密钥。例如,可以运行以下 Cloud SDK 命令:

     gcloud iam service-accounts keys create \
         ~/key.json \
         --iam-account MY_SVC_ACCT_ID@GCP_PROJECT_ID.iam.gserviceaccount.com
    

    如需了解详情,请参阅创建服务帐号密钥

  4. 在即将运行性能剖析代理的机器上,执行以下操作:

    1. 放置一个包含您刚刚创建的 JSON 密钥的文件的副本。
    2. 将环境变量 GOOGLE_APPLICATION_CREDENTIALS 设置为包含 JSON 密钥的文件的完全限定名称。 此环境变量必须对运行性能剖析代理的进程可见,因此,如果您使用脚本或 Dockerfile 运行进程,请在其中添加环境变量。

使用应用默认凭据

为了支持代理使用应用默认凭据,您需要通过网页流程获取用户访问凭据,并将这些凭据放在应用默认凭据库需要的位置。 这些凭据将充当服务帐号的代理。

如需使用应用默认凭据,请运行以下 Cloud SDK 命令:

 gcloud auth application-default login

然后按照此命令指导您完成的步骤操作。

将代理关联到 Google Cloud 项目

必须通过配置性能剖析代理来指定 Google Cloud 项目的 ID,以便上传性能剖析文件。此操作的机制取决于具体语言。

Go

剖析 Go 应用的性能中所述的 profiler.Config 对象中,指定一个附加参数 ProjectID

 profiler.Config{ProjectID: "GCP_PROJECT_ID", ...}

Java

在进行 Java 调用时指定一个附加的 Java 代理配置标志 cprof_project_id

 -cprof_project_id=GCP_PROJECT_ID

您的应用无法访问 Compute Engine 元数据服务器时,系统将显示类似于以下内容的消息:

     Error making HTTP request for 169.254.169.254:80/computeMetadata/v1/instance/zone
如需停止这些消息,请将 -cprof_zone_name=VALUE 添加到代理配置标志并重启您的应用。在这种情况下,请将 VALUE 替换为描述性字符串,例如“test”。

Node.js

剖析 Node.js 应用的性能中所述的 serviceContext 对象中,指定一个附加参数 projectID

projectId: 'GCP_PROJECT_ID',
serviceContext: {
  ...
}

Python

剖析 Python 应用的性能中所述的 start 方法调用中,指定一个附加参数 project_id

googlecloudprofiler.start(..., project_id='GCP_PROJECT_ID')

后续步骤

如需了解 Profiler 图表和控件,请转到使用 Cloud Profiler 界面。如需了解详情,请参阅以下内容: