반응형
1. 프로메테우스(prometheus) 란?
SoundCloud 사에서 만든 오픈 소스 기반 모니터링 솔루션
- 많은 도큐먼트와 커뮤니티 보유
go 언어로 만들어짐
하드웨어 레벨 / 애플리케이션 모니터링이 가능
- 마이크로 서비스
- multiple language 지원(java, go, 등)
- window/linux
pull 방식 아키텍쳐
- push 방식은 패킷 손실. 수집처 서버의 CPU 사용율. 그리고 단일장애의 위험성이 있음
- pull 방식은 tcp/udp 오버헤드가 적고, 집계가 push 보다 쉬워짐.
- 부하가 높은 상황에서는 fail point 를 비교적 예방 할 수 있음
하지만 단점도?
- 수집 메트릭과 룰이 많아질수록 configuration 이 복잡해짐
- 단일 노드 동작으로 스케일 아웃이 어려움
2. 왜 프로메테우스?
다양한 써드파티 Exporter 가 있다.
시계열 데이터 모델
PromQL 이라는 쉽고 간결한 자체 쿼리 언어 지원
단일 노드 사용하여 수집
많은 회사에서 사용하고 있고, kubernetes 에서도 prometheus 사용을 장려하고 있다.
3.프로메테우스 구조
prometheus server
- main component
- http 서버 : PromQL 쿼리를 받음
- 시계열 데이터 베이스 storage : metric 저장
- Worker : metric 반환
Exporter
- fetch metric, convert to correct format, expose metric
- 다양한 종류의 익스포터 지원
- 해당 노드에서 발생하는 HW 메트릭 정보 수집
AlertManager
- 알림이 발생하는 Rule 을 정의해서 부합하는 경우 알림 전송
Jobs
- Single Application
- 모니터 대상
** 역시 Pull Mechanism 이 가장 큰 특징 !!!
- Data Retrieval Worker 가 pushgateway, prometheus targets으로 pull을 한다. 푸시가 아니라 pull 방식으로 수집한다.
동작 방식을 간단히 요약하면..
- Jobs / Exporters 는 실제 메트릭을 수집하는 프로세스, 에이전트
- Prometheus Server 가 Pull 방식으로 데이터를 가져갈 수 있게 HTTP 엔드포인트를 제공
- GET 방식 요청을 날려 메트릭 정보를 수집하고, TSDB 에 저장.
4. 프로메테우스 설치 (docker-compose)
how? (구성 방법)
- 아래 방법은 prod 수준이 아닌 빠른 구성이며, 모든 설정은 기본 값으로 되있다.
- docker, docker-compose 가 미리 설치되어 있어야 한다.
a) 프로메테우스 구성
- 가장 기본적인 구성은 프로메테우스 서버, 그라파나 조합이다.
- 아래는 수집툴 node-exporter도 같이 띄워주는 설정이다
version: '3.7'
volumes:
prometheus_data: {}
grafana_data: {}
networks:
front-tier:
back-tier:
driver: bridge
services:
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus/:/etc/prometheus/
- ./prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/usr/share/prometheus/console_libraries'
- '--web.console.templates=/usr/share/prometheus/consoles'
ports:
- 9090:9090
links:
- cadvisor:cadvisor
- alertmanager:alertmanager
depends_on:
- cadvisor
networks:
- back-tier
- front-tier
restart: always
node-exporter:
image: prom/node-exporter
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.sysfs=/host/sys'
- --collector.filesystem.ignored-mount-points
- "^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/aufs)($$|/)"
ports:
- 9100:9100
networks:
- back-tier
restart: always
deploy:
mode: global
alertmanager:
image: prom/alertmanager
ports:
- 9093:9093
volumes:
- ./alertmanager/:/etc/alertmanager/
networks:
- back-tier
restart: always
command:
- '--config.file=/etc/alertmanager/config.yml'
- '--storage.path=/alertmanager'
grafana:
image: grafana/grafana
user: "472"
depends_on:
- prometheus
ports:
- 3000:3000
volumes:
- ./grafana_data:/var/lib/grafana
- ./grafana/provisioning/:/etc/grafana/provisioning/
env_file:
- ./grafana/config.monitoring
networks:
- back-tier
- front-tier
restart: always
b) process-exporter
- 일반적으로 node-exporter 로 h/w 정보를 수집하긴하지만, 프로세스 수준으로 데이터를 수집이 필요할때 사용하면 좋다.
- https://github.com/ncabatoff/process-exporter/releases/tag/v0.7.10
- release 버전에 맞게 받을 수 있음
- cofnig 설정방법
- cat /proc/[processid]/cmline 의 정규식에 걸리는 애들
process_names: - name: "{{.Comm}}" cmdline: - '.+'
- 위 process-exporter 구성은 선택사항이다. 필요에 따라 구성해도 좋다.
c) prometheus.yml 설정
- 수집 서버 설정과, 방식, 룰 들을 셋팅하는 설정 파일이다
# 기본적인 전역 설정
global:
scrape_interval: 15s # 15초마다 매트릭을 수집한다. 기본은 1분이다.
evaluation_interval: 15s # 15초마다 매트릭을 수집한다. 기본은 1분이다.
# 'scrpae_timeout' 이라는 설정은 기본적으로 10초로 세팅되어 있다.
# Alertmanager 설정
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# 매트릭을 수집할 엔드포인트를 설정. 여기서는 Prometheus 서버 자신을 가리키는 설정을 했다.
scrape_configs:
# 이 설정에서 수집한 타임시리즈에 'job=<job_name>'으로 잡의 이름을 설정한다.
- job_name: 'prometheus'
# 'metrics_path'라는 설정의 기본 값은 '/metrics'이고
# 'scheme'라는 설정의 기본 값은 'http'이다.
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100']
- job_name: 'process_exporter'
static_configs:
- targets: ['localhost:9256']
- prometheus 설정파일과 볼륨 마운팅 된 위치에 위 설정파일을 추가한다
- 위 주석을 간단하게 달았지만, 수집 서버에 대한 정보가 scrape_configs 에 모두 기술되어야 한다
- 모든 구성이 끝나면 docker-compsoe 명령을 이용해 컨테이너를 띄운다.
(구성된 이미지나 스크린샷들은.. 나중에 추가..)
5) 소감..?
- 이번에 회사에서 프로메테우스 신규 구성을 맡아 진행해봤는데, 역시 공부할게 아직도 많다.
- 그라파나에서 완성된 대시보드를 import 하면 수집쪽 셋팅 후 정말 손쉽게 구성할 수 있다.
- 데이터 엔지니어에게 있어 모니터링은 정말 중요한 작업이라는걸 다시 느꼈다.
반응형
'오픈 소스' 카테고리의 다른 글
open-webui /ollama 를 이용해 내 컴퓨터에 ChatGPT 구축하기 (0) | 2024.09.20 |
---|---|
zeppelin 을 이용한 spark 개발 환경 구성 및 사용법 (0) | 2021.09.05 |
아파치 슈퍼셋(superset) 구성 및 기본 사용법 (0) | 2021.08.21 |
앤서블(Ansible) 구성 및 기본 사용법 (0) | 2021.06.11 |
도커(Docker) 구성 및 기본 사용법 (0) | 2021.06.02 |