[nodejs] Fastify와 모니터링 및 로깅 통합

Fastify는 빠르고 효율적인 웹 프레임워크로, Node.js 기반의 웹 애플리케이션을 빌드하고 실행하는 데 사용됩니다. Fastify는 높은 성능과 낮은 오버헤드를 제공하여 빠른 응답 속도를 보장합니다. 하지만, 프로덕션 환경에서는 애플리케이션의 모니터링과 로깅이 중요한 문제가 됩니다.

이번 블로그 포스트에서는 Fastify 애플리케이션에 모니터링 및 로깅을 통합하는 방법에 대해 알아보겠습니다.

모니터링 통합

Fastify 애플리케이션에 모니터링을 통합하려면 Prometheus와 Grafana를 사용하는 것이 좋습니다.

  1. Prometheus: Fastify 애플리케이션에서 메트릭을 수집하는 인기있는 오픈 소스 시스템입니다.
    const fastify = require('fastify')();
    const client = require('prom-client');
       
    client.collectDefaultMetrics();
    fastify.addHook('onRequest', (request, reply, done) => {
        request.start = process.hrtime();
        done();
    });
    fastify.addHook('onResponse', (request, reply, done) => {
        const [seconds, nanoseconds] = process.hrtime(request.start);
        const responseTimeInMs = seconds * 1e3 + nanoseconds * 1e-6;
        client.summary.observe({ method: request.method, route: request.url, status: reply.statusCode }, responseTimeInMs);
        done();
    });
       
    fastify.get('/metrics', async (request, reply) => {
        reply.header('Content-Type', client.register.contentType);
        return client.register.metrics();
    });
    fastify.listen(3000);
    
  2. Grafana: Prometheus에서 수집된 데이터를 시각화하고 모니터링하는 오픈 소스 툴이며, 강력한 대시보드와 플러그인을 제공합니다.

로깅 통합

Fastify 애플리케이션에 로깅을 통합하려면 Pino와 ELK 스택(Elasticsearch, Logstash, Kibana)를 사용할 수 있습니다.

  1. Pino: Fastify에서 기본적으로 지원하는 로깅 라이브러리로, JSON 형식의 로그를 생성하고 구조화된 로그 메시지를 제공합니다.
    const fastify = require('fastify')();
    const pino = require('pino');
       
    const logger = pino({
        level: process.env.LOG_LEVEL || 'info',
        timestamp: pino.stdTimeFunctions.isoTime
    });
       
    fastify.addHook('onRequest', (request, reply, done) => {
        logger.info({ method: request.method, url: request.url }, 'Request');
        done();
    });
       
    fastify.listen(3000);
    
  2. ELK 스택: Pino로 생성된 로그를 Elasticsearch로 보내어 저장하고, Logstash를 사용하여 데이터를 변환하고 Kibana를 통해 시각화하고 검색할 수 있습니다.

이제 Fastify 애플리케이션에 모니터링과 로깅을 통합하여 안정적이고 신뢰성 있는 서비스를 제공할 수 있습니다. Fastify와 모니터링 및 로깅 통합에 대한 자세한 정보는 아래의 참고 자료를 참고하세요.

Fastify 공식 문서

Prometheus 공식 문서

Grafana 공식 문서

Pino 공식 문서

ELK 스택 공식 문서