Docker 및 Docker-compose를 설치했다는 가정하에 작성
- Docker-compose.yml 작성
version: '3'
services:
node_exporter:
image: prom/node-exporter:latest
container_name: node_exporter
ports:
- "9100:9100"
restart: always
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- /home/rocky/dev_monitor/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- /home/rocky/dev_monitor/prometheus/alert.rules.yml:/etc/prometheus/alert.rules.yml
ports:
- "9090:9090"
restart: always
alertmanager:
image: prom/alertmanager:latest
container_name: alertmanager
volumes:
- /home/rocky/dev_monitor/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml
- /home/rocky/dev_monitor/alertmanager/templates:/etc/alertmanager/templates
ports:
- "9093:9093"
restart: always
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
volumes:
- grafana-data:/var/lib/grafana
restart: always
volumes:
grafana-data:
- node_exporter : 시스템 지표 수집
- Prometheus : metric 수집기
- alertmanager : 각종 알림 관리자
- Grafana : 모니터링 시각화 서비스
Docker container 형식으로 돌리는 것이기 때문에, 사라지면 안되는 file들은 mount를 시켜야 한다.
mount를 설정한 부분
prometheus:
volumes:
- /home/rocky/dev_monitor/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
- /home/rocky/dev_monitor/prometheus/alert.rules.yml:/etc/prometheus/alert.rules.yml
alertmanager:
volumes:
- /home/rocky/dev_monitor/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml
- /home/rocky/dev_monitor/alertmanager/templates:/etc/alertmanager/templates
grafana:
volumes:
- grafana-data:/var/lib/grafana
각각 경로에 맞게 폴더와 파일을 만든 뒤, Docker container로 올릴 때, mount 해서 올리자.
📌 참고 | Mount 내용
alertmanager
- alertmanager.yml
global:
resolve_timeout: 5m
route:
group_by: ['alertname', 'instanceDown']
group_wait: 20s
group_interval: 5m
repeat_interval: 60m
receiver: 'telegram'
receivers:
- name: 'telegram' # 텔레그램 외에도 많은 플랫폼이 있음.
telegram_configs:
- bot_token: '봇 토큰'
chat_id: 챗_id
send_resolved: true
message: '{{ template "monitoring-template" . }}' # 내가 만든 템플릿.
templates:
- '/etc/alertmanager/templates/*.tmpl' # 템플릿 경로
- telegram.tmpl (서버 다운 될 시, 알림 템플릿) — 예시
{{ define "monitoring-template" }}
** {{ if eq .Status "firing" }}🔥{{ else if eq .Status "resolved" }}✅{{ end }} {{ .Status }} **
{{ range .Alerts }}
Instance: {{ .Labels.instance }}
Job: {{ .Labels.job }}
{{ if eq .Status "firing" }}
{{ .Annotations.summary }} - down
{{ else if eq .Status "resolved" }}
{{ .Annotations.summary }} - up
{{ else }}
{{ .Annotations.summary }}
{{ end }}
{{ end }}
{{ end }}
Prometheus
- alert.rules.yml
알림 규칙을 정의한 파일내용이다.
사용자에 맞게 유동적으로 변경가능하다.
groups:
- name: server_down
rules:
- alert: InstanceDown
expr: up == 0
for: 5m
labels:
severity: critical
annotations:
summary: "Instance {{ $labels.instance }} "
description: "{{ $labels.instance }} of job {{ $labels.job }} "
- Prometheus.yml
# 해당 파일은 서버정보가 담겨 있기 때문에 생략.
# 아래와 같은 형식으로 서버마다 작성하면 됨.
- job_name: "Job-name"
static_configs:
- targets: ["IP_addr:9100"]


댓글 남기기