이 강의에서는 이전 강의에서 설명한 Grafana, Loki, Promtail을 사용하여 마이크로서비스의 로그 집계를 실제로 구현하는 방법을 설명합니다. 이 과정에서 Docker Compose를 사용하여 각 서비스를 설정하고, 로그를 중앙에서 관리할 수 있도록 구성할 것입니다.
먼저, 기존 프로젝트의 코드를 복사하여 새로운 섹션 폴더를 만듭니다. 새로운 섹션은 section11
으로 이름을 변경합니다. IntelliJ IDEA에서 이 새로운 섹션을 열고 프로젝트를 설정합니다.
section11
폴더에 붙여넣기 합니다.section11
폴더를 엽니다.pom.xml
파일에서 Docker 이미지 태그를 s10
에서 s11
으로 변경합니다.gateway-server
의 application.yml
파일에서 response-timeout
을 2초에서 10초로 증가시켜 로컬 환경에서의 성능 문제를 방지합니다.이제 Grafana, Loki, Promtail을 Docker Compose 파일에 추가하여 설정합니다. Grafana는 시각화를 위한 도구이며, Loki는 로그 저장소로 사용되며, Promtail은 로그 수집 에이전트 역할을 합니다.
아래는 docker-compose.yml
파일의 예시입니다. 이 파일은 Grafana, Loki, Promtail을 컨테이너로 실행합니다.
version: '3.7'
networks:
loki:
driver: bridge
services:
loki:
image: grafana/loki:2.4.1
container_name: loki
ports:
- "3100:3100"
volumes:
- ./loki-config.yaml:/etc/loki/local-config.yaml
- loki-storage:/loki
command: -config.file=/etc/loki/local-config.yaml
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3100/ready"]
interval: 30s
timeout: 5s
retries: 3
networks:
- 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
networks:
- loki
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
depends_on:
- loki
networks:
- loki
volumes:
loki-storage:
grafana-storage:
이 파일은 다음과 같은 서비스를 정의합니다:
loki-config.yaml
)auth_enabled: false
server:
http_listen_port: 3100
ingester:
lifecycler:
address: 127.0.0.1
ring:
kvstore:
store: inmemory
replication_factor: 1
chunk_idle_period: 5m
chunk_retain_period: 30s
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
promtail-config.yaml
)server:
http_listen_port: 9080
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
모든 구성 파일을 설정한 후, 터미널에서 다음 명령을 실행하여 Docker Compose를 실행합니다.
docker-compose up -d
이 명령어는 Grafana, Loki, Promtail 컨테이너를 백그라운드에서 실행합니다.
Grafana를 통해 Loki와 연결하고, 로그를 시각화할 수 있습니다.
http://localhost:3000
으로 이동하여 Grafana에 접속합니다.admin/admin
)로 로그인합니다.Configuration > Data Sources
에서 Add data source
를 클릭한 후, Loki
를 선택합니다. URL
에 http://loki:3100
을 입력하고 Save & Test
를 클릭하여 Loki 데이터 소스를 추가합니다.Grafana에서 Explore
메뉴를 사용하여 Loki로부터 수집된 로그를 조회할 수 있습니다. 쿼리를 통해 특정 로그를 검색하고, 로그 데이터를 시각화할 수 있습니다.
이 강의에서는 Grafana, Loki, Promtail을 사용하여 로그 집계를 구현하는 방법을 배웠습니다. 이러한 도구들을 사용하면 마이크로서비스의 로그를 중앙에서 관리하고, 로그 데이터를 시각화하여 문제를 보다 효율적으로 해결할 수 있습니다. 다음 강의에서는 메트릭스와 트레이스를 관리하는 방법을 알아보겠습니다.