monitoring: Loki 분산 모드 설정 오류 해결 및 단일 프로세스 모드 구성
/ 7분 분량 / 개발 로그
이번 커밋에서는 Grafana Loki 3.6.4 버전에서 발생하던 분산 모드 설정 오류를 해결하고, 외부 의존성 없이 단일 프로세스로 실행할 수 있도록 구성을 변경했습니다.
monitoring: Loki 분산 모드 설정 오류 해결 및 단일 프로세스 모드 구성
이번 커밋에서는 Grafana Loki 3.6.4 버전에서 발생하던 분산 모드 설정 오류를 해결하고, 외부 의존성 없이 단일 프로세스로 실행할 수 있도록 구성을 변경했습니다.
요약
- 주요 변경사항: Loki의 분산 모드 설정에서 Consul에 연결 시 발생하는 연결 거부 오류를 해결했습니다.
- 작업 날짜: 2026년 2월 5일
- 전체적인 맥락: 현재 모니터링 스택을 구축하는 과정에서 Loki를 설정하던 중, 기본적으로 활성화되는 분산 모드가 로컬 개발 환경이나 간단한 배포 시 불필요한 의존성(Consul)을 요구하며 오류를 발생시키는 문제를 발견했습니다.
배경 및 목적
왜 이 작업이 필요했는지
Grafana Loki 3.6.4 버전을 설치하고 실행하는 과정에서, 분산 모드 설정이 기본적으로 Consul(localhost:8500)에 연결을 시도하도록 되어 있었습니다. 하지만 해당 환경에서는 Consul이 실행되고 있지 않았기 때문에, "connection refused" 오류가 발생하며 Loki가 정상적으로 시작되지 못했습니다.
해결하려는 문제
- Loki가 분산 모드 설정으로 인해 Consul에 연결하려다 발생하는 오류
- 불필요한 외부 의존성(Consul) 없이 Loki를 쉽게 설정하고 실행할 수 있도록 하는 것
목표
- Loki가 Consul에 연결을 시도하지 않도록 구성하여 시작 오류를 해결
- 단일 프로세스(standalone) 모드로 Loki를 구성하여 외부 의존성을 제거
- 최신 Grafana Loki 버전과의 호환성을 유지하면서 간단한 배포 환경에서도 정상 작동하도록 함
구현 내용
주요 변경사항 상세 설명
기존 Loki 설정 파일(config/loki/loki-config.yml)에서 분산 모드 관련 설정을 수정하여, Consul 대신 인메모리(inmemory) 스토어를 사용하도록 변경했습니다. 또한, memberlist 설정을 추가하여 분산 디스커버리 기능을 비활성화했습니다.
변경된 파일 목록
config/loki/loki-config.yml
추가/삭제된 코드 라인 수
- 총 추가된 코드 라인 수: 6
- 총 삭제된 코드 라인 수: 0
핵심 코드 설명
config/loki/loki-config.yml 파일의 storage_config 섹션 하단에 다음과 같은 설정이 추가되었습니다.
ring:
kvstore:
store: inmemory
memberlist:
node_name: loki-standalone
ring.kvstore.store: inmemory: 기존에 Consul을 사용하던 링(ring)의 키-값 스토어를 인메모리 스토어로 변경합니다. 이는 Consul과 같은 외부 서비스 없이도 Loki 내부적으로 상태를 관리할 수 있게 해줍니다.memberlist.node_name: loki-standalone:memberlist설정을 명시적으로 지정하고node_name을 부여함으로써, 분산 환경에서의 노드 탐색 및 참여 기능을 비활성화합니다.
이 설정을 통해 Loki는 더 이상 Consul 서버를 찾거나 연결하려고 시도하지 않으며, 단일 프로세스로서 독립적으로 실행될 수 있게 됩니다.
기술적 의사결정
어떤 기술/라이브러리를 선택했는지
- 선택: Loki 설정 파일에서
ring.kvstore.store를inmemory로 변경하고,memberlist설정을 추가하여node_name을 지정하는 방식
왜 그 선택을 했는지
- 문제 해결: 기존 Consul 연결 시 발생하는 "connection refused" 오류를 근본적으로 해결하기 위함입니다.
- 단순화: 복잡한 분산 시스템 설정 없이, 로컬 개발이나 간단한 배포 환경에서 Loki를 쉽게 실행할 수 있도록 합니다.
- Grafana Loki 공식 지원:
inmemory스토어 및memberlist설정을 통한 단일 프로세스 모드는 Grafana Loki에서 공식적으로 지원하는 구성 옵션 중 하나입니다.
다른 대안과 비교
- Consul 설치 및 설정: 가장 직접적인 해결책이지만, 로컬 개발 환경이나 테스트 환경에서 Consul을 별도로 설치하고 관리하는 것은 번거롭습니다. 또한, 실제 운영 환경이 아닌 이상 과도한 설정입니다.
- Loki 버전 다운그레이드: 이전 버전에서는 분산 모드 설정이 다를 수 있습니다. 하지만 최신 버전의 기능을 활용하고 싶으므로 다운그레이드는 최선의 선택이 아닙니다.
장단점 분석
inmemory및memberlist설정 (선택된 방식)- 장점:
- 매우 간단하게 설정 가능
- 외부 의존성 없음 (Consul 불필요)
- 로컬 개발 및 테스트 환경에 최적화
- 빠른 시작 시간
- 단점:
- 인메모리 데이터는 서버 재시작 시 사라지므로, 영구적인 데이터 저장이 필요하면 적합하지 않음 (하지만 이는
storage_config의filesystem백엔드로 해결됩니다.) - 고가용성이나 확장성이 중요한 프로덕션 환경에는 부적합 (이 경우 Consul 기반의 분산 모드를 사용해야 함)
- 인메모리 데이터는 서버 재시작 시 사라지므로, 영구적인 데이터 저장이 필요하면 적합하지 않음 (하지만 이는
- 장점:
배운 점 및 개선점
이번 작업을 통해 배운 것
- Loki의 분산 모드 설정이 Consul과 같은 외부 서비스를 필요로 한다는 점
ring.kvstore및memberlist설정을 통해 Loki를 단일 프로세스 모드로 구성할 수 있다는 점- 에러 메시지("connection refused")를 통해 문제의 원인(네트워크 연결 실패)을 빠르게 파악하고, 설정 파일의 해당 부분을 점검하는 중요성
앞으로 개선할 점
- 현재 설정은 단일 프로세스 모드이므로, 데이터 영속성을 위해
storage_config의filesystem백엔드가 올바르게 설정되었는지 재확인해야 합니다. (패치 내용에storage_config자체는 변경되지 않았으므로, 이미 설정되어 있을 것으로 예상되지만 확인이 필요합니다.) - 실제 운영 환경으로 배포할 때는 요구사항에 맞춰 Consul을 사용하는 분산 모드 설정으로 변경하는 것을 고려해야 합니다.
다음 단계 계획
- Loki의 로그 수집 및 저장 기능이 정상적으로 작동하는지 테스트
- 다른 모니터링 구성 요소(Prometheus, Grafana 등)와의 연동 확인
참고 자료
- Grafana Loki 공식 문서 (관련 설정 항목 참고)
- (https://claude.ai/code/session_01H9j5sAZzq4npUeQcebvAeM) - 커밋에 포함된 링크