이번 강의에서는 Grafana와 그 생태계에 포함된 도구들을 사용하여 마이크로서비스의 로그 집계를 어떻게 구현할 수 있는지 자세히 설명하겠습니다. 앞서 언급했듯이 Grafana는 오픈 소스 분석 및 시각화 도구로, 다양한 데이터 소스에서 수집된 메트릭스, 로그, 추적 데이터를 시각화하는 데 널리 사용됩니다.
Grafana: 오픈 소스 시각화 및 분석 도구로, 다양한 데이터 소스와 통합하여 대시보드, 그래프, 알림 등을 생성할 수 있습니다. Grafana는 메트릭스, 로그, 트레이스 데이터를 시각화하여 시스템의 상태를 쉽게 모니터링하고 분석할 수 있도록 도와줍니다.
Loki: Grafana와 함께 사용하는 로그 집계 시스템입니다. 분산된 로그 데이터를 중앙에서 수집하고 저장할 수 있습니다. Loki는 대규모의 로그 데이터를 효율적으로 처리할 수 있도록 설계되었으며, 기존의 로그 집계 시스템보다 설정이 간단합니다.
Promtail: 경량의 로그 수집 에이전트로, 컨테이너나 서버에서 생성된 로그를 수집하여 Loki로 전송합니다. Promtail은 컨테이너의 로그 파일을 모니터링하고, 새로 추가된 로그를 실시간으로 Loki에 전달합니다.
이제, Grafana, Loki, Promtail을 사용하여 로그 집계를 설정하는 방법을 단계별로 설명하겠습니다.
먼저, Docker 및 Docker Compose를 사용하여 Grafana, Loki, Promtail을 설정합니다. 이 과정에서는 Docker를 사용하여 각 도구를 컨테이너로 실행하게 됩니다.
아래는 docker-compose.yml
파일의 예시입니다. 이 파일을 사용하여 Grafana, Loki, Promtail을 컨테이너로 실행할 수 있습니다.
version: '3.7'
services:
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=admin
volumes:
- grafana-storage:/var/lib/grafana
loki:
image: grafana/loki:2.4.1
container_name: loki
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
volumes:
- ./loki-config.yaml:/etc/loki/local-config.yaml
- loki-storage:/loki
promtail:
image: grafana/promtail:2.4.1
container_name: promtail
volumes:
- /var/log:/var/log
- ./promtail-config.yaml:/etc/promtail/config.yaml
command: -config.file=/etc/promtail/config.yaml
volumes:
grafana-storage:
loki-storage:
이 docker-compose.yml
파일은 다음과 같은 세 가지 서비스를 정의합니다:
loki-config.yaml
)Loki의 구성 파일을 작성하여 로그 집계를 위한 설정을 정의합니다. 이 파일은 Loki가 로그를 어떻게 수집하고 저장할지를 지정합니다.
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9095
ingester:
lifecycler:
address: 127.0.0.1
ring:
kvstore:
store: inmemory
replication_factor: 1
chunk_idle_period: 5m
chunk_retain_period: 30s
max_transfer_retries: 0
schema_config:
configs:
- from: 2020-10-24
store: boltdb
object_store: filesystem
schema: v11
index:
prefix: index_
period: 168h
storage_config:
boltdb:
directory: /loki/index
filesystem:
directory: /loki/chunks
limits_config:
enforce_metric_name: false
reject_old_samples: true
reject_old_samples_max_age: 168h
chunk_store_config:
max_look_back_period: 0s
table_manager:
retention_deletes_enabled: false
retention_period: 0s
이 설정 파일은 Loki가 로컬 파일 시스템에 로그 데이터를 저장하도록 설정합니다.
promtail-config.yaml
)Promtail의 구성 파일을 작성하여 어떤 로그 파일을 수집하고 Loki로 전송할지를 정의합니다.
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/*.log
이 설정 파일은 /var/log
디렉토리의 로그 파일을 수집하여 Loki로 전송하도록 설정합니다.
이제 Docker Compose를 사용하여 서비스를 시작합니다. 다음 명령을 터미널에서 실행하여 컨테이너를 시작합니다.
docker-compose up -d
이 명령어는 Grafana, Loki, Promtail 컨테이너를 백그라운드에서 실행합니다.
컨테이너가 실행되면, 웹 브라우저에서 http://localhost:3000
으로 이동하여 Grafana에 접속할 수 있습니다. 기본 로그인 정보는 admin/admin
입니다.
Grafana에 로그인한 후, Loki를 데이터 소스로 추가하고, 로그 데이터를 시각화하기 위한 대시보드를 구성할 수 있습니다.
이번 강의에서는 Grafana, Loki, Promtail을 사용하여 로그 집계를 설정하는 방법을 설명했습니다. 이 도구들을 활용하면 마이크로서비스의 로그를 중앙에서 관리하고, 로그 데이터를 시각화하여 문제를 보다 효율적으로 해결할 수 있습니다. 앞으로의 강의에서는 이와 같은 설정을 더 깊이 탐구하고, 로그 집계 외에도 메트릭스 및 트레이스를 관리하는 방법을 다루겠습니다.