본문 바로가기
FastCampus/22) Prometheus, Grafana

Prometheus와 Grafana를 이용한 실시간 모니터링 시각화 - 1

by tonyhan18 2022. 12. 14.
728x90

p1. Introduction

jinnedu (github.com)

 

jinnedu - Overview

jinnedu has 6 repositories available. Follow their code on GitHub.

github.com

 

sudo apt update

sudo apt intall -y docker.io

 

아키텍쳐와 구성 요소 파악

exporter -> 메트릭 수집 및 포트 오픈(nodeexporter, sqlexporter ...)

prometheus -> 메트릭 수집 및 규칙 확인

grafana  -> 데이터 시각화

alertmanager(prometheus) -> 알림 발송

pushgateway(prometheus) -> push 방식 사용

p2. promethus

prometheus란 무엇인가?

CNCF 리눅스 산하조직, Prometheus는 GRADUATED에 속해 있다.

1. 메트릭 이름과 키-값 쌍으로 이뤄진 다차원 데이터 모델

<메트릭 이름>{<라벨 이름>=<라벨 값>}<메트릭 값>

 

2. 다차원 데이터 모델 활용을 위한 쿼리 언어

PromQL - 실시간으로 시계열 데이터를 선택 및 가공

 

3. HTTP를 이용한 PULL 방식 메트릭 수집

장점

- 브라우저를 통한 확인 가능

- 고가용성을 위한 다수의 모니터링 용이

- 모니터링 서버 변경 용이

 

단점

- 새로운 호스트 발생 시 추가 필요

- 모니터링 서버 부하(PUSH 방식보다 상대적으로 서버 부하가 높다)

 

---

 

"up" 으로 대상의 데이터가 정상 수집되는지 아닌지를 확인할 수 있다.

특정 타겟에 라벨을 추가해주어서 데이터가 정상적으로 수집되고 있는지 확인가능

 

또 특정 경로로부터 데이터를 받아올 수도 있다.

 

/etc/hosts 설정

localhost 127.0.0.1

server1 192.168.10.11

server2 192.168.10.12

server3 192.168.10.13

 

 

Docker를 이용한 Prometheus 설치

Docker란

- 컨테이너 기반의 가상화 툴

- 개발 환경이 맞지 않더라도 손쉽게 배포 가능

- 호스트 시스템의 커널 사용

- 기타 바이너리와 라이브러리 등은 이미지를 통해 가상화

 

docker run

새로운 컨테이너에서 해당 명령어를 실행

-d, --detach : 백그라운드에서 컨테이너 실행 및 컨테이너 ID 출력

--name: 컨테이너에 이름 할당

--network: 컨테이너를 네트워크에 연결

--v, --volume: 컨테이너 볼륨을 호스트 볼륨에 바인딩 -> 컨테이너가 종료되더라도 데이터 유출 방지용

 

docker ps

컨테이너 목록 출력

-a, --all 실행이 아닌 목록도 출력

 

docker logs

컨테이너 로그 출력

-f, --follow 컨테이너 로그 추적

 

docker restart

하나 이상의 컨테이너 재시작

 

docker rm

하나 이상의 컨테이너 제거

-f, --force 실행중인 컨테이너 강제 제거

 

---

 

프로메테우스

--config.file 설정파일 경로 설정

--storage.tsdb.path 메트릭 저장소 경로

--web.enable-lifecycle http 통신을 통한 Prometheus reload 및 shutdown 활성화

--storage.tsdb.retention.time 얼마나 오랫동안 데이터를 유지할지(최소시간, 정확히 이 시간만큼만 저장되는 건 아님)

--log.level 지정된 단계 이상으로 로그를 보임 [debug, info, warn, error]

 

---

 

mkdir -p /prometheus/config /prometheus/data

vi /prometheus/config/prometheus.yaml

 

scrap_configs:
        - job_name: 'prometheus'
          scrape_interval: 3s
          scrap_timeout: 1s
          static_configs:
          - targets:
          - localhost:9090

 

su docker inspect -f '{{json .Config.Cmd}}' prom/prometheus:v2.29.2 | python3 -mjson.tool

-> 프로메테우스 기본 옵션을 확인할 수 있다.

 

su docker run -d --name=prometheus \
-v /prometheus/config:/etc/prometheus \
-v /prometheus/data:/data \
prom/prometheus:v2.29.2 \
--config.file=/etc/prometheus/prometheus.yaml \
--storage.tsdb.path=/data

-d : 백그라운드 실행
-v : 데이터 유실을 피하기 위한 볼륨(설정파일과 데이터)
--config.file : 설치 옵션 추가

 

하지만 이런식으로 배포하면 권한문제로 막히게 된다.

 

su docker logs -f prometheus 2>&1 | grep permission

 

su chown -R 65534:65534 /prometheus

 

 

728x90