“์๋ฒ CPU๊ฐ 90%์ธ๋ฐ ์๋ฌด๋ ๋ชฐ๋๋ค.”
์ด๋ฐ ์ํฉ์ ๋ง๊ธฐ ์ํ ๊ฒ ๋ชจ๋ํฐ๋ง ์์คํ ์ ๋๋ค. ์ด๋ฒ ๋ฏธ์ ์ ์ด์ํ์ฅ์ ์์ฒญ์ผ๋ก ์๋ฒ ์ํ๋ฅผ ์ค์๊ฐ์ผ๋ก ๋ณด์ฌ์ฃผ๋ ๋์๋ณด๋์ ์ด์ ์ ์๋ฆผ ์์คํ ์ ๊ตฌ์ถํ๋ ๊ฒ์ด์์ต๋๋ค. ์ง์ ํด๋ณด๊ณ ๋์ ๋๋ ๊ฑด, “์, ์ด๋์ DevOps๊ฐ ํ์ํ๊ตฌ๋” ์์ต๋๋ค.
๐ ๋ชจ๋ํฐ๋ง 3์ธ๋ฐฉ ์๊ฐ
์ด๋ฒ ๋ฏธ์ ์ ํต์ฌ์ ์ธ ๊ฐ์ง ๋๊ตฌ๊ฐ ์๋ก ํต์ ํ๋ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋ ๊ฒ์ ๋๋ค.
| ๋๊ตฌ | ํฌํธ | ์ญํ | ๋น์ | ์ค์น ์์น |
|---|---|---|---|---|
| Node Exporter | 9100 | ์๋ฒ ์งํ๋ฅผ ๋ฐ์ผ๋ก ๋ด๋ณด๋ | ๋ง์ดํฌ ๐ค | ์น์ฑ ์๋ฒ (191) |
| Prometheus | 9090 | ์งํ๋ฅผ ์์งํ๊ณ ์ ์ฅ | ๋ น์๊ธฐ ๐ผ | ๊ด์ ์๋ฒ (178) |
| Grafana | 3000 | ๋ฐ์ดํฐ๋ฅผ ์๊ฐํ | 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์
๋๋ค.
๋ฐ์ดํฐ ์์ค ์ฐ๊ฒฐ ์์:
- ์ข์ธก ๋ฉ๋ด โ Connections โ Data sources โ Prometheus ์ ํ
- URL ์
๋ ฅ:
http://localhost:9090(๊ด์ ์๋ฒ ๋ด๋ถ ํต์ ์ด๋ผ localhost) - Save & Test ํด๋ฆญ โ ์ด๋ก์ ์ฑ๊ณต ๋ฉ์์ง ํ์ธ
๋์๋ณด๋ ๊ฐ์ ธ์ค๊ธฐ:
- Dashboards โ New โ Import
- ID
1860์ ๋ ฅ (Node Exporter Full โ ๊ฐ์ฅ ์ ๋ช ํ ์๋ฒ ๋ชจ๋ํฐ๋ง ๋์๋ณด๋) โ Load - 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 ์์ง๋์ด๊ฐ ํ์ํ๊ตฌ๋”๋ฅผ ์ ๋๋ก ๋๊ผ์ต๋๋ค. ๐