对 Go 应用进行插桩处理以进行 Error Reporting

您可以使用 Go 版 Error Reporting 软件包,从 Go 应用向 Error Reporting 发送错误报告。在以下情况下,您可以使用 Go 版 Error Reporting 软件包来创建错误组:

  • 您的日志存储桶包含客户管理的加密密钥 (CMEK)
  • 您的日志存储分区不在 global 区域。
  • 您想要报告自定义错误事件。

Error Reporting 已与某些 Google Cloud 服务集成,例如 App EngineCompute EngineGoogle Kubernetes Engine。Error Reporting 可显示在这些服务上运行的应用记录到 Cloud Logging 中的错误。如需了解详情,请参阅本页面中的在 Google Cloud 上运行

您还可以使用 Logging 将错误数据发送到 Error Reporting。如需了解数据格式设置要求,请参阅设置 Logging 中的错误消息格式

准备工作

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

    Go to project selector

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

  4. 启用 Error Reporting API 。

    启用 API

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

    Go to project selector

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

  7. 启用 Error Reporting API 。

    启用 API

安装客户端库

借助 Go 版 Error Reporting 软件包,您可以监控和查看几乎在任何位置运行的 Go 应用所报告的错误。

  1. 使用 go get 安装程序包:

    go get cloud.google.com/go/errorreporting

如需详细了解如何安装,请参阅 Go 版 Error Reporting 软件包的文档。您还可以使用问题跟踪器来报告问题。

配置客户端库

您可以自定义 Go 版 Stackdriver Error Reporting 程序包的行为。参阅 godoc

在 Google Cloud 上运行应用

如需使用 projects.events.report 创建错误组,您的服务帐号需要具备 Error Reporting Writer 角色 (roles/errorreporting.writer)。

某些 Google Cloud 服务会自动将 Error Reporting Writer 角色 (roles/errorreporting.writer) 授予相应的服务帐号。但是,您必须将此角色授予某些服务的相应服务帐号。

App Engine 柔性环境

App Engine 会自动将 Error Reporting Writer 角色 (roles/errorreporting.writer) 授予您的默认服务帐号。

无需明确提供凭据即可使用 Go 版 Error Reporting 软件包。

系统会自动为 App Engine 柔性环境应用启用 Error Reporting。 无需进行额外设置。

Google Kubernetes Engine

如需将 Error Reporting 与 Google Kubernetes Engine 搭配使用,请执行以下操作:

  1. 确保已向容器使用的服务帐号授予 Error Reporting Writer 角色 (roles/errorreporting.writer)。

    您可以使用 Compute Engine 默认服务帐号或自定义服务帐号。

    如需了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

  2. 创建集群并向该集群授予 cloud-platform 访问权限范围

    例如,以下 create 命令指定了 cloud-platform 访问权限范围和服务帐号:

    gcloud container clusters create CLUSTER_NAME --service-account  SERVICE_ACCT_NAME --scopes=cloud-platform
    

Compute Engine

如需将 Error Reporting 与 Compute Engine 虚拟机实例搭配使用,请执行以下操作:

  1. 确保已向虚拟机实例使用的服务帐号授予 Error Reporting 写入者角色 (roles/errorreporting.writer)。

    您可以使用 Compute Engine 默认服务帐号或自定义服务帐号。

    如需了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

  2. 在 Google Cloud 控制台中,转到虚拟机实例页面:

    前往虚拟机实例

    如果您使用搜索栏查找此页面,请选择子标题为 Compute Engine 的结果。

  3. 选择要接收 cloud-platform 访问权限范围的虚拟机实例。

  4. 点击停止,然后点击修改

  5. 身份和 API 访问权限部分,选择具有 Error Reporting Writer 角色 (roles/errorreporting.writer) 的服务帐号。

  6. 访问权限范围部分中,选择允许所有 Cloud API 的全面访问权限,然后保存更改。

  7. 点击启动/恢复

示例

以下示例演示了如何使用 Go 客户端库报告自定义错误事件:


// Sample errorreporting_quickstart contains is a quickstart
// example for the Google Cloud Error Reporting API.
package main

import (
	"context"
	"errors"
	"log"
	"os"

	"cloud.google.com/go/errorreporting"
)

var errorClient *errorreporting.Client

func main() {
	// Set your Google Cloud Platform project ID via environment or explicitly
	projectID := os.Getenv("GOOGLE_CLOUD_PROJECT")
	args := os.Args[1:]
	if len(args) > 0 && args[0] != "" {
		projectID = args[0]
	}

	ctx := context.Background()
	var err error
	errorClient, err = errorreporting.NewClient(ctx, projectID, errorreporting.Config{
		ServiceName:    "errorreporting_quickstart",
		ServiceVersion: "0.0.0",
		OnError: func(err error) {
			log.Printf("Could not report the error: %v", err)
		},
	})
	if err != nil {
		log.Fatal(err)
	}
	defer errorClient.Close()

	err = errors.New("something went wrong")
	if err != nil {
		logAndPrintError(err)
		return
	}
}

func logAndPrintError(err error) {
	/// Client autopopulates the error context of the error. For more details about the context see:
	/// https://cloud.google.com/error-reporting/reference/rest/v1beta1/ErrorContext
	errorClient.Report(errorreporting.Entry{
		Error: err,
	})
	log.Print(err)
}

要查看更多示例了解如何报告紧急状况和错误,请参阅 godoc

在本地开发环境中运行应用

如需在本地开发环境中使用 Go 版 Error Reporting 软件包(例如在您自己的工作站上运行库),您必须使用本地应用默认凭据提供 Go 版 Error Reporting 软件包。如需了解详情,请参阅向 Error Reporting 进行身份验证

如需在本地开发环境中使用本页面上的 Go 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。

  1. 安装 Google Cloud CLI。
  2. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  3. 为您的 Google 账号创建本地身份验证凭据:

    gcloud auth application-default login

如需了解详情,请参阅 Set up authentication for a local development environment

projects.events.report 方法也支持 API 密钥。 如果您要使用 API 密钥进行身份验证,则无需设置本地应用默认凭据文件。如需了解详情,请参阅 在 Google Cloud 身份验证文档中创建 API 密钥

查看错误报告

在 Google Cloud 控制台中,转到 Error Reporting 页面:

前往 Error Reporting

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

如需了解详情,请参阅查看错误