← 개발 로그 목록

monitoring: Promtail 설정을 통한 로그 수집 최적화

/ 6분 분량 / 개발 로그

이번 커밋은 `I hate logging`이라는 메시지로, 주로 Promtail의 설정을 변경하여 로그 수집 방식을 최적화하는 데 초점을 맞추었습니다. 불필요한 로깅 설정을 제거하고, Loki 및 Promtail의 관련 파일들을 수정하여 효율성을 높였습니다.

monitoring: Promtail 설정을 통한 로그 수집 최적화

이번 커밋은 I hate logging이라는 메시지로, 주로 Promtail의 설정을 변경하여 로그 수집 방식을 최적화하는 데 초점을 맞추었습니다. 불필요한 로깅 설정을 제거하고, Loki 및 Promtail의 관련 파일들을 수정하여 효율성을 높였습니다.

요약

이번 커밋은 Promtail의 config.yml 파일에서 불필요한 JSON 파싱 설정을 제거하고, Loki의 loki-config.yml 파일을 수정하여 로그 수집 및 저장 방식을 개선했습니다. 또한, Promtail의 positions.yaml 파일에 새로운 로그 파일 경로들을 추가하여 로그 추적 범위를 확장했습니다. 총 63 라인이 추가되었고 33 라인이 삭제되었습니다. 작업은 2026년 2월 8일에 이루어졌습니다.

배경 및 목적

기존 Promtail 설정에는 LearningCollector_logs 스크랩 설정 내에 level, event, component 외에 api 필드를 JSON으로 파싱하려는 시도가 있었습니다. 하지만 실제 로그에는 api 필드가 존재하지 않아 불필요한 처리가 발생하고 있었습니다. 또한, Loki의 기본 설정 또한 일부 수정이 필요했습니다. 이러한 비효율성을 제거하고, 로그 수집의 정확성과 안정성을 높이는 것이 목적입니다.

구현 내용

이번 작업에서는 다음과 같은 파일들이 수정되었습니다.

  • config/loki/loki-config.yml: Loki 서버의 설정을 변경했습니다. ingester 섹션에 WAL(Write-Ahead Log) 기능을 활성화하고 관련 디렉토리를 설정했으며, storage_config 섹션에 tsdb_shipper와 filesystem 설정을 추가했습니다. 또한, 기존에 common 및 memberlist 섹션에 있던 중복되거나 불필요한 설정들을 제거했습니다.
  • config/promtail/config.yml: Promtail의 로그 수집 설정을 변경했습니다. LearningCollector_logs 스크랩 설정에서 pipeline_stages의 json 파싱 부분에 api 필드를 제거했습니다. 이는 api 필드가 실제 로그에 존재하지 않아 오류를 유발하거나 불필요한 처리를 하는 것을 방지하기 위함입니다.
  • volumes/promtail-positions/positions.yaml: Promtail이 로그 파일의 현재 위치를 기록하는 파일입니다. 이 파일에 LearningCollector 관련 로그 파일(promtail_feed.jsonl) 뿐만 아니라, 다른 로그 파일들 (syslog, trivy 관련 로그 등)에 대한 위치 정보가 추가되었습니다. (이는 기존에 promtail-positions 디렉토리에 존재하던 .positions.yaml 파일들을 통합하고 최신화하는 과정으로 보입니다.)

총 63 라인이 추가되었고, 33 라인이 삭제되었습니다.

기술적 의사결정

이번 변경에서 눈에 띄는 기술적 의사결정은 config/promtail/config.yml 파일의 LearningCollector_logs 스크랩 설정에서 api 필드를 JSON 파싱에서 제외한 것입니다.

  • 선택: api 필드에 대한 JSON 파싱 설정을 제거했습니다.
  • 이유: 해당 필드가 실제 로그 데이터에 존재하지 않아, Promtail이 로그를 처리하는 과정에서 불필요한 작업을 수행하거나 오류를 발생시킬 가능성이 있었습니다. 로그 수집의 효율성과 정확성을 높이기 위해 이 설정은 제거하는 것이 합리적이었습니다.
  • 대안:
    1. api 필드를 계속 파싱하도록 두는 것: 이는 불필요한 리소스 낭비와 잠재적인 오류를 야기할 수 있어 선택하지 않았습니다.
    2. api 필드를 파싱하지만, 오류를 무시하도록 설정하는 것: 이 역시 근본적인 해결책은 아니며, 로그 자체의 정확성을 저해할 수 있습니다.
  • 장단점 분석:
    • 장점: 불필요한 JSON 파싱 작업 제거로 Promtail의 CPU 사용량 감소 및 처리 속도 향상, 로그 처리 오류 가능성 감소, 설정의 간결성 증대.
    • 단점: 특별히 눈에 띄는 단점은 없습니다. 오히려 제거함으로서 얻는 이득이 더 큽니다.

또한, config/loki/loki-config.yml 파일에서 WAL(Write-Ahead Log) 기능을 활성화한 것은 데이터 안정성 확보를 위한 중요한 결정입니다. WAL은 데이터가 디스크에 완전히 기록되기 전에 로그 파일에 먼저 기록하여, 예기치 않은 시스템 종료 시에도 데이터 손실을 최소화하는 역할을 합니다.

배운 점 및 개선점

이번 작업을 통해 Promtail의 pipeline_stages 설정을 세밀하게 조정하는 것의 중요성을 다시 한번 느꼈습니다. 로그 데이터의 실제 구조와 설정이 일치하지 않으면 불필요한 오버헤드가 발생할 수 있다는 것을 배웠습니다.

앞으로 개선할 점으로는 다음과 같은 사항들을 고려할 수 있습니다.

  • 로그 구조화 표준화: LearningCollector 애플리케이션 레벨에서 로그 구조를 표준화하여, Promtail 설정 변경의 빈도를 줄이고자 노력할 수 있습니다.
  • 모니터링 대시보드 연동: Promtail 및 Loki의 상태를 시각적으로 확인할 수 있는 대시보드를 구축하여, 설정 변경 후 성능 변화를 즉각적으로 파악할 수 있도록 개선할 수 있습니다.

다음 단계로는, 현재 설정된 로그 수집 항목들이 실제 운영 환경에서 효율적으로 작동하는지 모니터링하고, 필요하다면 추가적인 최적화 작업을 진행할 계획입니다.

참고 자료