[nodejs] Fastify와 모니터링 및 로깅 통합
Fastify는 빠르고 효율적인 웹 프레임워크로, Node.js 기반의 웹 애플리케이션을 빌드하고 실행하는 데 사용됩니다. Fastify는 높은 성능과 낮은 오버헤드를 제공하여 빠른 응답 속도를 보장합니다. 하지만, 프로덕션 환경에서는 애플리케이션의 모니터링과 로깅이 중요한 문제가 됩니다.
이번 블로그 포스트에서는 Fastify 애플리케이션에 모니터링 및 로깅을 통합하는 방법에 대해 알아보겠습니다.
모니터링 통합
Fastify 애플리케이션에 모니터링을 통합하려면 Prometheus와 Grafana를 사용하는 것이 좋습니다.
- 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);
- Grafana: Prometheus에서 수집된 데이터를 시각화하고 모니터링하는 오픈 소스 툴이며, 강력한 대시보드와 플러그인을 제공합니다.
로깅 통합
Fastify 애플리케이션에 로깅을 통합하려면 Pino와 ELK 스택(Elasticsearch, Logstash, Kibana)를 사용할 수 있습니다.
- 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);
- ELK 스택: Pino로 생성된 로그를 Elasticsearch로 보내어 저장하고, Logstash를 사용하여 데이터를 변환하고 Kibana를 통해 시각화하고 검색할 수 있습니다.
이제 Fastify 애플리케이션에 모니터링과 로깅을 통합하여 안정적이고 신뢰성 있는 서비스를 제공할 수 있습니다. Fastify와 모니터링 및 로깅 통합에 대한 자세한 정보는 아래의 참고 자료를 참고하세요.