设置 Node.js 版 Error Reporting

您可以使用 Node.js 版 Stackdriver Error Reporting 库将 Node.js 应用提供的错误报告发送到 Stackdriver Error Reporting。

Error Reporting 已与 Cloud FunctionsApp EngineCompute EngineGoogle Kubernetes Engine 等部分 Google Cloud Platform 产品集成。Error Reporting 可显示在这些产品上运行的应用记录到 Stackdriver Logging 的错误。如需了解详情,请参阅在 Google Cloud Platform 上运行

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

准备工作

  1. 登录您的 Google 帐号。

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

  2. 选择或创建 Google Cloud Platform 项目。

    转到“管理资源”页面

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

    了解如何启用结算功能

  4. 启用Error Reporting API 。

    启用 API

  5. 准备您的 Node.js 开发环境。

    转到 Node.js 设置指南

安装客户端库

借助 Node.js 版 Stackdriver Error Reporting 库,您可以监控和查看在几乎 任何地方运行的 Node.js 应用所报告的错误。

  1. 使用 npm 安装该软件包:

    npm install --save @google-cloud/error-reporting
  2. 导入库并实例化客户端,以开始报告错误:

    // Imports the Google Cloud client library
    const ErrorReporting = require('@google-cloud/error-reporting')
      .ErrorReporting;
    
    // On Node 6+ the following syntax can be used instead:
    // const {ErrorReporting} = require('@google-cloud/error-reporting');
    
    // With ES6 style imports via TypeScript or Babel, the following
    // syntax can be used instead:
    // import {ErrorReporting} from '@google-cloud/error-reporting';
    
    // Instantiates a client
    const errors = new ErrorReporting();
    
    // Reports a simple error
    errors.report('Something broke!');

如需了解安装详情,请参阅 Node.js 版 Stackdriver Error Reporting 库的文档。您还可以使用问题跟踪器来报告问题。

配置客户端库

您可以自定义 Node.js 版 Stackdriver Error Reporting 库的行为。要查看可能的配置选项列表,请参阅库的配置。这些选项可以通过传递到库构造函数的 options 对象进行传递。

报告错误

您可以通过调用 report 方法手动报告错误,如以下示例所示:

// Imports the Google Cloud client library
const ErrorReporting = require('@google-cloud/error-reporting')
  .ErrorReporting;

// On Node 6+ the following syntax can be used instead:
// const {ErrorReporting} = require('@google-cloud/error-reporting');

// With ES6 style imports via TypeScript or Babel, the following
// syntax can be used instead:
// import {ErrorReporting} from '@google-cloud/error-reporting';

// Instantiates a client
const errors = new ErrorReporting();

// Use the error message builder to customize all fields ...
const errorEvent = errors.event();

// Add error information
errorEvent.setMessage('My error message');
errorEvent.setUser('root@nexus');

// Report the error event
errors.report(errorEvent, () => {
  console.log('Done reporting error event!');
});

// Report an Error object
errors.report(new Error('My error message'), () => {
  console.log('Done reporting Error object!');
});

// Report an error by provided just a string
errors.report('My error message', () => {
  console.log('Done reporting error string!');
});

使用 Express.js 报告错误

Node.js 版 Stackdriver Error Reporting 库可以将 Stackdriver Error Reporting 集成到常用的 Node.js 网络框架(如 Express.js)中:

const express = require('express');

// Imports the Google Cloud client library
const ErrorReporting = require('@google-cloud/error-reporting')
  .ErrorReporting;

// On Node 6+ the following syntax can be used instead:
// const {ErrorReporting} = require('@google-cloud/error-reporting');

// With ES6 style imports via TypeScript or Babel, the following
// syntax can be used instead:
// import {ErrorReporting} from '@google-cloud/error-reporting';

// Instantiates a client
const errors = new ErrorReporting();

const app = express();

app.get('/error', (req, res, next) => {
  res.send('Something broke!');
  next(new Error('Custom error message'));
});

app.get('/exception', () => {
  JSON.parse('{"malformedJson": true');
});

// Note that express error handling middleware should be attached after all
// the other routes and use() calls. See the Express.js docs.
app.use(errors.express);

const PORT = process.env.PORT || 8080;
app.listen(PORT, () => {
  console.log(`App listening on port ${PORT}`);
  console.log('Press Ctrl+C to quit.');
});

其他集成

要详细了解 Node.js 版 Stackdriver Error Reporting 库与其他 Node.js 网络框架之间的集成,请参阅 GitHub 上库的代码库

在 Google Cloud Platform 上运行

要使用 Node.js 版 Stackdriver Error Reporting 库,需具备 Cloud IAM Error Reporting 写入者角色。大多数 Google Cloud Platform 计算平台默认提供此角色。

App Engine 柔性环境

App Engine 默认授予 Error Reporting 写入者角色

无需明确提供凭据,即可使用 Node.js 版 Stackdriver Error Reporting 库。

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

GKE

GKE 上,您必须在创建集群时添加 cloud-platform 访问权限范围,如以下示例命令所示:

gcloud container clusters create example-cluster-name --scopes https://www.googleapis.com/auth/cloud-platform

Compute Engine

使用 Compute Engine 虚拟机实例时,请为每个实例添加 cloud-platform 访问权限范围。通过 Google Cloud Platform Console 创建新实例时,您可以在创建实例面板的身份和 API 访问权限部分中执行此操作。请使用 Compute Engine 默认服务帐号或您选用的其他服务帐号,并在身份和 API 访问权限部分中勾选允许所有 Cloud API 的全面访问权限。无论您选择哪个服务帐号,都请确保已在 GCP Console 的 IAM 和管理部分向其授予 Error Reporting 写入者角色

Cloud Functions

Cloud Functions 会默认授予 Error Reporting 写入者角色

无需明确提供凭据,即可使用 Node.js 版 Stackdriver Error Reporting 库。

Cloud Functions 已配置为自动使用 Error Reporting。未处理的 JavaScript 异常将在 Stackdriver Logging 中显示,并且会由 Error Reporting 进行处理,而无需使用 Node.js 版 Stackdriver Error Reporting 库。

在本地和其他位置运行

要在 Google Cloud Platform 外部使用 Node.js 版 Stackdriver Error Reporting 库,您必须直接向 Node.js 版 Stackdriver Error Reporting 库提供 GCP 项目 ID 和相应的服务帐号凭据。这适用于在您自己的工作站上、自己的数据中心计算机上或者在其他云提供商的虚拟机实例上运行该库。如需了解详情,请参阅手动获取和提供服务帐号凭据

示例:

// Imports the Google Cloud client library
const ErrorReporting = require('@google-cloud/error-reporting')
  .ErrorReporting;

// On Node 6+ the following syntax can be used instead:
// const {ErrorReporting} = require('@google-cloud/error-reporting');

// With ES6 style imports via TypeScript or Babel, the following
// syntax can be used instead:
// import {ErrorReporting} from '@google-cloud/error-reporting';

// Instantiates a client
const errors = new ErrorReporting({
  projectId: 'your-project-id',
  keyFilename: '/path/to/key.json',
});

// Reports a simple error
errors.report('Something broke!');

查看错误报告

部署后,您可以在 GCP Console Error Reporting 信息中心查看错误报告。

转到 Error Reporting 信息中心

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

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Stackdriver Error Reporting
需要帮助?请访问我们的支持页面