(로그, 메트릭) 모니터링 대시보드가 뭐죠?(4) Promtail, Loki를 이용한 로그 모니터링 도입

이돈이면 official·2023년 8월 11일
0
post-thumbnail

안녕하세요!
로그 모니터링으로 돌아온 이리내입니다.

저희는 지난 3차 데모데이에서, 자체 로그 모니터링 웹페이지를 자체 제작했어요.
이는 json 형식으로 기록되는 로그를 예쁘게 출력하기 위함이었죠!

로그를 예쁘게 본다는 장점이 있지만, 약간의 문제점도 있었습니다.

  1. url을 쳐서 접속하는 것이기 때문에 이돈이면 팀이 아닌 누구라도 로그를 볼 수 있다.
  2. 운영서버랑 같은 곳에서 돌아가기 때문에 해당 서버가 터진다면 로그를 볼 수 없다. 애써 로그 모니터링 페이지를 만들었지만 로그 모니터링을 못하게 된다..!

그래서 운영서버에서 분리된 다른 서버에서, 이돈이면팀만이 로그를 볼 수 있는 방법이 필요했습니다.
저희는 이전 포스팅에서 그라파나를 도입했기 때문에, 여기서 로그를 볼 수 있는 방법을 찾아봤어요.
같은 웹페이지에서 메트릭 모니터링도 하고, 로그 모니터링도 하면 좋잖아요?
그래서 Promtail과 Loki를 이용해 그라파나에 로그 모니터링 기능을 도입해보기로 정했습니다.


대충 이런 느낌인데요,
연습삼아 테스트 서버에 구축해볼거예여.

설치 과정은 아래 블로그를 따라했습니다.
https://sungsan.oopy.io/68cf0480-c020-4cdd-87eb-4feea2e1b442

Loki의 버전은 아래 깃허브에서 고를 수 있어용
https://github.com/grafana/loki/releases
저는 링크를 들어가자마자 제일 위에 보이는 2.7.6으로 진행해보겠읍니다

다른 버전을 원하신다구요?
해당 버전의 Asset을 누르면 여러 파일이 나오는데요.


원하는 버전의 링크를 복사해주면 돼요.
promtail도 똑같이 진행합니다.

일단, 모니터링 서버에는 Loki를, 테스트 서버에는 Promtail을 설치해줄 거예요.

모니터링 서버 EC2에 Loki 설치하기

wget https://github.com/grafana/loki/releases/download/v2.7.6/loki-linux-arm64.zip

sudo apt install unzip// unzip 명령어가 이미 설치되어 있다면 스킵
unzip loki-linux-arm64.zip

wget https://raw.githubusercontent.com/grafana/loki/v2.7.6/cmd/loki/loki-local-config.yaml

설치를 다 했다면 실행을 합니다.

sudo nohup ./loki-linux-arm64 -config.file=loki-local-config.yaml &

끝이네유.

테스트 서버 EC2에 Promtail 설치하기

설치과정은 Loki랑 비슷해요.

wget https://github.com/grafana/loki/releases/download/v2.7.6/promtail-linux-arm64.zip

sudo apt install unzip// unzip 명령어가 이미 설치되어 있다면 스킵
unzip promtail-linux-arm64.zip

wget https://raw.githubusercontent.com/grafana/loki/v2.7.6/clients/cmd/promtail/promtail-local-config.yaml

다만 yaml파일을 좀 만지작거려줘야 합니다.
아래는 저희의 promtail-local-config.yaml 파일이에요.

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://{Loki 서버 IP}:{Loki 서버 포트}/loki/api/v1/push

scrape_configs:
- job_name: was_error
  static_configs:
  - targets:
      - localhost
    labels:
      jobs: was_error_logs
      __path__: /home/ubuntu/2023-edonymyeon/backend/build/libs/logs/error.log
- job_name: was_warn
  static_configs:
  - targets:
      - localhost
    labels:
      jobs: was_warn_logs
      __path__: /home/ubuntu/2023-edonymyeon/backend/build/libs/logs/warn.log
- job_name: was_info
  static_configs:
  - targets:
      - localhost
    labels:
      jobs: was_info_logs
      __path__: /home/ubuntu/2023-edonymyeon/backend/build/libs/logs/info.log

저희는 logs 폴더에 error, warn, info 레벨의 로그를 나누어 저장하기 때문에 이렇게 적어주었습니다!
앗, 그리고 Loki 서버 포트는 포트포워딩한 포트로 적어주었어요~
이것도 역시 우테코에선 3100 포트가 열리지 않은 이슈로..

그리고 이제 실행해봐요

sudo nohup ./promtail-linux-arm64 --config.file=promtail-local-config.yaml &

그라파나로 로그 모니터링하기

이제 그라파나로 로그를 모니터링 할 수 있도록 해봐요.
저번에 DataSource로 프로메테우스를 추가했듯이, 이번에는 DataSource에 Loki를 추가해주면 돼요.
이번에도 주소를 http://localhost:3100으로 해준 것 말곤 기본 옵션 그대로 저장했습니다.

이제 패널을 만들어줘요.
아래 사진처럼 jobs에 원하는 jobs를 쓰면 돼요.
이 jobs는 저희가 아까 프롬테일 설정파일에 적어둔 이름이랍니다.

짠! 그라파나에서 저희의 로그를 볼 수 있는 대시보드가 만들어졌어요.

가독성은 저희의 자체 제작 웹페이지에게 밀리겠지만, 그래도 보안상으로는 더 안전해요!
일단 돌아가기 때문에, 가독성은 차차 개선해보도록 하죵..

뇌피셜 메모장

테스트 서버에 잘 반영된 것을 확인하고 운영서버에도 같은 과정을 반복 했는데,
운영서버의 프롬테일 yaml 파일에 loki 서버 주소를 잘못 입력하고 프롬테일을 실행해버려서 그라파나로 로그를 볼 수 없는 이슈가 있었다,,
nohup.out 기록을 보니,, 이상한 주소로 로그를 보내려다가 빠꾸먹었던 흔적이 있었던,,

그래서 부랴부랴 yaml 파일을 수정해서 다시 실행을 해줬는데,
그라파나로 info 로그는 조회가 되지만 error와 warn 로그를 조회할 수 없는 이슈가 있었다,,

이부분이 왜 그런지에 대해 뇌피셜을 메모해보자면,
프롬테일은 기본적으로 로그 파일에 변경사항이 생겼을 때, 즉 새로운 로그가 생겼을 때마다 로키로 로그를 보낸다.
하지만 나는 처음에 잘못된 주소로 로그를 보냈고, 이 기록이 어디엔가 보관되어 있었기 때문에 yaml 파일을 수정한 후에는 warn과 error 로그파일에 변경사항이 없어서 로키로 로그가 안보내지는 것 같다.
하지만 info 파일은 요청이 올때마다 로그가 찍히기 때문에 로키로 로그가 잘 보내지는 것 같다.

이 뇌피셜을 검증하려면 error로그와 warn로그가 어서 찍혀서 로그파일에 변경사항이 생겨야하는데, 새로운 error도, warn도 발생하지 않는다....일단 좀더 기다려보겠다.

결론: yaml파일 처음에 잘썼는지 제대로 확인하고 프롬테일을 실행하자.

++ 추가
다음날 운영서버에 Error 로그가 하나 업데이트 된 것을 그라파나를 통해 확인할 수 있는것을 보니, 뇌피셜이 맞는 것 같다는 생각이 든다.

profile
이돈이면 기술 블로그입니다 🫶🏻

1개의 댓글

comment-user-thumbnail
2023년 8월 11일

훌륭한 글 감사드립니다.

답글 달기