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가 있는 것을 볼 수 있습니다.
./grafana-server
하지만 위와 같이 실행하게 되면 terminal이 종료될 시 grafana도 종료됩니다.
따라서 Systemd 서비스 유닛 파일을 작성하고 이를 활용하여 Grafana를 관리할 필요가 있습니다.
- systemd 서비스 파일 생성
sudo nano /etc/systemd/system/grafana-custom.service
- 아래 내용을 파일에 입력
[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
- 서비스 파일 권한 설정 후 데몬 리로드
sudo chmod 644 /etc/systemd/system/grafana-custom.service
sudo systemctl daemon-reload
- Grafana 시작
sudo systemctl start grafana-custom
- 시스템 부팅 시 자동 시작 설정
sudo systemctl enable grafana-custom
- 그라파나 실행 확인
sudo systemctl status grafana-custom
3000 포트로 접속하면 그라파나가 활성화된 것을 볼 수 있습니다.
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 설정
-
Grafana를 설치한 ip :3000 으로 그라파나에 접속해줍니다.
-
Connection 에서 Loki를 선택해줍니다.
URL 에 서버의 IP와 3100 포트를 적고 save & test 를 클릭하면 됩니다.
4 - 2 Dashboard 설정
-
Dashboard에 들어간 후 New Dashboard - Add visualization - Loki 를 선택해줍니다.
-
Label Filter 에서 promtail config 에서 설정한 label을 선택해줍니다.
- save를 하게 되면 log를 Dashboard에서 확인할 수 있습니다.
5. 마무리
이번 포스팅을 통해 Grafana와 Loki를 이용해서 로그를 확인하는 방법에 대해 알아보았습니다.
다음 포스팅에서는 slack 알림봇과 연동해서 500에러가 발생했을 때 알림이 가도록 서비스를 구축해보도록 하겠습니다.