← 개발 로그 목록

monitoring: Promtail 설정 업데이트로 백엔드 및 프론트엔드 로그 수집

/ 11분 분량 / 개발 로그

Promtail 설정을 업데이트하여 백엔드와 프론트엔드 애플리케이션의 로그 수집을 보다 체계적으로 관리하고, 로그 파싱을 위한 파이프라인을 추가했습니다.

monitoring: Promtail 설정 업데이트로 백엔드 및 프론트엔드 로그 수집 강화

Promtail 설정을 업데이트하여 백엔드와 프론트엔드 애플리케이션의 로그 수집을 보다 체계적으로 관리하고, 로그 파싱을 위한 파이프라인을 추가했습니다.

요약

이번 커밋에서는 Promtail 설정 파일(config/promtail/config.yml)을 수정하여 백엔드와 프론트엔드 애플리케이션의 로그 수집 방식을 개선했습니다. 기존에는 PM2를 통해 관리되는 블로그 로그와 Python 코드 실행 로그를 개별적으로 수집했다면, 이제는 blog-backend와 blog-frontend라는 더 명확한 잡(job) 이름으로 분리하여 로그를 관리합니다. 특히 프론트엔드 로그에는 타임스탬프 파싱을 위한 파이프라인 스테이지를 추가하여 로그의 시간 정보를 정확하게 추출하도록 했습니다. 또한, LearningCollector 애플리케이션의 로그 수집 설정도 업데이트되었습니다. 총 30라인이 추가되고 10라인이 삭제되어 설정 파일의 내용이 확장되었습니다. 이 작업은 2026년 2월 8일에 이루어졌습니다.

배경 및 목적

기존 Promtail 설정은 PM2에서 관리되는 블로그 로그와 Python 코드 실행 로그를 통합하여 수집하는 방식이었습니다. 하지만 애플리케이션의 규모가 커지고 구조가 복잡해짐에 따라, 백엔드와 프론트엔드의 로그를 명확하게 구분하고 각기 다른 특성에 맞는 처리가 필요해졌습니다. 특히, 프론트엔드 로그의 경우 단순히 파일 경로를 지정하는 것을 넘어, 로그 자체에 포함된 타임스탬프를 파싱하여 정확한 수집 시간을 기록하는 것이 중요했습니다. 이러한 필요성 때문에 Promtail 설정을 업데이트하여 로그 수집의 정확성과 관리 효율성을 높이고자 했습니다.

구현 내용

이번 커밋에서는 config/promtail/config.yml 파일이 주요 변경 대상입니다.

변경된 파일 목록:

  • config/promtail/config.yml

변경 규모:

  • 총 추가 라인 수: 30
  • 총 삭제 라인 수: 10

