Grafana, Loki, and Promtail 설정을 통한 로그 집계 구현 2

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

이 강의에서는 이전에 다운로드한 loki-config.ymlpromtail-local-config.yml 파일을 Docker Compose 파일에 통합하여 로그 집계를 구현하는 방법을 설명합니다. 이 강의를 통해 Docker Compose를 수정하여 Grafana, Loki, Promtail을 설정하고, 로그를 중앙에서 관리할 수 있도록 구성할 것입니다.

1. 필요한 파일 다운로드 및 폴더 구조 설정

먼저, loki-config.ymlpromtail-local-config.yml 파일을 다운로드하여 프로젝트에 추가합니다.

  1. 폴더 생성:

    • observability라는 폴더를 생성합니다.
    • 그 안에 lokipromtail 폴더를 각각 생성합니다.
  2. 파일 저장:

    • loki-config.yml 파일을 observability/loki 폴더에 저장합니다.
    • promtail-local-config.yml 파일을 observability/promtail 폴더에 저장합니다.

2. Docker Compose 파일 수정

이제 docker-compose.yml 파일을 수정하여 Loki와 Promtail 서비스를 추가하고, 기존 서비스와 통합합니다.

  1. 기존 Docker Compose 파일 열기:

    • prod 환경에 있는 docker-compose.yml 파일을 엽니다.
    • 이전 섹션에서 Rate Limiter 패턴을 위해 추가한 Redis 관련 서비스를 제거하여 시스템 리소스를 절약합니다.
    • s10 태그를 s11 태그로 변경하여 새로운 이미지를 사용할 수 있도록 설정합니다.
  2. 새로운 서비스 추가:

    • docker-compose.yml 파일에 Loki와 Promtail 서비스를 추가합니다. 아래는 이를 위한 코드입니다.
version: '3.7'

services:
  # 기존 서비스 정의

  loki-read:
    image: grafana/loki:2.4.1
    command: -config.file=/etc/loki/config.yml -target=read
    volumes:
      - ./observability/loki/loki-config.yml:/etc/loki/config.yml
    ports:
      - "3101:3101"
    networks:
      easybank:
        aliases:
          - loki
    depends_on:
      - minio
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3101/ready"]
      interval: 30s
      timeout: 5s
      retries: 3

  loki-write:
    image: grafana/loki:2.4.1
    command: -config.file=/etc/loki/config.yml -target=write
    volumes:
      - ./observability/loki/loki-config.yml:/etc/loki/config.yml
    ports:
      - "3102:3102"
    networks:
      easybank:
    depends_on:
      - minio
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3102/ready"]
      interval: 30s
      timeout: 5s
      retries: 3

  promtail:
    image: grafana/promtail:2.4.1
    volumes:
      - /var/log:/var/log
      - ./observability/promtail/promtail-local-config.yml:/etc/promtail/config.yml
    command: -config.file=/etc/promtail/config.yml
    networks:
      easybank:
    depends_on:
      - gateway

  minio:
    image: minio/minio:RELEASE.2021-03-17T02-33-02Z
    command: server /data
    environment:
      - MINIO_ACCESS_KEY=minio
      - MINIO_SECRET_KEY=minio123
    ports:
      - "9000:9000"
    volumes:
      - ./data/minio:/data
    networks:
      easybank:
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 5s
      retries: 3

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin
    volumes:
      - grafana-storage:/var/lib/grafana
    depends_on:
      - gateway
    networks:
      easybank:

  gateway:
    image: nginx:latest
    ports:
      - "3100:3100"
    networks:
      easybank:
    depends_on:
      - loki-read
      - loki-write
    command: ["/bin/sh", "-c", "while :; do sleep 10; done"]
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf

networks:
  easybank:
    external: true

volumes:
  grafana-storage:
  loki-storage:
  1. 구성 파일의 경로 업데이트:
    • lokipromtail의 구성 파일 경로를 올바르게 지정합니다.

3. Docker Compose 실행 및 이미지 생성

모든 구성을 마친 후, Docker Compose를 사용하여 서비스를 실행합니다.

  1. Docker Compose 실행:
    • 터미널에서 다음 명령을 실행하여 모든 서비스를 실행합니다.
docker-compose up -d
  1. Docker 이미지 생성:
    • 이 과정에서는 Docker 이미지를 s11 태그로 빌드하고 푸시해야 합니다. 다음 명령을 사용하여 이미지를 빌드하고 푸시합니다.
mvn jib:build -Dimage=<your-dockerhub-username>/<service-name>:s11
docker push <your-dockerhub-username>/<service-name>:s11
  1. 컨테이너 상태 확인:
    • docker ps 명령을 사용하여 모든 컨테이너가 정상적으로 실행 중인지 확인합니다.

4. 로그 시각화 및 확인

이제 Grafana를 통해 Loki에 저장된 로그를 시각화할 수 있습니다.

  1. Grafana 접속:
    • 웹 브라우저에서 http://localhost:3000으로 이동하여 Grafana에 접속합니다.
    • 기본 로그인 정보(admin/admin)로 로그인합니다.
  2. Loki 데이터 소스 추가:
    • Grafana에서 Configuration > Data Sources로 이동하여 Add data source를 클릭한 후 Loki를 선택합니다.
    • URL 필드에 http://gateway:3100을 입력하고 Save & Test를 클릭합니다.
  3. 로그 확인:
    • Explore 메뉴에서 Loki로부터 수집된 로그를 확인할 수 있습니다.

결론

이번 강의에서는 Grafana, Loki, Promtail을 사용하여 로그 집계를 설정하고, 이를 통해 마이크로서비스의 로그를 중앙에서 관리하는 방법을 배웠습니다. 다음 강의에서는 추가적인 설정과 함께, 이러한 도구들을 활용하여 마이크로서비스의 성능을 모니터링하는 방법을 배울 것입니다.

profile
무슨 생각하며 사니

0개의 댓글