Grafana, Loki, Promtail을 사용한 로그 집계 구현하기

날아올라돼지야·2024년 8월 29일
0

이 강의에서는 이전 강의에서 설명한 Grafana, Loki, Promtail을 사용하여 마이크로서비스의 로그 집계를 실제로 구현하는 방법을 설명합니다. 이 과정에서 Docker Compose를 사용하여 각 서비스를 설정하고, 로그를 중앙에서 관리할 수 있도록 구성할 것입니다.

1. 프로젝트 준비

먼저, 기존 프로젝트의 코드를 복사하여 새로운 섹션 폴더를 만듭니다. 새로운 섹션은 section11으로 이름을 변경합니다. IntelliJ IDEA에서 이 새로운 섹션을 열고 프로젝트를 설정합니다.

  1. 기존 코드 복사: 이전 섹션의 코드를 복사하여 section11 폴더에 붙여넣기 합니다.
  2. 폴더 열기: IntelliJ IDEA에서 section11 폴더를 엽니다.
  3. Maven 설정: 각 마이크로서비스의 pom.xml 파일에서 Docker 이미지 태그를 s10에서 s11으로 변경합니다.
  4. Application.yml 설정: gateway-serverapplication.yml 파일에서 response-timeout을 2초에서 10초로 증가시켜 로컬 환경에서의 성능 문제를 방지합니다.

2. Grafana, Loki, Promtail 설정

이제 Grafana, Loki, Promtail을 Docker Compose 파일에 추가하여 설정합니다. Grafana는 시각화를 위한 도구이며, Loki는 로그 저장소로 사용되며, Promtail은 로그 수집 에이전트 역할을 합니다.

Docker Compose 파일 작성

아래는 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: 로그를 수집하고 저장하는 로그 집계 시스템.
  • Promtail: 로그 파일을 수집하여 Loki로 전송하는 로그 수집 에이전트.
  • Grafana: Loki에 저장된 로그를 시각화하는 도구.
Loki 구성 파일 (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 구성 파일 (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

3. Docker Compose 실행

모든 구성 파일을 설정한 후, 터미널에서 다음 명령을 실행하여 Docker Compose를 실행합니다.

docker-compose up -d

이 명령어는 Grafana, Loki, Promtail 컨테이너를 백그라운드에서 실행합니다.

4. Grafana 설정

Grafana를 통해 Loki와 연결하고, 로그를 시각화할 수 있습니다.

  1. Grafana 접속: 웹 브라우저에서 http://localhost:3000으로 이동하여 Grafana에 접속합니다.
  2. 로그인: 기본 로그인 정보 (admin/admin)로 로그인합니다.
  3. Loki 데이터 소스 추가: Configuration > Data Sources에서 Add data source를 클릭한 후, Loki를 선택합니다. URLhttp://loki:3100을 입력하고 Save & Test를 클릭하여 Loki 데이터 소스를 추가합니다.

5. 로그 조회

Grafana에서 Explore 메뉴를 사용하여 Loki로부터 수집된 로그를 조회할 수 있습니다. 쿼리를 통해 특정 로그를 검색하고, 로그 데이터를 시각화할 수 있습니다.

결론

이 강의에서는 Grafana, Loki, Promtail을 사용하여 로그 집계를 구현하는 방법을 배웠습니다. 이러한 도구들을 사용하면 마이크로서비스의 로그를 중앙에서 관리하고, 로그 데이터를 시각화하여 문제를 보다 효율적으로 해결할 수 있습니다. 다음 강의에서는 메트릭스와 트레이스를 관리하는 방법을 알아보겠습니다.

profile
무슨 생각하며 사니

0개의 댓글