주요 변경사항 상세 설명:

  1. 백엔드 및 프론트엔드 로그 분리:

    • 기존의 blog_pm2_logs 잡은 blog-backend와 blog-frontend로 분리되었습니다.
    • blog-backend 잡은 /home/user/my-blog/backend/logs/*.log 경로의 로그를 수집하며, job: blog, app: backend 레이블이 추가되었습니다.
    • blog-frontend 잡은 /home/user/my-blog/frontend/logs/*.log 경로의 로그를 수집하며, job: blog, app: frontend 레이블이 추가되었습니다.
  2. 프론트엔드 로그 타임스탬프 파싱 추가:

    • blog-frontend 잡에 pipeline_stages가 추가되었습니다.
    • regex 스테이지를 사용하여 로그 라인의 시작 부분에 있는 타임스탬프 (YYYY-MM-DD HH:MM:SS +/-ZZZZ)와 실제 로그 내용을 분리합니다.
    • timestamp 스테이지에서 추출된 타임스탬프를 "2006-01-02 15:04:05 -0700" 형식으로 파싱하여 Promtail이 인식할 수 있도록 합니다.
    • output 스테이지를 통해 파싱된 타임스탬프를 제외한 나머지 로그 내용(content)만을 최종적으로 Promtail에 전달합니다.
  3. LearningCollector 로그 수집 설정 업데이트:

    • python_logs 잡 이름이 LearningCollector_logs로 변경되었습니다.
    • 로그 수집 경로가 /var/log/python/*.log에서 /home/jcw/LearningCollector_v1.0/log/promtail_feed.jsonl로 변경되었습니다.
    • 레이블도 job: python_code에서 job: LearningCollector로 변경되었습니다.

핵심 코드 설명 (Promtail 설정 파일 일부):

scrape_configs:
  # 백엔드 로그
  - job_name: blog-backend
    static_configs:
      - targets: [localhost]
        labels:
          job: blog
          app: backend
          __path__: /home/user/my-blog/backend/logs/*.log

  # 프론트엔드 로그
  - job_name: blog-frontend
    static_configs:
      - targets: [localhost]
        labels:
          job: blog
          app: frontend
          __path__: /home/user/my-blog/frontend/logs/*.log

    pipeline_stages:
      - regex:
          expression: '^(?P<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} [+-]\d{4}) \| (?P<content>.*)'
      - timestamp:
          source: timestamp
          format: "2006-01-02 15:04:05 -0700"
      - output:
          source: content

  # LearningCollector 코드 실행 로그 수집
  - job_name: LearningCollector_logs
    static_configs:
      - targets:
          - localhost
        labels:
          job: LearningCollector
          __path__: __path__: /home/jcw/LearningCollector_v1.0/log/promtail_feed.jsonl

기술적 의사결정

이번 업데이트에서 가장 중요한 기술적 결정은 프론트엔드 로그에 대한 파이프라인 스테이지를 도입한 것입니다.

  • 선택 기술/라이브러리: Promtail의 pipeline_stages 기능. 구체적으로는 regex, timestamp, output 스테이지를 활용했습니다.

  • 선택 이유:

    • 정확한 타임스탬프 기록: 기본적으로 Promtail은 로그 파일에 기록되는 시간을 수집 시간으로 사용하지만, 로그 자체에 포함된 타임스탬프를 파싱하여 사용할 경우 훨씬 더 정확한 시간 정보를 확보할 수 있습니다. 이는 로그 분석 시 시간 기반 필터링이나 이벤트 상관 관계 분석에 매우 중요합니다.
    • 유연한 로그 형식 처리: 프론트엔드 로그가 특정 형식의 타임스탬프를 포함하고 있다면, 이를 Promtail이 이해할 수 있는 표준 형식으로 변환하는 것이 필요했습니다. regex와 timestamp 스테이지는 이러한 요구사항을 충족하는 데 최적화되어 있습니다.
    • 가독성 및 관리 용이성: 로그의 불필요한 부분을 제거하고 필요한 정보만 추출함으로써 로그 데이터의 크기를 줄이고 분석의 효율성을 높일 수 있습니다.
  • 다른 대안과 비교:

    • 로그 포맷 변경: 프론트엔드 애플리케이션 자체에서 로그 포맷을 변경하여 타임스탬프를 표준화하는 방안도 고려할 수 있었습니다. 하지만 이는 애플리케이션 코드 수정이 필요하므로, 인프라 설정만으로 해결할 수 있는 Promtail 파이프라인을 우선적으로 선택했습니다.
    • 추가적인 로그 수집 에이전트 사용: Fluentd나 Logstash와 같은 더 복잡한 로그 수집 에이전트를 사용하는 방안도 있었습니다. 하지만 현재 모니터링 스택에서 Promtail을 사용하고 있고, Promtail의 파이프라인 기능만으로도 요구사항을 충분히 만족시킬 수 있었기 때문에, 기존 스택을 유지하는 것이 더 효율적이라고 판단했습니다.
  • 장단점 분석:

    • 장점:
      • 로그의 시간 정확성 향상.
      • Promtail 설정만으로 유연한 로그 처리 가능.
      • 기존 모니터링 스택과의 호환성 유지.
    • 단점:
      • regex 표현식이 복잡해질 경우 설정 관리가 어려워질 수 있음.
      • 파이프라인 스테이지가 많아질수록 Promtail의 리소스 사용량이 약간 증가할 수 있음.

배운 점 및 개선점

이번 작업을 통해 Promtail의 강력한 로그 처리 파이프라인 기능을 실제로 활용해볼 수 있었습니다. 특히, regex를 이용한 로그 파싱은 다양한 로그 포맷에 유연하게 대처할 수 있다는 것을 다시 한번 느꼈습니다.

  • 배운 점:

    • Promtail의 pipeline_stages는 단순한 로그 수집을 넘어, 로그 데이터를 가공하고 표준화하는 데 매우 유용한 도구입니다.
    • regex 패턴 작성 능력이 로그 파싱의 성패를 좌우할 수 있습니다.
    • 애플리케이션의 로그 출력 방식에 따라 Promtail 설정을 최적화하는 것이 중요합니다.
  • 개선점:

    • regex 패턴이 다소 복잡하게 느껴질 수 있습니다. 앞으로 더욱 복잡한 로그를 다룰 때를 대비하여 regex 학습을 꾸준히 해야겠습니다.
    • 프론트엔드 로그 외 다른 애플리케이션 로그에도 필요에 따라 파이프라인 스테이지를 적용하여 데이터의 품질을 높일 수 있는지 검토해볼 필요가 있습니다.
  • 다음 단계 계획:

    • 변경된 Promtail 설정을 실제 운영 환경에 적용하고, 백엔드 및 프론트엔드 로그가 정상적으로 수집 및 파싱되는지 지속적으로 모니터링할 예정입니다.
    • LearningCollector의 로그 수집 경로가 변경되었으므로, 해당 경로에 로그가 제대로 기록되고 있는지 확인하는 작업도 병행할 것입니다.

참고 자료