许多变量 - 您的用户设备类型和配置,外部托管服务以及第三方库可能会影响应用程序的性能。没有性能监控系统,可能会出现许多问题。这些问题甚至可能意味着用户停止使用您的应用程序。
AppSignal提供应用程序性能监视(APM),具有诸如错误跟踪,性能监视,主机监视,异常检测和正常运行时间监视等功能,以帮助您跟踪错误并监视应用程序的性能。
在本文中,我们将为Nestjs应用程序设置应用程序信号,并提供一些使用AppSignal跟踪错误的提示。
让我们开始!
初始化Nestjs应用程序
Nestjs是构建Node.js服务器端应用程序的框架。 Nestjs是用打字稿构建的,并在开箱即用的位置支持Typescript,但它仍然使开发人员能够编写纯JavaScript代码。它提供了通过HTTP服务器框架(例如Express(默认))或快速曝光并公开API的抽象层,因此开发人员可以集成许多Nestjs的第三方模块。
您可以通过运行以下内容在计算机上安装Nestjs打字稿启动项目:
git clone https://github.com/nestjs/typescript-starter.git sample_app
cd sample_app
npm install
为Nestjs配置应用程序信号
如果您没有一个Appsignal帐户create one,请在下面运行以下命令以在应用程序中安装和配置应用程序。
npx @appsignal/cli install
这将安装必要的软件包,您会被要求使用配置方法。使用appsignal.cjs配置文件选项选择。
CLI工具将在src/
目录中生成一个名为appsignal.cjs
的配置文件。
生成的配置包括:
- 有效的推动API键
- 应用程序名称
- 将
active
设置为true
您可以通过单击组织设置来从应用程序信号帐户中获取推送API键。
在本文中,我们将我们的应用程序称为“ sample_app”。 node.js软件包的应用程序自动仪器nestjs。此命令在开发模式下使用热代码重新加载启动应用程序,并在启动时使用 您应该将 您还可以将上面的命令作为脚本包含在您的 然后通过运行命令开始您的应用程序。 AppSignal跟踪您的Nestjs应用程序提出的任何错误,并将立即开始收集指标。 要对此进行测试,请在 然后在浏览器中打开http://localhost:3000,因此您的应用程序会引起错误。转到应用程序信号的仪表板,然后单击概述: AppSignal的错误跟踪提供了不同的见解,可帮助您控制应用程序。仪表板概述为重要指标提供了简单但功能强大的视觉效果,例如: 以及更多! 当您单击最新打开错误部分中列出的错误时,这将打开一个页面,其中包含更多详细信息以帮助调试。 使用此信息,您可以: 您还可以集成个人问题跟踪器或GitHub来分配问题并管理错误。 Read more about AppSignal for Node.js. 在某些情况下,您希望应用程序忽略您的应用程序提出的一些错误,例如,使用您的应用程序通过bot提出的例外。 为此,您可以将 要处理应用程序中的异常,请使用 Nestjs具有一个内置异常层,该图层会自动处理应用程序中未经处理的异常。它捕获了未经处理的错误,并发送适当的用户友好响应。如我们所见,Appsignal也跟踪和报告了此类错误。 您可能需要完全控制异常层,以自定义发送给客户端的响应的内容。您可以使用 在 在应用程序服务中,更新您的 在应用程序控制器中,通过更新 运行应用程序时,AppSignal将跟踪 AppSignal可以用于管理协作工作流程,包括: 要将团队成员添加到您的应用程序应用程序中,请单击仪表板底部左下方的应用程序设置按钮。 然后团队许可 - 管理该团队的邀请。 AppSignal还提供了一个通知系统,该系统可以通过电子邮件发送警报,并与Slack,Discord,Microsoft团队等许多通信工具集成。 AppSignal的警报可以配置为适合您组织的工作流程。例如,如果您主要使用Slack和Email,则可以配置警报设置以向每个团队成员的电子邮件发送正常运行时间监视警报,并将错误跟踪器指标发送到特定的Slack频道。 单击应用程序设置和通知访问配置面板的选项。 AppSignal还可以提供通知的Webhooks,因此您可以创建工作流,功能和操作来处理应用程序中发生的事件。 Read the docs to find out more about AppSignal webhooks。 应用程序的正常运行时间监视监视器,当您的应用程序降低并提醒您时。它检查您提供的URL并记录给定端点在不同区域的性能。 AppSignal PISS在全球多个区域中给定的URL,如果在30秒内没有响应,它将考虑该地区的应用程序。 要创建正常运行时间监视器,请单击添加正常时间监视器
Nestjs错误跟踪AppSignal
--require
预订appsignal.cjs
:
npx nest start --watch --exec "node --require ./src/appsignal.cjs"
--require
标志添加到启动应用程序的任何脚本中。对于我们的演示,我们只将其添加到start:dev
:package.json
中。
{
"scripts": {
// ...
"start:dev": "nest start --watch --exec \"node --require ./src/appsignal.cjs\""
// ...
}
}
npm run start:dev
app.service.ts
文件中更新getHello()
方法以引起错误。
// src/app.service.ts
import { Injectable } from "@nestjs/common";
@Injectable()
export class AppService {
getHello(): string {
throw new Error("SOME SAMPLE ERROR");
// return 'Hello World';
}
}
用应用程序处理错误
ignoreErrors
属性添加到appsignal.cjs
中的配置对象。 ignoreErrors
采用了一系列特定的错误名称。
const { Appsignal } = require("@appsignal/nodejs");
new Appsignal({
// ...
ignoreErrors: ["SpecificError", "AnotherError", "SomeError"],
});
@appsignal/node
软件包提供的sendError
方法记录事件。@nestjs/common
的ExceptionFilter
类。src/exception_filters/
目录中创建一个名为appsignalexception.filter.ts
的新文件,然后将下面的代码复制到文件中。
import {
ExceptionFilter,
Catch,
ArgumentsHost,
HttpException,
} from "@nestjs/common";
import { sendError } from "@appsignal/nodejs";
import { Response } from "express";
@Catch(HttpException)
export class AppSignalExceptionFilter implements ExceptionFilter {
catch(exception: HttpException, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse<Response>();
const status = exception.getStatus();
sendError(exception);
// handle the exceptions however you want: logging, additional info, HTTP response, etc.
response.status(status).send("handle the error however you may want");
}
}
AppSignalExceptionFilter
扩展了ExceptionFilter
类,覆盖了捕获方法。app.service.ts
文件,因此getHello
升级了HttpException
。
import { HttpException, Injectable } from "@nestjs/common";
@Injectable()
export class AppService {
getHello(): string {
throw new HttpException("THIS IS AN ERROR", 500 /* status code */);
}
}
app.controller.ts
文件来利用异常过滤器。
import { Controller, Get, UseFilters } from "@nestjs/common";
import { AppService } from "./app.service";
import { AppSignalExceptionFilter } from "./exception_filters/appsignalexception.filter";
@Controller()
@UseFilters(new AppSignalExceptionFilter())
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}
sendError
方法发送的事件(请参阅下面的屏幕截图的“最新打开错误”部分):
邀请团队成员并设置Appsignal中错误的警报
您可以根据工作流程添加集成并配置较旧的集成。
在AppSignal中启用正常运行时间监视
Read more about uptime monitoring in AppSignal.
查看Monitoring Your NestJS Application with AppSignal以了解更多信息。
包起来
在本文中,我们为Nestjs应用程序安装了AppSignal。然后我们探索了如何:
- 跟踪错误并挖掘错误详细信息
- 设置来自Appsignal的警报以适合您的工作流程的方式跟踪错误
- 启用对不同URL端点的正常运行时间监视
快乐调试!
P.S。如果您喜欢这篇文章,subscribe to our JavaScript Sorcery list每月深入研究更神奇的JavaScript技巧和技巧。
P.P.S。如果您需要node.js应用程序的apm,请go和check out the AppSignal APM for Node.js。