← 개발 로그 목록

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에서 공식적으로 지원하는 구성 옵션 중 하나입니다.

다른 대안과 비교

  1. Consul 설치 및 설정: 가장 직접적인 해결책이지만, 로컬 개발 환경이나 테스트 환경에서 Consul을 별도로 설치하고 관리하는 것은 번거롭습니다. 또한, 실제 운영 환경이 아닌 이상 과도한 설정입니다.
  2. 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 등)와의 연동 확인

참고 자료