1. Prometheus 구성 목적
본인은 현재 시스템을 하이브리드 클라우드 형태로 운영하고 있는데 (AWS, NCP, GCP, Azure, IDC센터 및 사내 전산실 모두 관리중이다.)
프로젝트나 서비스 별로 플랫폼과 환경이 달라서 어느 정도의 통합이 필요한 상황이다... (혼자서 관리하기에 너무 어렵다.)
지금 가장 시급한 것은 모니터링 통합이라고 생각했고, 그래서 여러 모니터링 서비스를 찾아보던 중 prometheus를 알게되었다.
현재 대표적인 모니터링 솔루션으로는 zabbix, telegraf, cloudwatch, scouter 등 많이들 있지만, prometheus로 진행해보기로 결정하였다.(몇개는 이미 포스팅하였다. )
이유는 다음과 같다.
- 시계열 데이터베이스를 사용한다. (TSDB)
데이터가 시간에 관해 순서가 매겨져 있다. 즉, 관측이 연속되면 서로 상관관계를 가질 수 있게 된다. - 확장성이 뛰어나다.
솔루션 agent 마다 동작방식의 차이는 있지만, 일단 prometheus의 경우 기본적으로 pull 방식으로 동작한다.
즉, 모니터링 대상이 추가될때 별 다른 설정 없이 메트릭을 수집하는 node-expoter만 추가해주면 된다.
예를 들어, zabbix(물론 zabbix는 수집 방식을 선택할 수 있다.), scouter 등의 솔루션은 monitoring server에 대한 configure가 필요하다. - 여러 expoter가 오픈소스로 배포되고 있다. (가장 큰 이유이기도 하다.)
기존적인 시스템 리소스 뿐만 아니라, JVM, jenkins, nginx, apache, snmp 등등 엄청나게 많은 expoter 들이 공유되고 있다. 혼자서 리소스, CICD, Cloud 서비스, 사내 시스템, 애플리케이션, 로그 등등 모든 모니터링을 통합하려는 나에게 너무 큰 도움이 될 것 같다.
그럼 이제 prometheus 기본 구성을 진행해보겠다.
2. 프로메테우스 서버 구축
내가 계획하는 통합 모니터링의 초기 구성 시 필요한 내용은 다음과 같다.
모니터링 설정 및 데이터(메트릭) 보관
- 현재 container로 구성하는데, 재 시작 마다 지정한 이미지 기반으로 실행되기 때문에 container 내부에 데이터를 보관하기에는 위험성이 존재한다.
- 그래서 프로메테우스 configure 파일 및 모니터링 대상 yml, 메트릭 등 데이터는 분류하여 volume 옵션으로 관리한다.
현재 필요한 내용은 다음과 같다.
- 프로메테우스 configure 파일과 메트릭 저장 위치(디렉터리) 생성 및 설정 변경
- dockerfile 생성, docker-compose로 실행
- 보관된 데이터로 새로운 프로메테우스 container를 동작시켜도 정상적으로 연동되는지 확인
2.1 prometheus.conf, directory
# prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 30s
body_size_limit: 15MB
sample_limit: 1500
target_limit: 30
label_limit: 30
label_name_length_limit: 200
label_value_length_limit: 200
# scrape_timeout is set to the global default (10s).
# expoter group
scrape_configs:
- job_name: 'prometheus-server'
static_configs:
- targets: ['localhost:9090']
- job_name: 'linux-server'
file_sd_configs:
- files:
- linux_targets.json
refresh_interval: 5m
- job_name: 'windows-server'
file_sd_configs:
- files:
- windows_targets.json
refresh_interval: 5m
- job_name: 'jvm'
file_sd_configs:
- files:
- jvm_targets.json
refresh_interval: 5m
# 데이터 저장 설정
tsdb:
path: /data # 데이터 저장 경로
retention_time: 30d # 데이터 보관 기간 설정
wal_compression: true # WAL 압축 설정
기본적인 prometheus configure이다. 메트릭 수집 대상과 데이터 저장 설정을 추가하였는데, 메트릭 수집 대상의 경우 대상의 수가 많아 prometheus.yml에서 구성하기에는 관리적으로 어려움이 있다.(추후 추가되거나, 수정하는 부분에 대해서..) 그래서 메트릭 수집 대상을 분류하여(linux, windows, java 등..) 해당 json 파일을 만들어서 참조하도록 구성하였다.
두번재로 tsdb에 대해서는 데이터 경로 및 기타 설정을 진행할 수 있는데, prometheus 내 /data 디렉터리에 chunk 파일이 저장되는 것이다.
2.2 dockerfile, docker-compose
# Dockerfile
FROM prom/prometheus:v2.52.0
RUN mkdir /prometheus-data
COPY prometheus.yml /etc/prometheus/prometheus.yml
EXPOSE 9090
CMD [ "--config.file=/etc/prometheus/prometheus.yml", \
"--storage.tsdb.path=/prometheus-data" ]
# docker-compose.yml
version: '3'
services:
prometheus:
build: .
ports:
- "9090:9090"
volumes:
- /path/to/prometheus/data:/prometheus-data
dockerfile과 docker-compose 구성을 진행하였다.
근데 작성하면서 느꼈는데 굳이 dockerfile까지 필요가 없을 것 같다.. 프로메테우스 이미지를 계속 업데이트 할 것도 아니고.. 어차피 동일 이미지(prometheus:v2.52.0)를 사용할텐데 말이다.
해당 구성을 docker compose로 변경하겠다.
실제 적용될 docker-compose
# docker-compose.yml
version: '3'
services:
prometheus:
image: prom/prometheus:v2.52.0
container_name: infra-promethus-server
# build: .
ports:
- "9090:9090"
command:
- --config.file=/etc/prometheus/prometheus.yml
- --storage.tsdb.path=/data
volumes:
- /home/monitoring/prometheus.yml:/etc/promethus/promethus.yml
- /data:/data
restart: always
logging:
driver: 'json-file'
options:
max-size: '10m'
max-file: '10'
# docker compose -f docker-compose.yml up -d
dockerfile의 내용으로 docker compose를 구성하였다.
간단히 설명하자면,
- image: 실행할 docker 이미지이다.
- container_name: 도커 컨테이너 이름이다. 맘대루 지었다.
- ports: 컨테이너 내부와 외부를 매핑할 포트정보이다. 도커 명령어와 같이 앞이 local 뒤에 container port이다.
- command: 컨테이너가 동작하면 실행될 명령이다. prometheus가 실행될때 필요한 기본 명령을 작성했다.
- volumes: 컨테이너와 마운트될 정보이다. 포트와 마찬가지로 앞이 local 뒤가 컨테이너 내부이다.
- restart: local이 재부팅 되거나 할때 컨테이너가 자동 실행되게끔 만들었다.
- logging: 컨테이너 로그 저장 옵션이다.
해당 compose로 prometheus 동작에 성공하였다.(깜빡하고 스샷을 안찍었네..)
Data, conf.yml, volume 등 연결이 확인되었고, 이제 data가 dump 가능할지 확인해보겠다.
'DevOps > Monitoring_모니터링' 카테고리의 다른 글
[Prometheus] 프로메테우스 데이터 기본 저장경로 (+docker compose) (0) | 2024.07.09 |
---|---|
[Prometheus] 프로메테우스 데이터 마이그레이션 (docker volume 옵션) (0) | 2024.07.08 |
[Grafana] Grafana Image Renderer (1) | 2023.11.20 |
[모니터링] Grafana Slack 연동 (0) | 2023.11.16 |
[모니터링] CloudWatch + Grafana 모니터링 구축 (0) | 2023.11.13 |