๐Ÿ“Š ์„œ๋ฒ„๊ฐ€ ์•„ํ”„๊ธฐ ์ „์— ์•Œ์•„์•ผ ํ•œ๋‹ค: Prometheus + Grafana ๋ชจ๋‹ˆํ„ฐ๋ง ๊ตฌ์ถ•๊ธฐ

“์„œ๋ฒ„ CPU๊ฐ€ 90%์ธ๋ฐ ์•„๋ฌด๋„ ๋ชฐ๋ž๋‹ค.”

์ด๋Ÿฐ ์ƒํ™ฉ์„ ๋ง‰๊ธฐ ์œ„ํ•œ ๊ฒŒ ๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๋ฏธ์…˜์€ ์šด์˜ํŒ€์žฅ์˜ ์š”์ฒญ์œผ๋กœ ์„œ๋ฒ„ ์ƒํƒœ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๋Œ€์‹œ๋ณด๋“œ์™€ ์ด์ƒ ์‹œ ์•Œ๋ฆผ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ง์ ‘ ํ•ด๋ณด๊ณ  ๋‚˜์„œ ๋А๋‚€ ๊ฑด, “์•„, ์ด๋ž˜์„œ DevOps๊ฐ€ ํ•„์š”ํ•˜๊ตฌ๋‚˜” ์˜€์Šต๋‹ˆ๋‹ค.


๐Ÿ“‹ ๋ชจ๋‹ˆํ„ฐ๋ง 3์ธ๋ฐฉ ์†Œ๊ฐœ

์ด๋ฒˆ ๋ฏธ์…˜์˜ ํ•ต์‹ฌ์€ ์„ธ ๊ฐ€์ง€ ๋„๊ตฌ๊ฐ€ ์„œ๋กœ ํ†ต์‹ ํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋„๊ตฌํฌํŠธ์—ญํ• ๋น„์œ ์„ค์น˜ ์œ„์น˜
Node Exporter9100์„œ๋ฒ„ ์ง€ํ‘œ๋ฅผ ๋ฐ–์œผ๋กœ ๋‚ด๋ณด๋ƒ„๋งˆ์ดํฌ ๐ŸŽค์›น์•ฑ ์„œ๋ฒ„ (191)
Prometheus9090์ง€ํ‘œ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์ €์žฅ๋…น์Œ๊ธฐ ๐Ÿ“ผ๊ด€์ œ ์„œ๋ฒ„ (178)
Grafana3000๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐํ™”TV ํ™”๋ฉด ๐Ÿ“บ๊ด€์ œ ์„œ๋ฒ„ (178)

๋ฐ์ดํ„ฐ ํ๋ฆ„์€ ํ•œ ๋ฐฉํ–ฅ์ž…๋‹ˆ๋‹ค.

191๋ฒˆ(9100) ๐Ÿ“ข โ†’ ๐Ÿ‘‚ 178๋ฒˆ(9090) โ†’ ๐Ÿ“บ 178๋ฒˆ(3000)

Prometheus๋Š” Pull ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ง์ ‘ ๋Œ์•„๋‹ค๋‹ˆ๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธ์–ด์˜ค๋Š” ๋ฐฉ์‹์ด์—์š”. Push ๋ฐฉ์‹๊ณผ ๋‹ฌ๋ฆฌ ์ˆ˜์ง‘ ์ฃผ๊ธฐ์™€ ๋Œ€์ƒ์„ ์ค‘์•™์—์„œ ํ†ต์ œํ•  ์ˆ˜ ์žˆ์–ด ๊ด€๋ฆฌ๊ฐ€ ํŽธํ•ฉ๋‹ˆ๋‹ค.


Step 1: Node Exporter ์„ค์น˜ โ€” ์›น ์„œ๋ฒ„์— ๋งˆ์ดํฌ ๋‹ฌ๊ธฐ ๐ŸŽค

์›น์•ฑ ์„œ๋ฒ„(192.168.10.191)์— ์ ‘์†ํ•ด์„œ Node Exporter๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

sudo apt update
sudo apt install prometheus-node-exporter -y

์„ค์น˜ํ•˜๋ฉด 9100๋ฒˆ ํฌํŠธ๋กœ CPU, ๋ฉ”๋ชจ๋ฆฌ, ๋””์Šคํฌ, ๋„คํŠธ์›Œํฌ ๋“ฑ ์ˆ˜์‹ญ ๊ฐ€์ง€ ์ง€ํ‘œ๋ฅผ ์ž๋™์œผ๋กœ ๋‚ด๋ณด๋‚ด๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๊ด€์ œ ์„œ๋ฒ„(178)์—์„œ๋งŒ ์ด ํฌํŠธ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐฉํ™”๋ฒฝ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

sudo ufw allow from 192.168.10.178 to any port 9100

๐Ÿ’ก ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…: ๋งŒ์•ฝ Nginx๊ฐ€ ์‹คํ–‰ ์•ˆ ๋œ๋‹ค๋ฉด Apache2๊ฐ€ 80๋ฒˆ ํฌํŠธ๋ฅผ ๋ชฐ๋ž˜ ์ ์œ  ์ค‘์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. sudo systemctl stop apache2 && sudo systemctl disable apache2๋กœ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.


