본문 바로가기

Yonsei Golf

모니터링 with Docker

1. 문제 정의

컨테이너로 어플리케이션을 관리하면 다음과 같은 장점이 있습니다.

게시글 링크하기

“전투에서 실패한 지휘관은 용서할 수 있지만 경계에서 실패하는 지휘관은 용서할 수 없다”는 말이 있습니다. 이 말을 서비스를 운영하는 개발자에게 비춰 보면 장애는 언제든지 발생할 수 있더라도 그만큼 모니터링을 잘 해야 한다는 뜻입니다.

  • 김영한님 스프링 강의 중

기존에는 EC2에 직접 Grafana와 Loki를 설치하였으나, 이번 포스팅에서는 컨테이너로 Loki, Grafana, Promtail을 관리하는 방법을 알아보도록 하겠습니다.

2. 로그 관리

현재 프로젝트에서 스프링 설정은 application.yml로 관리하고 있습니다.

yml 설정에서 로그를 어디에 저장할 지 설정해보도록 하겠습니다.

logging:
  file:
    path: /var/log/server.log

현재 프로젝트 또한 도커 컨테이너로 동작하고 있습니다.

위의 경로로 설정해주게 된다면, 컨테이너 내부에 /var/log/server.log/spring.log 파일로 관리되게 됩니다.

3. Grafana, Loki, Promtail 설치

총 세 개의 컨테이너를 사용할 것이기 때문에 docker-compose를 통해 컨테이너를 관리하도록 하겠습니다.

version: '3'
services:
  loki:
    image: grafana/loki:latest
    ports:
      - "3100:3100"
    volumes:
      - loki-storage:/loki

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    depends_on:
      - loki

  promtail:
    image: grafana/promtail:latest
    volumes:
      - /home/ubuntu/be-log/server.log:/mnt/logs/server.log 
      - ./promtail-config.yml:/etc/promtail/config.yml
    command: -config.file=/etc/promtail/config.yml

volumes:
  loki-storage:

Grafana와 Loki를 최신버전으로, 각각에 맞는 포트로 설정해줍니다.

Promtail은 서버에 있는 로그를 로키로 보내주는 역할을 합니다.

Promtail이 서버의 로그를 읽을 수 있도록 마운트 해주고, 설정 파일을 다음과 같이 작성해줍니다.

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: spring-logs
  static_configs:
  - targets:
      - localhost
    labels:
      job: varlogs
      __path__: /mnt/logs/server.log/spring.log

4. Docker-Compose 실행

docker-compose up -d

위의 명령어를 통해 컨테이너를 설치해줍니다.

컨테이너가 실행된다면,

http://서버 ip:3000 을 통해 그라파나에 접속할 수 있게 됩니다.

로키를 시각화 하기 위한 방법은 이 포스트에서 확인할 수 있습니다.

'Yonsei Golf' 카테고리의 다른 글

Spring 처리율 제한 장치 (Rate Limiter)  (0) 2023.12.30
Email 성능 개선기  (0) 2023.12.09
JWT Token + Refresh Token  (1) 2023.11.27
CloudFront, S3 배포 자동화  (2) 2023.11.26
Alert 개선기  (0) 2023.11.18