프로메테우스가 서버 리소스 데이터를 수집하고, 수집한 데이터를 그라파나를 통해 시각화하여 대시보드로 보여주는 것이다.
프로메테우스 설정
프로메테우스는 prometheus.yml로 설정을 한다.
프로메테우스에는 데이터를 수집하기 위한 node-exporter와 cadvisor, 서버 이슈가 발생시 알림을 전송하는 alertmanager가 딸려온다. prometheus.yml 설정은 다음과 같다.
# my global config
global:
scrape_interval: 15s # By default, scrape targets every 15 seconds.
evaluation_interval: 15s # By default, scrape targets every 15 seconds.
# scrape_timeout is set to the global default (10s).
# Attach these labels to any time series or alerts when communicating with
# external systems (federation, remote storage, Alertmanager).
external_labels:
monitor: 'maskon_web'
# Load and evaluate rules in this file every 'evaluation_interval' seconds.
rule_files:
- 'alert.rules'
# - "first.rules"
# - "second.rules"
# alert
alerting:
alertmanagers:
- scheme: http
static_configs:
- targets:
- "alertmanager:9093"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 10s
static_configs:
- targets: ['localhost:9090']
- job_name: 'cadvisor'
static_configs:
- targets: ['cadvisor:8080']
- job_name: 'node-exporter'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
static_configs:
- targets: ['node-exporter:9100']
- job_name: 'backend'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
metrics_path: /metrics
# static_configs:
# - targets: ['nginx:80']
dns_sd_configs:
- names: ['maskon_web']
port: 8000
type: A
refresh_interval: 5s
알림을 전송하기 위해서는 추가로 alert.rules로 알림 세팅을 해야한다.
groups:
- name: example
rules:
# Alert for any instance that is unreachable for >2 minutes.
- alert: service_down
expr: up == 0
for: 2m
labels:
severity: page
annotations:
summary: "Instance {{ $labels.instance }} down"
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 2 minutes."
- alert: high_load
expr: node_load1 > 0.5
for: 2m
labels:
severity: page
annotations:
summary: "Instance {{ $labels.instance }} under high load"
description: "{{ $labels.instance }} of job {{ $labels.job }} is under high load."
위와 같이 세팅하고 terminal에 docker-compose up을 입력하면 정상적으로 작동한다.
Docker 환경에서 Grafana, Prometheus 적용시키기
Docker를 기반으로 진행한 프로젝트에서 모니터링 용도의 Grafana와 Prometheus를 적용시키게 되었다.
이에 적용과정을 정리한다.
전제 조건
Docker-compose로 관리되고 있는 Docker환경에서 백엔드는 Django로, 프론트는 React, DB는 Docker 위에서 MySQL로 돌아가고 있는 상태이다. 모든 설정 파일은 .yml로 관리되고 있다. 각 디렉토리마다 DockerFile이 존재한다.
파일 구조
메인 docker-compose.yml
최상위 디렉토리에 docker를 관리하는 docker-compose.yml을 세팅하였다. 세팅은 아래와 같다.
프로메테우스가 서버 리소스 데이터를 수집하고, 수집한 데이터를 그라파나를 통해 시각화하여 대시보드로 보여주는 것이다.
프로메테우스 설정
프로메테우스는 prometheus.yml로 설정을 한다.
프로메테우스에는 데이터를 수집하기 위한 node-exporter와 cadvisor, 서버 이슈가 발생시 알림을 전송하는 alertmanager가 딸려온다. prometheus.yml 설정은 다음과 같다.
알림을 전송하기 위해서는 추가로 alert.rules로 알림 세팅을 해야한다.
위와 같이 세팅하고 terminal에 docker-compose up을 입력하면 정상적으로 작동한다.
'개발 > DevOps' 카테고리의 다른 글