Grafana + Loki + Prometheus 로 모니터링 서버 구축

안녕하세요. 코딩 신생아 입니다.

오늘은 Grafana + Loki + Prometheus로 모니터링 서버 구축을 해보았는데요. 

해당 부분들을 어떻게 구축했는지 써보려 합니다.

 

 

Grafana , Loki , Prometheus

 

 

Grafana, Loki, Prometheus 란?

  • Prometheus : 모니터링 및 경고 툴킷으로, metrics형태로 데이터를 제공한다.
  • Loki(from promtail) : promtail로 로그 데이터를 파일 형태로 수집하여 관리하고, 이를 받은 Loki가 로그 데이터를 집계하여 제공한다.
  • Grafana : 데이터를 시각화하는 툴로, Prometheus, Loki 등에서 수집한 데이터를 시각화한다.

Prometheus, Loki는 데이터 수집, Grafana는 데이터 시각화로 생각하면 된다.

 

로그 기반 모니터링 vs 메트릭 기반 모니터링

Loki (로그 기반 모니터링) 는 서버에서 발생하는 로그 정보를 수집하는 역할이고,

Prometheus (메트릭 기반 모니터링) 는 서버에서 주기적으로 시스템 정보를 가져오는 역할을 한다.

 

Loki와 Prometheus는 서로 상호보완적이다.

 

Loki는 이벤트 발생 시점에 로그를 생성한다. 사용자 로그인 이벤트의 경우 순간에만 기록되고, 로그아웃 이벤트가 없다면 사용자가 계속 접속 중인지 알 수 없다. 따라서 예를 들면, 12일~17일 기간으로 조회하면 10일에 로그인한 사용자의 정보는 해당 기간에 새로운 로그가 없어서 보이지 않는다. 

 

이를 Prometheus가 현재상태를 지속적으로 측정하며 보완해준다. 위의 예시에서 '현재 접속 중인 사용자 수'라는 게이지(gauge) 값으로, 사용자가 로그인하면 값이 증가, 로그아웃하면 감소 형태로 보여준다.

 

서로 상호보완적이며 제공해주는 정보가 다르기 때문에 ( Loki는 이벤트적인 로그, prometheus는 cpu 사용량, memory 사용량, 접속되어 있는 user수) 2개를 사용해 Grafana(대시보드)에 놓는 것이 좋다고 생각했다.

 

 

모니터링 서버 구축

 

우선 vpc, ec2 를 만든후, 

ec2 서버에 docker를 설치하고 docker가 잘 설치되었는지 확인해준다. docker 설치 안됨 오류(추후)

docker -v (도커 버전 확인)

 

 

Node Exporter 설치

 

 

Node Exporter는 하드웨어 상태와 커널 관련 메트릭을 수집하는 메트릭 수집기이다. prometheus가 node exporter의 metrics http endpoint에 접근해 정보를 수집할 수 있으므로, 아래 명령어를 사용해 배포서버에 설치한다. 

 

 

배포서버에 설치해야 배포서버의 메트릭 정보를 가져올 수 있다!

$ sudo docker pull prom/node-exporter

$ sudo docker run -d \
    -p 9100:9100 \
    prom/node-exporter

 

Prometheus 설치

 

 

docker hub에 만들어진 프로메테우스 이미지가 있으므로 이를 이용하기만 하면 되므로, 

prometheus.yml을 만들어 이 파일을 마운트 시켜 설정 파일로 사용되게 하였다.

 

 

- 마운트란?

호스트의 파일 시스템 경로를 컨테이너 내부에 연결하는 것을 의미한다. 호스트 머신의 디렉토리나 파일을 도커 컨테이너 내부에서 사용하거나 읽을 수 있게 된다. 

 

$ sudo vi /tmp/prometheus.yml

  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'custom_endpoint'
    metrics_path: '/metrics'
    static_configs:
      - targets: ['배포서버ip:9100']

 

 

  • scrape_interval : 타겟으로부터의 수집 주기
  • evaluation_interval : rule evaluation 주기  (pormetheus는 rule을 통해 time series를 만들고 alert를 생성)
  • scrape_configs: 수집 대상들을 target이라고 부르는데, target별로 범주들을 묶고, 범주별로 수집 주기나 룰들을 유동적으로 적용할 수 있다.
  • targets: 메트릭들을 수집해올 수집 대상

 

 

$ sudo docker run -d \
-p 9090:9090 \
-v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus

 

이렇게 하면, prometheus도커가 실행되면서 http:/모니터링서버ip:9090 을 들어가면 정상적으로 연결된것을 볼 수 있다.

 

 

Loki 설치

 

 

loki 는 공식문서를 참고해서 ec2에 설치하였다.

 

mkdir loki
cd loki
wget https://raw.githubusercontent.com/grafana/loki/v3.4.1/cmd/loki/loki-local-config.yaml -O loki-config.yaml
docker run --name loki -d -v $(pwd):/mnt/config -p 3100:3100 grafana/loki:3.4.1 -config.file=/mnt/config/loki-config.yaml

 

 

Grafana 설치

 

$ sudo docker run -d -p 3000:3000 grafana/grafana

 

grafana를 설치한후 , http://ec2서버url:3000/ 으로 접속한 후, prometheus 와 loki데이터를 가져오기 위해 datasource를 추가한 후, 대시보드를 생성해 prometheus, loki를 추가하였다. 

 

 

prometheus를 통한 메트릭 정보 대시보드

 

Grafana에서 제공하는 다양한 대시보드에서 하나를 선택하여 만들었다. 

후기

 

모니터링 서버를 구축했는데 

기초적인 부분만 했고, prometheus.yaml을 조금더 커스텀하고 alert알림 부분도 구현을 할 예정이다.

 

참고

 

[모니터링 서버 구축기]

[prometheus configuration]

[Docker+프로메테우스+그라파나+Node Exporter]

[모니터링 시스템 구축(2) + Grafana 대시보드 구성하기]