DevOps/Monitoring

[Monitoring] Prometheus

twoDeveloper 2022. 4. 7. 08:54

■ Prometheus란?

· Prometheus는 Open Source Monitoring Tool

· Metric 수집, 시각화, Alert, Service Decovery 기능 제공

· SoundCloud에서 탄생

· Kubernetes에 이어서 두번째로 CNCF Project 멤버로 추가

 

■ Prometheus 특징

1. 차원 데이터

· 시계열은 지표 이름과 일련의 Key-Value 쌍으로 식별

· 다양한 Exporter를 통해 Service/System Metric을 수집

ex) Node Exporter는 CPU, Memory의 Metric 정보 수집

 

2. 강력한 검색

· PromQL을 기반으로 Graph, Table, Alert을 생성하기 위해 수집 된 시계열 데이터를 검색 가능

 

3. 시각화

· 내장식 브라우저 및 손쉬운 Grafana와 연동의 연동

 

4. 효율적인 저장

· 시계열을 Memory와 Local Disk에 저장

 

5. 간단한 조작

· 각 Serversms Local 저장소에만 의존하여 안정성을 위해 독립적

 

6. Alert

· PromQL을 기반으로 정의하여 치주 정보 유지

· Alertmanager를 통해 Alert Event 발생

 

7. 손쉬운 구축

· Client 라이브러리를 사용하면 Server를 쉽게 구축 가능

 

■ Prometheus를 사용할 때 적합/비적합 환경

1. 적합할 경우

· Metric 기반의 시계열 Data를 저장할 경우

· Dynamic, Micro Server의 Instance에 대한 Metric을 수집할 경우

 

2. 비적합할 경우

· Event Log나 개별 Event를 저장할 경우

· Email 주소나 User 이름과 같이 Cardinarity가 높은 Data를 저장할 경우

· 높은 정확성이 요구될 경우

 

Prometheus의 단점

1. 확장성 문제

· Prometheus는 단일 host로 Local Disk에 Data를 저장, 관리

· 따라서, Metric을 수집해야 할 Target Server가 증가한다면 관리해야 하는 Data가 증가함에 따라 Server의 부하가 발생

 

2. 가용성(HA) 문제

· Prometheus는 단일 Server로 Server-Side-Pool 방식으로 Data를 수집하기 때문에 Server가 Down 되거나, Restart, Fetch와 같은 유지보수 작업시에 Metric 수집이 불가

(Federation 방식으로 문제 해결을 권장하고 있음)

 

3. Retention 문제

· Prometheus는 Metric을 수집해와서 Memory에 2시간 가량 저장

· 이 후, Local Disk에 덤프 형식으로 Metric을 저장

· 따라서 어느 정도의 시간이 흐르면 오래된 Data 값은 조회가 불가능

 

※ 위 3가지의 문제점은 Thanos Open Source Monitoring Tool로 보완 가능!

 

■ Prometheus 구축

1. Prometheus.yaml File 생성

# 기본적인 전역 설정
global:
  scrape_interval: 15s
  evaluation_interval: 15s
  
# Alertmanager 설정
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager: 9093

# 규칙을 처음 한번 로딩 후 
rule_files:
  # - “first_rules.yml”
  # - “second_rules.yml”
  
# 메트릭을 수집할 엔드포인트를 설정 (이후 Target Server 증설 시 추가)
scrape_configs:
  - job_name: ‘prometheus’
    static_configs:
    - targets: [‘localhost:9090’]

 

2. Docker를 이용하여 Prometheus Install

$ docker run -d --net=host -v  /home/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml --name prometheus-server prom/prometheus
$ docker run -d \ -v "/proc:/host/proc" \ -v "/sys:/host/sys" \ -v "/:/rootfs" \ --net="host" \ --name=prometheus \ quay.io/prometheus/node-exporter:v0.13.0 \ -collector.procfs /host/proc \ -collector.sysfs /host/sys \ -collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)
$ curl localhost:9090/metrics

 

3. Target Server 증설 시

1) Prometheus Config File에 추가로 수집할 Target 추가

scrape_configs:
  - job_name: ‘Target’
    static_configs:
    - targets: [‘172.22.1.212:9100’]

 

2) Metric을 수집 할 Target Server 추가 후 Docker Restart

$ docker restart prometheus-server

 

■ Prometheus 화면

'DevOps > Monitoring' 카테고리의 다른 글

[Monitoring] Thanos  (0) 2022.04.07
[Monitoring] Grafana  (0) 2022.04.07