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 구성 방법을 알아보겠습니다.