Skip to Content
프로젝트Observability APM 시스템

LGTM (Loki + Grafana + Tempo + Mimir) 스택을 활용한 Observability 도입

프로젝트 개요

수행기간: 2025.05 ~ 현재 (1개월, 진행 중)

trace1trace2service-maplog

위 이미지는 PoC 환경에서 LGTM 스택을 활용하여 수집한 분산 트랜잭션 추적, 서비스 맵, 로그 집계 화면입니다.

서비스의 안정성과 장애 대응 시간을 줄이기 위해 APM(Application Performance Monitoring)을 도입하고자 하였습니다. 특히, 다음과 같은 관점에서 관측 도구가 필요했습니다:

  • 분산 트랜잭션 추적 (Distributed Tracing)
  • 서비스별 메트릭 수집 및 알람 설정
  • 구조화된 로그 집계 및 검색
  • 경량 운영 및 확장성 고려

현재 개발 서버에 직접 Docker Compose로 LGTM(otel-lgtm) 스택을 배포하여 PoC 환경을 구축하였습니다.

도입 고려 스택

스택구성 요소 / 설명
Sentry에러 추적 및 사용자 행동 분석에 특화된 SaaS
SigNozOpenTelemetry 기반의 통합 관측 도구 (ClickHouse 단일 저장소)
LGTMLoki + Grafana + Tempo + Mimir 로 구성된 분산형 Observability 스택

최종선택: LGTM 스택 (Loki + Grafana + Tempo + Mimir)

선택 이유

항목이유
OpenTelemetry 완전 호환OTLP 기반의 trace, metrics, logs 를 gRPC/HTTP 로 수집
컴포넌트별 저장소 분리Logs(Loki), Traces(Tempo), Metrics(Mimir) → 운영 상 분리 가능
수평 확장성 용이각 컴포넌트가 독립적으로 배포 및 확장 가능
메트릭 스토리지의 확장성Mimir는 Cortex 기반으로 Prometheus 대비 대규모 운영에 강함
가시성과 대시보드 강력함Grafana 연동을 통해 시각화 및 경고 설정에 유리
구성 유연성예: Loki 대신 Elasticsearch, Tempo 대신 Jaeger 등 교체 가능
팀 내 Grafana 사용기존 Grafana 사용 경험(일부 애플리케이션, SMS)을 활용하여 빠른 도입 가능성
PoC 용이성grafana/otel-lgtm 컨테이너 이미지를 활용해 쉽고 빠르게 PoC 환경 구축 가능

다른 대안과 비교

SigNoz

  • 장점: 통합된 단일 UI와 설정 편의성, ClickHouse 기반 고성능 쿼리
  • 단점: 모든 데이터(logs, traces, metrics)를 ClickHouse 단일 스토리지에 저장
  • 운영 중 IO 병목이나 디스크 설계의 유연성이 부족
  • 스토리지별 성격(예: trace vs log vs metrics)에 맞게 최적화하기 어려움

Sentry

  • 장점: 프론트엔드 중심의 에러 추적, 사용자 컨텍스트 연계에 강함
  • 단점: 서버 사이드 APM 목적에는 제한적, logs/metrics의 연계 분석이 어려움

주로 “사용자 행동 + 예외 추적”에 집중된 도구

도입 결과 (LGTM)

  • OTEL Agent 기반으로 Java 애플리케이션에 추적 ID 자동 삽입 및 수집
  • Grafana에서 Tracing + Log + Metrics를 하나로 통합 관리하여 장애 분석 시간 단축 기대
  • Alertmanager와 연동하여 메트릭 기반 알림 Mattermost(Slack 유사 오픈소스) 통합

PoC LGTM 구성 예시

docker-compose.yml

services: lgtm: image: docker.io/grafana/otel-lgtm:latest container_name: lgtm ports: - "3000:3000" - "4317:4317" - "4318:4318" volumes: - lgtm-grafana:/data/grafana - lgtm-prometheus:/data/prometheus - lgtm-loki:/data/loki - ./otel-collector-config.yml:/etc/otel-collector-config.yaml environment: - GF_PATHS_DATA=/data/grafana - OTEL_COLLECTOR_CONFIG=/etc/otel-collector-config.yaml volumes: lgtm-grafana: lgtm-prometheus: lgtm-loki:

otel-collector-config.yaml

receivers: otlp: protocols: grpc: http: exporters: loki: endpoint: http://loki:3100/loki/api/v1/push processors: batch: service: pipelines: logs: receivers: [otlp] processors: [batch] exporters: [loki]
Last updated on