본문 바로가기

업브렐라

Loki를 통한 로그 모니터링

이 포스팅은 제가 작성한 UPbrella 프로젝트의 기술 블로그에 작성한 Loki를 통한 로그 모니터링 포스팅을 옮겨온 것입니다.

1. 문제 정의

업브렐라 서버팀은 ELK를 사용하여 로그 모니터링을 하려고 했습니다. 하지만 무거운 ELK를 감당하기에는 서버 비용이 부담이 들었고, 비교적 가볍게 실행할 수 있는 Grafana를 로그 모니터링 툴로 선택하게 되었습니다.

2. Grafana

2 - 1 Grafana란?

Grafana는 오픈 소스로 제공되는 대시보드 및 시각화 플랫폼입니다.

이번 포스팅을 통해 Loki와 Promtail로 수집한 데이터를 Grafana로 시각화하는 방법에 대해서 알아보겠습니다.

2 - 2 Grafana 설치

wget으로 Grafana를 다운받고, 압축을 해제해줍니다.

wget https://dl.grafana.com/enterprise/release/grafana-enterprise-10.1.2.linux-amd64.tar.gz
tar -zxvf grafana-enterprise-10.1.2.linux-amd64.tar.gz

압축 해제된 grafana/bin/ 들어가보면 grafana-server가 있는 것을 볼 수 있습니다.
image

./grafana-server

하지만 위와 같이 실행하게 되면 terminal이 종료될 시 grafana도 종료됩니다.

따라서 Systemd 서비스 유닛 파일을 작성하고 이를 활용하여 Grafana를 관리할 필요가 있습니다.

  1. systemd 서비스 파일 생성
sudo nano /etc/systemd/system/grafana-custom.service
  1. 아래 내용을 파일에 입력
[Unit]
Description=Grafana
After=network.target

[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/grafana-10.1.2
ExecStart=/home/ubuntu/grafana-10.1.2/bin/grafana-server
Restart=on-failure

[Install]
WantedBy=multi-user.target
  1. 서비스 파일 권한 설정 후 데몬 리로드
sudo chmod 644 /etc/systemd/system/grafana-custom.service
sudo systemctl daemon-reload
  1. Grafana 시작
sudo systemctl start grafana-custom
  1. 시스템 부팅 시 자동 시작 설정
sudo systemctl enable grafana-custom
  1. 그라파나 실행 확인
sudo systemctl status grafana-custom

3000 포트로 접속하면 그라파나가 활성화된 것을 볼 수 있습니다.
image

3. Loki

3 - 1 Loki란

Loki는 Grafana에서 제공하는 오픈소스 기반의 로그 집계 서비스입니다.

Promtail과 함께 사용해서 로그를 수집하고 Grafana로 로그를 보여줄 수 있습니다.

3 - 2 Loki 설치

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

Loki를 사용하기 위해서는 로그를 Loki로 보내주는 Promtail도 같이 설치해야 합니다.

설정 파일을 다시 받아줍니다.

wget https://raw.githubusercontent.com/grafana/loki/master/cmd/loki/loki-local-config.yaml
wget https://raw.githubusercontent.com/grafana/loki/main/clients/cmd/promtail/promtail-local-config.yaml
  • 이제 Promtail 설정을 추가로 해주어야 합니다.
server:
  http_listen_port: 9080
  grpc_listen_port: 0

# promtail이 꺼졌을 경우를 대비해서, 로그를 마지막으로 어디까지 읽었는지 저장해둡니다. 
positions:
  filename: /tmp/positions.yaml

# 로키가 실행중인 서버의 ip 
clients:
  - url: http://localhost:3100/loki/api/v1/push

scrape_configs:
- job_name: system
  static_configs:
    # promtail이 설치된 곳 
  - targets:
      - localhost
    labels:
      job: was-log
            # 로그의 경로 
      __path__: /home/ubuntu/be-log/*.log

설정을 마친 후 Loki 와 Promtail을 실행합니다.

kill -9 $(lsof -t -i:3100) || true
nohup /home/ubuntu/loki/loki-linux-amd64 -config.file=/home/ubuntu/loki/loki-local-config.yaml 2>&1 &
nohup /home/ubuntu/promtail/promtail-linux-amd64 \
-config.file=/home/ubuntu/promtail/promtail-local-config.yaml \
> /home/ubuntu/promtail/promtail.log 2>&1 &

4. Dashboard 설정

4 - 1 Loki 설정

  1. Grafana를 설치한 ip :3000 으로 그라파나에 접속해줍니다.

  2. Connection 에서 Loki를 선택해줍니다.
    image

image

URL 에 서버의 IP와 3100 포트를 적고 save & test 를 클릭하면 됩니다.

4 - 2 Dashboard 설정

  1. Dashboard에 들어간 후 New Dashboard - Add visualization - Loki 를 선택해줍니다.

  2. Label Filter 에서 promtail config 에서 설정한 label을 선택해줍니다.

image

  1. save를 하게 되면 log를 Dashboard에서 확인할 수 있습니다.

5. 마무리

이번 포스팅을 통해 Grafana와 Loki를 이용해서 로그를 확인하는 방법에 대해 알아보았습니다.

다음 포스팅에서는 slack 알림봇과 연동해서 500에러가 발생했을 때 알림이 가도록 서비스를 구축해보도록 하겠습니다.

'업브렐라' 카테고리의 다른 글

협업지점 조회 성능 개선, N+1 해결  (0) 2023.10.15
캐시를 통한 성능 최적화  (0) 2023.09.25
nGrinder 자동화  (0) 2023.09.24
JPA Repository는 Entity만을 조회해야 할까?  (0) 2023.09.24
nGrinder 적용기  (0) 2023.09.24