Docker Compose Loki Logging 시스템 구축 완벽 가이드! Container 로그 중앙 관리 방법 알아보기

Production 환경에서는 서버 상태뿐만 아니라 로그 관리가 매우 중요합니다.

서비스 장애가 발생했을 때 가장 먼저 확인하는 데이터가 바로 Log입니다.

기존 방식:

Container 1

↓

docker logs 확인


Container 2

↓

docker logs 확인

문제:

  • Container가 많아지면 관리 어려움
  • 여러 서버 로그 확인 불편
  • 장애 원인 분석 시간 증가

대규모 환경에서는 로그를 중앙으로 수집하고 검색할 수 있는 Logging 시스템이 필요합니다.

구조:

Application Container

↓

Log Collector

↓

Loki

↓

Grafana

↓

검색 및 분석

Loki는 Grafana 생태계에서 사용하는 로그 수집 시스템으로 Container 환경과 잘 연결됩니다.

이번 글에서는 Docker Compose Loki 구성부터 Promtail 연결, Grafana 로그 조회, Container 로그 중앙화, Production Logging 운영 전략까지 알아보겠습니다.

Loki란 무엇인가?

Loki는 Grafana Labs에서 개발한 로그 관리 시스템입니다.

주요 특징:

  • Container Log 수집
  • 빠른 검색
  • Grafana 연동
  • Kubernetes 친화적 구조

기존 Log 시스템:

Log 저장

↓

전체 내용 검색

Loki:

Log Label 기반 검색

↓

필요한 데이터 조회

Logging과 Monitoring 차이

Monitoring:

CPU 90%

Memory 80%

현재 상태 확인

Logging:

Error 발생

Database Connection Failed

Payment Error

문제 원인 분석

구조:

Metrics

↓

현재 상태


Logs

↓

원인 분석

Docker Compose Loki Logging 구조

전체 구조:

Container

↓

Promtail

↓

Loki

↓

Grafana

역할:

Application:

로그 생성

Promtail:

로그 수집

Loki:

로그 저장

Grafana:

로그 검색 및 시각화

Docker Compose Loki 구성

docker-compose.yml:

services:

  loki:

    image: grafana/loki:latest

    ports:

      - "3100:3100"

    volumes:

      - ./loki-config.yml:/etc/loki/local-config.yaml

실행:

docker compose up -d

확인:

docker ps

결과:

loki running

Docker Compose Promtail 구성

Promtail은 Docker Container 로그를 Loki로 전달합니다.

구조:

Docker Log

↓

Promtail

↓

Loki

Compose:

promtail:

  image: grafana/promtail

  volumes:

    - /var/log:/var/log

    - /var/lib/docker/containers:/var/lib/docker/containers

역할:

  • Docker Log 감시
  • Label 추가
  • Loki 전달

Docker Compose Grafana Loki 연결

Grafana에서는 Loki를 Data Source로 추가합니다.

구조:

Grafana

↓

Loki

↓

Logs

설정:

Data Source

↓

Loki 선택

↓

URL 입력

↓

저장

Docker Network:

http://loki:3100

Docker Compose Container 로그 확인

Grafana Explore 기능을 사용합니다.

검색 예:

{container="app"}

결과:

Application Log

Error Log

Access Log

Loki Label 구조

Loki는 Label 기반으로 로그를 관리합니다.

예:

container="web"

environment="production"

service="api"

검색:

{service="api"}

특정 Service 로그만 확인 가능합니다.

Docker Compose Application Error 분석

장애 상황:

사용자 오류 증가

확인:

Grafana

↓

Loki 검색

↓

Error Log 확인

예:

Database Connection Failed

원인 파악:

Application

↓

Database

↓

Network 문제 확인

Docker Compose Access Log 관리

Web Service에서는 Access Log가 중요합니다.

수집:

  • Request URL
  • Status Code
  • Response Time
  • Client IP

구조:

Nginx

↓

Promtail

↓

Loki

↓

Grafana

활용:

  • 트래픽 분석
  • 공격 탐지
  • 장애 확인

Docker Compose Loki와 Prometheus 연동

Metrics와 Log를 함께 분석할 수 있습니다.

구조:

Prometheus

↓

Metrics


Loki

↓

Logs


↓

Grafana

예:

CPU 증가

↓

Container Log Error 확인

↓

원인 분석

Docker Compose Logging 중앙화 장점

장애 분석 속도 향상

여러 서버 로그를 한 곳에서 확인

운영 효율 증가

Container마다 접속할 필요 없음

검색 가능

키워드 기반 분석 가능

장기 보관 가능

로그 보존 정책 설정 가능

Docker Compose Loki 보안 설정

운영 환경 권장:

외부 Port 제한

Loki

↓

Private Network

Log 정보 보호

비밀번호, Token 기록 금지

Access 관리

Grafana 사용자 권한 설정

Docker Compose Loki Production 구조

실제 운영:

User

↓

Application

↓

Container Log

↓

Promtail

↓

Loki

↓

Grafana

↓

Engineer

Loki와 ELK Stack 비교

Loki:

장점:

  • 가벼움
  • Grafana 연동
  • Container 환경 적합

ELK:

장점:

  • 강력한 검색
  • 대규모 Log 분석

구조 선택:

Container 중심

↓

Loki


복잡한 Log 분석

↓

ELK

Docker Compose Loki 운영 Best Practice

추천:

  • Log 중앙화
  • Label 설계
  • 보존 기간 설정
  • Grafana 연결
  • Error Alert 연동
  • 민감 정보 제거

운영 흐름:

Log 생성

↓

수집

↓

저장

↓

검색

↓

분석

↓

장애 해결

자주 묻는 질문

Loki는 Docker Compose에서 사용할 수 있나요?

가능합니다.

Loki와 Promtail 모두 Container로 구성할 수 있습니다.

Loki와 Prometheus 차이는 무엇인가요?

Prometheus는 Metrics, Loki는 Logs 관리가 목적입니다.

Docker logs 명령어 대신 Loki를 사용해야 하나요?

운영 규모가 커질수록 중앙 Logging 시스템이 필요합니다.

Grafana가 꼭 필요한가요?

Loki만 사용할 수도 있지만 Grafana와 함께 사용하면 분석이 편리합니다.

마무리

Docker Compose Loki Logging 시스템은 Container 환경에서 발생하는 로그를 중앙 관리하기 위한 핵심 운영 기술입니다.

최종 구조:

Container

↓

Promtail

↓

Loki

↓

Grafana

↓

Log 분석

Monitoring은 “현재 문제가 있는지” 확인하고, Logging은 “왜 문제가 발생했는지” 찾는 역할을 합니다.

Production 서버 운영에서는 Metrics와 Logs를 함께 관리해야 빠른 장애 대응이 가능합니다.

다음 글에서는 Microservice 요청 흐름을 추적하는 Docker Compose Jaeger Distributed Tracing 구성 방법을 알아보겠습니다.

댓글 남기기