1. 기술 스택 선정
회사에서 운영하는 서비스의 로그 시스템을 고도화하려고 준비중이다. 기존에는 프레임워크의 로그 모듈을 이용하여 stdout 으로 출력하거나 파일에 기록을 해서 보관해왔다. 그러나 서비스 규모도 커지고, 여러 컨테이너들이 동작하면서 로그 파일 관리, 로그 추적 및 디버깅 등이 어려워지기 시작했다. 이러한 문제들을 해결하기 위해 로그 저장, 검색 등을 보다 편리하게 할 수 있는 로그 모니터링 시스템을 설계하게 되었다.
초기에는 현업에서 많이 사용하는 ELK 스택을 검토했다. 아무래도 많이 사용하고 있기에 레퍼런스도 많았고, 로그를 문서 기반 데이터로 저장하면서 강력한 검색 및 분석 기능을 성숙한 기술이지만 아래와 같은 운영 부담도 존재했다.
- 로그 전체를 인덱싱하면서 발생하는 저장 비용
- ElasticSearch 클러스터 운영 및 튜닝에 필요한 리소스 및 복잡도, 러닝커브
- 로그 분석보다 단순 모니터링 / 디버깅 목적에 비해 과도한 기능
이러한 점을 고려하여 다른 기술들을 검토해보다가 아래의 이유로 Loki 기반으로 시스템을 구성하게 되었다.
- 로그 본문 전체를 인덱싱하지 않아 저장 비용과 리소스 사용량이 낮음
- 이미 서버 및 애플리케이션, DB 메트릭 모니터링을 위해 Grafana 를 사용 중. 추가적인 설치와 환경설정에 대한 부담이 없고, 이와 동일한 생태계에 있는 Loki 통합이 유리
이러한 이유로 기존의 Grafana 와 Loki 가 선택되었고, 아래에 나올 내용인 로그 수집을 위한 Fluent-bit 까지 사용하여 로그 모니터링 시스템을 구성하게 되었다. 아래부터는 각각의 기술에 대해 간단하게 설명해보겠다.
2. Grafana
Grafana는 시계열 데이터 시각화를 중심으로 시작된 오픈소스 관측성(Observability) 플랫폼으로 메트릭, 로그, 트레이스를 하나의 UI에서 조회할 수 있는 통합 대시보드 도구로 발전했다.
Grafana의 핵심 철학은 “데이터는 각 목적에 맞는 저장소에 두고, Grafana는 이를 시각화하고 연결한다”는 것이다. 즉, Grafana 자체는 데이터를 저장하지 않으며, Prometheus, Loki, ElasticSearch 등 이미 데이터를 가지고 있는 다양한 데이터 소스에 연결해 데이터를 조회하여 대시보드에 출력하는 역할을 담당한다.
주로 다양한 데이터 소스를 통합하는 중앙 관측 대시보드 역할을 하며, 다양한 시각화 도구를 통해 메트릭, 로그, 트레이스 등을 출력한다. Alerting 기능을 통해 이상 감지도 가능하다.
이 시스템에서는 Grafana 대시보드를 통해 서비스의 로그를 실시간으로 조회하고 검색하는 역할로 사용할 것이다.
3. Loki
Loki는 Grafana Labs에서 개발한 로그 전용 저장 및 조회 시스템으로, Prometheus와 유사한 철학을 기반으로 설계되었다. 다른 로그 시스템과는 달리 로그의 메타데이터만 인덱싱하며 로그 텍스트는 압축하여 S3 나 GCS 와 같은 object storage, 또는 로컬 파일시스템 등에 chunk 로 저장된다.
로그 메타데이터 인덱싱, 라벨 기반 구조, object storage 저장 등 외에도 멀티 테넌시 기능, LogQL 쿼리 언어 제공, Alerting 기능, Grafana 생태계의 다른 스택과의 통합 등 다양한 기능을 제공한다.
이 시스템에서는 도커 서비스의 로그를 저장하고, Grafana 와 연동하여 로그를 출력할 수 있도록 구성할 것이다.
4. Fluent-bit
Loki 에 로그를 저장하기 위해서는 누군가 로그를 저장해주어야 한다. 웹 서비스에서 로그를 직접 http 통신으로 Loki 에 push 할 수도 있지만 이러한 방식은 웹 서비스에게 부하를 주게된다. 이때문에 로그 수집기를 사용하여 서비스의 로그를 읽어 Loki 에 저장한다. 이 시스템에서는 Fluent-bit 를 사용하기로 결정했다.
처음 계획때는 Loki와 동일한 생태계에 속한 Promtail 또는 Grafana Alloy 사용을 고려하였다. 이들은 Loki 에 최적화 된 수집기이지만, 특정 로그 저장소에 종속되는 구조라는 한계가 있다. 인프라 파트와 얘기를 해보면서 향후 로그 저장소를 ElasticSearch 또는 OpenSearch로 변경할 가능성이 있다는 것을 알게되었다. 이러한 상황을 고려하여 보다 범용적인 로그 수집기가 필요하였고 그 결과 Fluent 계열을 선택하게 되었다.
Fluent 계열의 로그 수집기로 Fluentd 와 Fluent-bit 가 있다. Fluentd는 강력한 필터링과 라우팅 기능을 제공하지만, 현재 요구사항에서는 복잡한 로그 가공이 필요하지 않고, 단순히 로그를 안정적으로 전달하는 것이 목적이기 때문에 Fluentd 보다는 보다 가볍고 빠른 Fluent-bit 를 사용하게 되었다.
Fluent Bit은 CNCF 프로젝트로 관리되는 경량 로그 수집 에이전트로, Fluentd의 경량 버전이라 볼 수 있다. C 언어로 구현되어 매우 낮은 메모리·CPU 사용량을 가지며, 컨테이너 및 노드 단위 로그 수집에 최적화되어 있다. JSON, Regex 등 다양한 형식에 맞춘 데이터 파싱을 지원해주고, Inputs, Filters 와 Outputs 등 내부 구조를 플러그형으로 유연하게 구성할 수 있다.
이번 시스템에서는 각 도커 서비스에서 출력하는 로그를 수집하여 각 로그에 필요한 메타데이터 추가, 라벨링 후 Loki 로 전달하는 역할을 담당할 것이다.
[References]
- https://grafana.com/docs/grafana/latest/introduction/
About Grafana | Grafana documentation
Grafana Cloud Enterprise Open source About Grafana Grafana open source software enables you to query, visualize, alert on, and explore your metrics, logs, and traces wherever they are stored. Grafana OSS provides you with tools to turn your time-series dat
grafana.com
- https://grafana.com/docs/loki/latest/
Grafana Loki | Grafana Loki documentation
Manage Loki Learn how to manage tenants, log ingestion, storage, queries, and more.
grafana.com
- https://docs.fluentbit.io/manual
Fluent Bit documentation | Fluent Bit: Official Manual
High Performance Telemetry Agent for Logs, Metrics and Traces
docs.fluentbit.io
'기타' 카테고리의 다른 글
| [로그 모니터링] Loki 설치와 Grafana 연동 (0) | 2026.03.11 |
|---|---|
| [로그 모니터링] Garafana 설치 (0) | 2026.03.06 |
| [RabbitMQ] RabbitMQ 개념 설명 (0) | 2025.05.13 |
| [가상 면접 사례로 배우는 대규모 시스템 설계 기초] 9. 웹 크롤러 설계 (0) | 2025.04.06 |
| [가상 면접 사례로 배우는 대규모 시스템 설계 기초] 8. URL 단축기 설계 (0) | 2025.03.18 |