기존 로그 확인을 위해서는 Inbound 규칙에 의해 지정된 IP에서 서버 인스턴스에 접근하여 Log 파일을 직접 확인해야했다. 로그 확인을 위해 인스턴스 접근 -> 경로 접근 -> Log 파일 Read의 단계가 필요했기 때문에 대응에 시간이 걸렸고 재택인 경우 확인할 수 없는 문제가 있었다. 또한 각기 다른 인스턴스와 경로에 위치하는 Log 파일을 모아보는 시스템이 구축되어 있지 않았다.
따라서 로그 모니터링 시스템은 다음 이유로 구축한다.
Loki 는 Grafana에서 제공하는 오픈소스 기반의 로그 집계 시스템이다.
로그의 레이블만 인덱싱하고 원본 로그 메시지는 인덱싱하지 않아 자원소모가 적어 효율적인 운영을 할 수 있다.
Loki는 로그 집계 시스템이며, Loki에게 로그를 전송해줄 Promtail이 필요하다.
Promtail은 수집하려는 서버에서 동작하며 Loki에 Http Request를 통해 로그를 주기적으로 전송한다.
그리고 구축된 모니터링 시각화 툴인 Grafana를 통해 Loki를 DataSource로 등록하여 대시보드를 구성하고 시각화한다.
In order to run Loki, you must:
Loki 서버에 Loki를 받아준다.
wget https://github.com/grafana/loki/releases/download/v2.6.1/loki-linux-arm64.zip
Loki를 위한 설정 파일도 받아준다.
wget https://raw.githubusercontent.com/grafana/loki/master/cmd/loki/loki-local-config.yaml
unzip이 설치되어있지 않다면 설치한다.
sudo apt install unzip
zip파일을 풀고 Loki의 설정을 해보자.
sudo vim loki-local-config.yaml
http listen port 등 설정을 변경할 수 있다.
다음 명령으로 실행시켜준다.
nohup ./loki-linux-arm64 -config.file=loki-local-config.yaml &
수집을 원하는 서버에 Promtail을 설치해준다.
promtail release
wget https://github.com/grafana/loki/releases/download/v2.6.1/promtail-linux-arm64.zip
위와 같이 압축을 풀고 설정 파일도 받아준다.
wget https://raw.githubusercontent.com/grafana/loki/main/clients/cmd/promtail/promtail-local-config.yaml
서버 환경에 맞게 설정 파일을 수정해준다.
server:
http_listen_port: ${http listen port}
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://${loki server ip}:${port}/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- logs
labels:
job: ${job name}
__path__: ${log file path}
다음 명령어로 Promtail을 실행해준다.
nohup ./promtail-linux-arm64 -config.file=promtail-local-config.yaml &
Grafana에서 Loki Datasource를 설정해주자.
Url에 ${loki server ip}:${port}
를 넣어주고 테스트한 뒤, 정상적으로 기능한다면 DataSource를 등록해준다.
새로운 대시보드를 구성해준다.
Logs visualizations를 설정해준다.
Promtail Config에서 설정한 job label을 찾고, filtering이 필요하면 수행하여 로그를 수집하여 모니터링한다.
구성한 대시보드의 예시이다. 여러 로그들을 일원화하여 모니터링할 수 있다.