Step 2: Prometheus ๊ตฌ์ถ• โ€” ๋…น์Œ๊ธฐ ์„ธํŒ… ๐Ÿ“ผ

๊ด€์ œ ์„œ๋ฒ„(192.168.10.178)์—์„œ Prometheus๋ฅผ ์„ค์น˜ํ•˜๊ณ , ์–ด๋–ค ์„œ๋ฒ„๋ฅผ ๊ฐ์‹œํ• ์ง€ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

sudo apt install prometheus -y

์„ค์ • ํŒŒ์ผ(prometheus.yml)์˜ ํ•ต์‹ฌ:

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']   # ์ž๊ธฐ ์ž์‹ ๋„ ๊ฐ์‹œ

  - job_name: 'web-server'
    static_configs:
      - targets: ['192.168.10.191:9100']  # ์›น์•ฑ ์„œ๋ฒ„ ๊ฐ์‹œ
        labels:
          instance: 'Web-App-Server'

rule_files:
  - "/etc/prometheus/rules/*.yml"    # ์•Œ๋ฆผ ๊ทœ์น™ ํŒŒ์ผ ์œ„์น˜

์•Œ๋ฆผ ๊ทœ์น™ ํŒŒ์ผ(alerts.yml)์€ ๋ฐ˜๋“œ์‹œ ๋ณ„๋„ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…: groups: ํ•ญ๋ชฉ์„ prometheus.yml ๋ณธ์ฒด์— ๋„ฃ์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋“œ์‹œ ๋ณ„๋„ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

# /etc/prometheus/rules/alerts.yml
groups:
  - name: server_alerts
    rules:
      - alert: InstanceDown
        expr: up == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "์„œ๋ฒ„ ๋‹ค์šด๋จ: {{ $labels.instance }}"
sudo systemctl restart prometheus
sudo systemctl status prometheus  # Active: active (running) ํ™•์ธ ํ•„์ˆ˜

Step 3: Grafana ์„ค์น˜ โ€” TV ํ™”๋ฉด ์ผœ๊ธฐ ๐Ÿ“บ

Grafana๋Š” ๊ณต์‹ ์ €์žฅ์†Œ๊ฐ€ ๋”ฐ๋กœ ์žˆ์–ด์„œ, ๋จผ์ € ์ €์žฅ์†Œ๋ฅผ ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

# GPG ํ‚ค ๋‹ค์šด๋กœ๋“œ
wget -q -O - https://apt.grafana.com/gpg.key | \
  sudo gpg --dearmor -o /usr/share/keyrings/grafana.gpg

# ์ €์žฅ์†Œ ์ถ”๊ฐ€
echo "deb [signed-by=/usr/share/keyrings/grafana.gpg] \
  https://apt.grafana.com stable main" | \
  sudo tee /etc/apt/sources.list.d/grafana.list

# [์ค‘์š”] ๋ชฉ๋ก ๊ฐฑ์‹  ํ›„ ์„ค์น˜
sudo apt update
sudo apt install grafana -y

๐Ÿ’ก ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…: ์ €์žฅ์†Œ ์ถ”๊ฐ€ ํ›„ apt update๋ฅผ ๋น ๋œจ๋ฆฌ๋ฉด “ํŒจํ‚ค์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ” ์˜ค๋ฅ˜๊ฐ€ ๋‚ฉ๋‹ˆ๋‹ค. ๊ผญ ๊ฐฑ์‹  ํ›„ ์„ค์น˜ํ•˜์„ธ์š”.

sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo ufw allow 3000

Step 4: Grafana ์›น ์„ค์ • โ€” ๋ชจ๋“  ๊ฒƒ์„ ์—ฐ๊ฒฐํ•˜๋‹ค ๐Ÿ”—

๋ธŒ๋ผ์šฐ์ €์—์„œ http://192.168.10.178:3000 ์œผ๋กœ ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ๊ณ„์ •์€ admin / admin์ž…๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์†Œ์Šค ์—ฐ๊ฒฐ ์ˆœ์„œ:

  1. ์ขŒ์ธก ๋ฉ”๋‰ด โ†’ Connections โ†’ Data sources โ†’ Prometheus ์„ ํƒ
  2. URL ์ž…๋ ฅ: http://localhost:9090 (๊ด€์ œ ์„œ๋ฒ„ ๋‚ด๋ถ€ ํ†ต์‹ ์ด๋ผ localhost)
  3. Save & Test ํด๋ฆญ โ†’ ์ดˆ๋ก์ƒ‰ ์„ฑ๊ณต ๋ฉ”์‹œ์ง€ ํ™•์ธ

