[typescript] CI/CD 파이프라인에 대한 모니터링과 로그 관리 방법

CI/CD(Continuous Integration/Continuous Deployment) 파이프라인은 소프트웨어 개발 및 배포 프로세스를 자동화하고 가속화하는 데 중요한 도구입니다. 그러나 이러한 파이프라인에서 발생하는 로그 및 모니터링 데이터를 효과적으로 관리하는 것은 매우 중요합니다. 이 문서에서는 Typescript 프로젝트의 CI/CD 파이프라인에서 모니터링과 로그 관리를 수행하는 방법에 대해 알아보겠습니다.

1. 모니터링

CI/CD 파이프라인을 통해 빌드, 테스트 및 배포가 이루어지는 동안 시스템의 상태 및 성능을 모니터링해야 합니다. 이를 위해 다음 단계를 따를 수 있습니다.

1.1. 모니터링 도구 선택

1.2. 모니터링 설정

프로젝트에 맞는 모니터링 도구를 선택하고, 해당 도구를 CI/CD 파이프라인에서 데이터를 수집할 수 있도록 설정합니다.

예시로, Prometheus를 사용한다고 가정하고, 다음 단계를 따릅니다.

// prometheus.ts

const prometheus = require('prom-client');

const collectDefaultMetrics = () => {
  prometheus.collectDefaultMetrics();
};

const httpRequestDurationMicroseconds = () => {
  const httpRequestDurationMicroseconds = new prometheus.Histogram({
    name: 'http_request_duration_seconds',
    help: 'Duration of HTTP requests in microseconds',
    labelNames: ['method', 'route', 'code'],
    buckets: [0.1, 5, 15, 50, 100, 500]
  });
  return httpRequestDurationMicroseconds;
};

module.exports = {
  prometheus,
  collectDefaultMetrics,
  httpRequestDurationMicroseconds
};

2. 로그 관리

CI/CD 파이프라인에서 발생하는 로그를 관리하려면 다음 단계를 따를 수 있습니다.

2.1. 로그 수집 및 분석

2.2. 로그 구조화 및 저장

로그를 구조화하여 중앙 집중식 저장소에 저장하는 것이 중요합니다. JSON 또는 사용자가 읽기 쉬운 형식으로 로그를 저장하는 것이 좋습니다.

예시로, Winston과 같은 로깅 라이브러리를 사용하여 로그를 구조화할 수 있습니다.

// logger.ts

import winston from 'winston';

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  defaultMeta: { service: 'your-service-name' },
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' })
  ]
});

export default logger;

결론

CI/CD 파이프라인에서 모니터링과 로그 관리는 소프트웨어의 안정성과 성능을 유지하는 데 중요합니다. 적절한 도구를 선택하고 설정하여 파이프라인에서 발생하는 데이터를 효과적으로 관리함으로써 안정적인 배포 및 운영을 할 수 있습니다.

이상으로 새로운 프로젝트에 CI/CD 파이프라인을 구축할 때 모니터링 및 로그 관리 방법에 대해 알아보았습니다.