Nodejs Nestjs性能监控插件metrics的使用

Nodejs Nestjs性能监控插件metrics的使用
在NestJS中,你可以使用@nestjs/microservices模块提供的内置功能来实现性能监控。然而,如果你想要更详细的性能监控,你可能需要使用第三方库,比如prometheus-clientopencensus

这里是一个使用prometheus-client的例子:

首先,你需要安装prometheus-client

npm install prometheus-client

然后,在你的应用程序中创建一个Prometheus实例,并设置一些基本的中间件:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import * as Prometheus from 'prom-client';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  // 创建一个Prometheus的CollectorRegistry实例
  const register = new Prometheus.Registry();

  // 注册一个计数器
  const counter = new Prometheus.Counter({
    name: 'my_app_requests_total',
    help: 'Total number of requests to the service',
    registers: [register],
  });

  // 在每个请求之前增加计数器
  app.use(async (req, res, next) => {
    counter.inc();
    next();
  });

  // 将注册器添加到响应头
  app.use((req, res, next) => {
    res.set('X-Prometheus-Scrape-Enable', 'true');
    res.set('Content-Type', register.contentType);
    next();
  });

  // 每次请求时发送指标
  app.use(async (req, res, next) => {
    if (req.method === 'GET' && req.url === '/metrics') {
      res.set('Content-Type', register.contentType);
      res.end(await register.metrics());
    }
    next();
  });

  await app.listen(3000);
}
bootstrap();

这个例子中的代码会在每次请求时增加一个名为my_app_requests_total的计数器。此外,它还会在请求/metrics时返回当前的所有指标。

如果你想使用OpenCensus,可以参考以下步骤:

首先,安装@opencensus/nodejs@opencensus/exporter-stackdriver

npm install @opencensus/nodejs @opencensus/exporter-stackdriver

然后,在你的应用程序中初始化OpenCensus并配置Stackdriver导出器:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { registerInstrumentations } from '@opencensus/web-auto-instrumentations';
import { StackdriverTraceExporter } from '@opencensus/exporter-stackdriver';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  // 初始化OpenCensus
  registerInstrumentations({
    instrumentations: [
      new @opencensus/nodejs.instrumentation.http.HttpInstrumentation(),
      new @opencensus/nodejs.instrumentation.grpc.GrpcInstrumentation(),
    ],
  });

  // 配置Stackdriver导出器
  const exporter = new StackdriverTraceExporter({ projectId: 'your-project-id' });
  const tracer = globalThis.opencensus.trace.getTracer('your-tracer-name');
  tracer.setExporters([exporter]);

  await app.listen(3000);
}
bootstrap();

以上代码会自动为HTTP请求和gRPC调用创建跟踪信息,并将这些信息发送到Stackdriver。请确保替换your-project-idyour-tracer-name为你自己的值。


3 回复

当然,NestJS中使用@nestjs/microservices模块中的Metrics可以非常有效地进行性能监控。首先,你需要安装@nestjs/metrics包:

npm install @nestjs/metrics

接着,在你的模块文件中导入MetricsModule

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { MetricsModule } from '@nestjs/metrics';

@Module({
  imports: [MetricsModule],
  controllers: [AppController],
})
export class AppModule {}

然后,你可以在控制器或服务中注入MetricsService来记录和查询指标:

import { Controller, Get } from '@nestjs/common';
import { MetricsService } from '@nestjs/metrics';

@Controller()
export class AppController {
  constructor(private readonly metricsService: MetricsService) {}

  @Get('ping')
  ping() {
    this.metricsService.counter('api_requests_total').inc();
    return 'pong';
  }
}

这样,每当访问/ping时,api_requests_total计数器就会增加。你可以通过Prometheus等工具来抓取这些指标,进行更深入的分析。希望这能帮到你!


NestJS提供了多种方式来集成性能监控工具,其中一种常见的做法是使用@nestjs/microservices模块与Prometheus结合,以实现性能监控。这里我将向您展示如何设置一个简单的Prometheus监控系统,用于监控NestJS应用的性能。

1. 安装依赖

首先,您需要安装必要的库:

npm install @nestjs/microservices @promster/express prom-client

2. 配置Prometheus

接下来,配置您的应用程序以支持Prometheus监控。这通常涉及到在应用启动时创建一个HTTP服务器来暴露指标。

import { NestFactory } from '@nestjs/core';
import { MicroserviceOptions, Transport } from '@nestjs/microservices';
import * as Koa from 'koa';
import * as mount from 'koa-mount';
import * as Router from 'koa-router';
import * as PromClient from 'prom-client';

// 初始化Prometheus客户端
const register = new PromClient.Registry();

PromClient.collectDefaultMetrics({ register });

const app = new Koa();
const router = new Router();

router.get('/metrics', async ctx => {
  ctx.body = await register.metrics();
});

app.use(mount('/metrics', router));

async function bootstrap() {
  const app = await NestFactory.createApplicationContext(AppModule);
  await app.listen(3000);

  // 启动Koa服务器
  app.listen(3001, () => {
    console.log('Application is running on: http://localhost:3001');
  });
}

bootstrap();

3. 集成到NestJS服务中

为了让NestJS更好地与Prometheus集成,您可以创建一个微服务模块,该模块监听特定的消息以收集性能数据并暴露给Prometheus。

import { Injectable } from '@nestjs/common';
import { Client, ClientGrpc } from '@nestjs/microservices';
import { Observable } from 'rxjs';

@Injectable()
export class MetricsService {
  @Client({
    transport: Transport.GRPC,
    options: {
      package: 'metrics',
      proto: 'metrics.proto',
      url: 'localhost:50051',
    },
  })
  private client: ClientGrpc;

  public getMetricsStream(): Observable<any> {
    return this.client.send('getMetrics', {});
  }
}

以上代码示例展示了如何开始在NestJS项目中集成Prometheus进行性能监控。根据您的具体需求,您可能还需要调整和扩展这个基础设置。希望这对您有所帮助!

在NestJS中使用Metrics进行性能监控,通常会结合使用如Prometheus等工具。首先,你需要安装相应的库,例如@willsoto/nestjs-prometheus。接着,在你的项目中配置并注册这个模块。你可以创建一个服务来记录和暴露指标。例如,使用装饰器或直接在代码中增加计时逻辑来测量函数执行时间,并将结果报告给Prometheus。最后,确保你的应用能够暴露这些指标,以便监控系统抓取。这只是一个大致步骤,具体实现取决于你的需求和环境。

回到顶部