애니프렌즈 프로젝트에는 AOP와 로그백을 이용해서 클라이언트 요청과 예외를 로깅하고 로그 레벨 별로 파일을 출력하도록 설정하였습니다.

개발 환경에서 클라이언트와 통신하면서 발생하는 문제를 좀 더 쉽게 파악할 수 있을 것이라고 기대했지만 여전히 문제가 되는 부분이 있었습니다. 다음과 같이 로그 파일을 확인하기 위해서는 몇 번의 단계를 거쳐야 했는데 이것이 쌓이면서 피로감이 점점 커져갔습니다.

1. 문제 발생
2. ec2 연결
3. 로그 파일 출력 경로 이동
4. 레벨 별 로그 파일 확인

스크린샷 2023-11-22 오전 10.05.24.png

터미널을 통해 로그를 확인하는 것도 쉬운 일이 아니었습니다. 적어도 지금보다 더 쉽게 로그를 확인 할 수 있는 방법이 필요했습니다.

Loki


Loki는 Grafana에서 만들어진 로그 수집 시스템입니다. Prometheus가 애플리케이션의 메트릭을 수집하는 것과 유사하지만 로그를 수집한다는 점에서 다릅니다.

로키를 이용한 로깅 스택은 다음 3가지 요소로 구성되어 있습니다.

애플리케이션이 배포되어 있는 각각의 로컬 머신에는 프롬테일 에이전트가 존재합니다. 프롬테일의 설정 파일에 출력되는 로그 파일의 위치를 명시하면 이를 수집하여 로키 서버로 push합니다. 그라파나는 로키 서버를 데이터 소스로 하여 수집한 로그를 시각화합니다.

다음의 그림은 프로젝트에 적용한 모니터링 환경입니다. 이를 예로 들면 프로덕션(메인) 서버의 애플리케이션에서 출력된 로그를 프롬테일이 수집하여 모니터링(데브) 서버의 로키 서버에 push 하고 있습니다. 데브 서버 역시 애플리케이션에서 출력된 로그 파일을 로키에 push 합니다.

286499291-6b1adadf-aa9d-4d90-91f0-22424167a6e4.png

그럼 로키 서버를 데이터 소스로 하여 nginx, 애플리케이션, 혹은 수집한 다른 로그 파일들을 시각화 할 수 있습니다.

로키, 프롬테일 설정