사이드 프로젝트로 개발 및 운영중인 서비스에 모니터링 시스템을 적용해 보았습니다.
Prometheus 를 이용하여 데이터 수집 및 저장하고, Grafana 에서 데이터를 시각화 합니다.
제가 서비스 하고 있는 서버는 NAS에서 운영되고 있습니다.
Prometheus + Grafana는 Docker 컨테이너 기반으로 설치하려고 합니다.
Prometheus와 Grafana를 설치하기 위해서 docker-compose.yml 파일을 다음과 같이 작성하였습니다.
version: '3.7'
services:
prometheus:
image: prom/prometheus:v2.53.2
container_name: prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
command:
- "--config.file=/etc/prometheus/prometheus.yml"
networks:
- monitoring_network
grafana:
image: grafana/grafana:9.5.2
container_name: grafana
ports:
- "3000:3000"
volumes:
- /volume1/docker/monitor/grafana:/var/lib/grafana
environment:
GF_SECURITY_ADMIN_USER: admin
GF_SECURITY_ADMIN_PASSWORD: 1234
networks:
- monitoring_network
restart: unless-stopped
networks:
monitoring_network:
driver: bridge
Grafana 대시보드에 추가한 설정 정보를 영구적으로 저장할 수 있게 volumes 설정하였습니다.
/volume1/docker/monitor/grafana는 호스트 머신의 디렉토리이고, /var/lib/grafana는 컨테이너 내부의 디렉토리 입니다. 이 둘을 연결(마운트)하면 Grafana 컨테이너가 삭제되더라도 호스트 머신의 디렉토리에 저장된 데이터를 다시 사용할 수 있습니다.
prometheus.yml 설정 파일은 다음과 같이 작성하였습니다.
Prometheus가 메트릭 데이터를 수집하기 위해 사용되어지는 설정 파일입니다.
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['prometheus:9090']
- job_name: 'spring-actuator'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['192.168.219.102:8082']
Prometheus 자체의 메트릭 데이터와 Spring Boot 애플리케이션의 메트릭 데이터를 수집합니다.
사전 준비를 완료하였으니 Prometheus와 Grafana 컨테이너를 띄워보겠습니다.
root@nklee_nas:/volume1/docker/monitor# docker-compose up -d
서버가 잘 구동되었는지 확인해 볼 차례입니다.
우선 Prometheus가 정상적으로 구동되었는지를 확인해 보기 위해 http://192.168.219.102:9090/ 에 접속해 보겠습니다. 192.168.219.102는 NAS 사설 아이피 입니다.
Status > Targets 에 들어가 보면 prometheus.yml 설정에 추가된 정보를 확인할 수 있습니다.
Prometheus가 동작하는 서버의 메트릭 정보와 spring boot actuator에서 제공하는 메트릭 정보를 잘 수집하고 있습니다.
State 가 UP 상태이면 정상입니다.
이번에는 Grafana 에 접속해 보겠습니다.
http://192.168.219.102:3000/ 접속 후 로그인을 진행합니다. (아이디 패스워드는 docker-compose.yml 파일에 작성되어 있습니다.)
설정 - Connections로 이동하여 Data sources에서 Prometheus를 선택합니다.
URL 입력 후 'Save & test' 버튼을 눌러 정상 연결을 확인합니다.
Prometheus 데이터 소스가 추가되면 대시보드를 그려볼 차례입니다.
https://grafana.com/grafana/dashboards/ 사이트에서 대시보드 템플릿을 제공해 주고 있으니 한번 사용해 보겠습니다.
spring boot 라고 검색하면 아래와 같이 여러 대시보드 템플릿이 보여집니다. 원하는 템플릿을 선택하여 상세 페이지로 이동합니다. 상세 페이지 오른편에 대시보드 ID가 존재하는데 해당 ID를 복사하겠습니다.
이제 Grafana 대시보드로 돌아옵니다.
우측 상단 + 버튼을 클릭 한 후 "Import dashboard" 를 선택합니다.
복사한 대시보드 ID 를 붙여넣기 한 후 Load 버튼을 누르고 데이터 소스에는 Prometheus를 지정합니다.
아래와 같은 대시보드가 만들어졌습니다.
만들어진 패널들을 들여다 보면 아래와 같은 문법이 보입니다.
jvm_memory_used_bytes{instance="$instance", application="$application", id="$memory_pool_heap", namespace="$Namespace"}
이는 Prometheus에서 사용하는 문법으로써 PromQL(Prometheus Query Language) 이라고 부릅니다.
PromQL 이용하여 Prometheus에서 수집된 메트릭 데이터를 조회, 필터링, 집계하는데 사용되는 쿼리 언어입니다.
'개발툴' 카테고리의 다른 글
OpenAI를 이용하여 비정형 데이터 분석하기 (1) | 2024.12.11 |
---|---|
운영중인 사이트 데이터 2중, 3중 백업하기 (3) | 2024.12.05 |
내가 자동화 스크립트를 만드는 이유? (1) | 2024.12.03 |
jenkins 빌드에서 github action 빌드 배포로 이전 (0) | 2024.08.20 |
시놀로지 NAS에 웹 서버 배포 및 운영 (0) | 2024.05.23 |
maven effective pom 활용 (0) | 2019.08.23 |
Fiddler Filter 기능에 대해서 알아보자 (3) | 2019.04.03 |
메이븐 버전 충돌 해결 (8) | 2017.12.13 |