๋Œ€์‹œ๋ณด๋“œ ๊ฐ€์ ธ์˜ค๊ธฐ:

  1. Dashboards โ†’ New โ†’ Import
  2. ID 1860 ์ž…๋ ฅ (Node Exporter Full โ€” ๊ฐ€์žฅ ์œ ๋ช…ํ•œ ์„œ๋ฒ„ ๋ชจ๋‹ˆํ„ฐ๋ง ๋Œ€์‹œ๋ณด๋“œ) โ†’ Load
  3. Data source๋กœ Prometheus ์„ ํƒ โ†’ Import

Grafana ๋Œ€์‹œ๋ณด๋“œ ํ™”๋ฉด – Node Exporter Full ์ ์šฉ ๋ชจ์Šต


์ตœ์ข… ํ…Œ์ŠคํŠธ: ์„œ๋ฒ„๋ฅผ ์‹ค์ œ๋กœ ๊ดด๋กญํ˜€๋ณด์ž ๐Ÿ”ฅ

๋ชจ๋‹ˆํ„ฐ๋ง์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์›น์•ฑ ์„œ๋ฒ„์— ๋ถ€ํ•˜๋ฅผ ์ค๋‹ˆ๋‹ค.

# ์›น์•ฑ ์„œ๋ฒ„(191)์—์„œ ์‹คํ–‰
sudo apt install stress -y
stress --cpu 4 --timeout 120s   # CPU 4๊ฐœ๋ฅผ 2๋ถ„๊ฐ„ 100% ์‚ฌ์šฉ

๋™์‹œ์— Grafana ํ™”๋ฉด์—์„œ web-server ๋Œ€์‹œ๋ณด๋“œ๋ฅผ ๋ณด๋ฉด CPU Usage ๊ทธ๋ž˜ํ”„๊ฐ€ ๊ธ‰๊ฒฉํžˆ ์˜ฌ๋ผ๊ฐ€๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ์ค‘ Grafana CPU ๊ทธ๋ž˜ํ”„ ์ƒ์Šน ํ™”๋ฉด

๊ทธ๋ž˜ํ”„๊ฐ€ ์น˜์†Ÿ๋Š”๋‹ค๋ฉด ๋ชจ๋‹ˆํ„ฐ๋ง ๊ตฌ์ถ• ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค! ๐ŸŽ‰


๐Ÿ“‚ ํ•ต์‹ฌ ์„ค์ • ํŒŒ์ผ ์ด์ •๋ฆฌ

ํŒŒ์ผ ๊ฒฝ๋กœ์†Œ์† ์„œ๋ฒ„์—ญํ• 
/etc/prometheus/prometheus.yml๊ด€์ œ(178)์–ด๋–ค ์„œ๋ฒ„๋ฅผ ๊ฐ์‹œํ• ์ง€ ์ •์˜
/etc/prometheus/rules/alerts.yml๊ด€์ œ(178)์œ„ํ—˜ ๊ธฐ์ค€(CPU 80% ๋“ฑ) ์ •์˜
/etc/apt/sources.list.d/grafana.list๊ด€์ œ(178)Grafana ํŒจํ‚ค์ง€ ์ €์žฅ์†Œ ๋“ฑ๋ก
/etc/nginx/sites-available/default์›น(191)Nginx ์š”์ฒญ ์ฒ˜๋ฆฌ ์„ค์ •

๐Ÿ’ก ๋ฏธ์…˜์„ ๋งˆ์น˜๋ฉฐ

๋ชจ๋‹ˆํ„ฐ๋ง ์‹œ์Šคํ…œ ๊ตฌ์ถ•์˜ ํ•ต์‹ฌ ๋ฉ”์‹œ์ง€๋Š” ์ด๊ฒƒ์ž…๋‹ˆ๋‹ค.

“๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด ํ›„์— ์•Œ๋ฉด ๋Šฆ๋‹ค. ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๊ธฐ ์ „์— ์•Œ์•„์•ผ ํ•œ๋‹ค.”

Node Exporter๊ฐ€ ์ง€ํ‘œ๋ฅผ ๋‚ด๋ณด๋‚ด๊ณ , Prometheus๊ฐ€ ๊ทธ๊ฑธ ๊ธ์–ด ์ €์žฅํ•˜๊ณ , Grafana๊ฐ€ ์˜ˆ์˜๊ฒŒ ์‹œ๊ฐํ™”ํ•˜๋Š” ์ด 3๋‹จ๊ณ„ ๊ตฌ์กฐ๋Š” ์‹ค์ œ ๊ธฐ์—… ์šด์˜ ํ™˜๊ฒฝ์—์„œ ๊ฑฐ์˜ ํ‘œ์ค€์ฒ˜๋Ÿผ ์“ฐ์ž…๋‹ˆ๋‹ค. ์ง์ ‘ ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๋ฉฐ ๊ทธ๋ž˜ํ”„๊ฐ€ ์˜ฌ๋ผ๊ฐ€๋Š” ๊ฑธ ๋ณด๋Š” ์ˆœ๊ฐ„, “์ด๋ž˜์„œ DevOps ์—”์ง€๋‹ˆ์–ด๊ฐ€ ํ•„์š”ํ•˜๊ตฌ๋‚˜”๋ฅผ ์ œ๋Œ€๋กœ ๋А๊ผˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Š