剖析在 Google Cloud 外部运行的应用的性能
本页面介绍了如何剖析在 Google Cloud 外部运行的应用的性能。
在这种情况下,您的应用和 Cloud Profiler 代理在 Google Cloud 外部运行,但您可以使用 Cloud Profiler 界面分析相关性能剖析数据。
使用 Profiler 界面分析性能剖析数据时,需要使用一个 Google Cloud 项目。在其他位置运行的性能剖析代理必须能够返回性能剖析文件以供分析之用。要实现这一点,您必须执行以下操作:
- 创建一个 Google Cloud 项目并启用相应 API。
- 获取性能剖析代理在上传性能剖析文件时要使用的凭据。
- 配置代理以使用这些凭据和 Google Cloud 项目 ID。
创建 Google Cloud 项目
In the Google Cloud console, on the project selector page, click Create project to begin creating a new Google Cloud project.
启用 Profiler API
-
Enable the required API.
如果系统显示 API 已启用,则表示此 API 已经启用。如未显示,请点击启用按钮。
为代理获取凭据
您可以通过以下两种方法获取代理要使用的凭据:
- 让代理使用需要进行私钥身份验证的服务账号
- 让代理使用应用默认凭据 (ADC)。
使用服务账号
为了支持代理使用需要进行私钥身份验证的服务账号,您必须执行以下操作:
创建一个服务账号。例如,使用 Google Cloud CLI:
gcloud iam service-accounts create MY_SVC_ACCT_ID --display-name "my service account"
如需了解详情,请参阅创建服务账号。
向服务账号授予 roles/cloudprofiler.agent 角色,以便该账号可以写入性能剖析数据。例如,使用 Google Cloud CLI:
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
如需了解详情,请参阅向服务账号授予角色。
为服务账号创建 JSON 密钥。例如,使用 Google Cloud CLI:
gcloud iam service-accounts keys create \ ~/key.json \ --iam-account MY_SVC_ACCT_ID@GCP_PROJECT_ID.iam.gserviceaccount.com
如需了解详情,请参阅创建服务账号密钥。
在即将运行性能剖析代理的机器上,执行以下操作:
- 放置一个包含您刚刚创建的 JSON 密钥的文件的副本。
- 将环境变量
GOOGLE_APPLICATION_CREDENTIALS
设置为包含 JSON 密钥的文件的完全限定名称。 此环境变量必须对运行性能剖析代理的进程可见,因此,如果您使用脚本或 Dockerfile 运行进程,请在其中添加环境变量。
使用应用默认凭据
为了支持代理使用应用默认凭据,您需要通过网页流程获取用户访问凭据,并将这些凭据放在应用默认凭据库需要的位置。 这些凭据将充当服务账号的代理。
如需使用应用默认凭据,请运行以下 Google Cloud CLI 命令:
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')