Task #80
λ―Έμ #4 Bλ¨κ³ μλ£ λ¦¬ν¬νΈ β μμ μ¬μ©λ μ£ΌκΈ°μ JSON μ μ₯
μμ λͺ λ Ήμ΄
[π‘ NORMAL] ## λ―Έμ
#4 β Bλ¨κ³: μμ μ¬μ©λ μ£ΌκΈ°μ JSON μ μ₯
### λͺ©ν
`scripts/metrics_snapshot.py`κ° μ΄λ―Έ μ‘΄μ¬νλ€ (Aλ¨κ³ μλ£).
μ΄μ **μ£ΌκΈ°μ μΌλ‘ νμ¬ μμ μ€λ
μ·μ JSON νμΌμ λμ μ μ₯**νλ κΈ°λ₯μ μΆκ°νλ€.
sarμ 7μΌ λ³΄μ‘΄ νκ³λ₯Ό λμ΄ λ¬΄νμ κΈ°λ‘μ μ μ§νλ κ²μ΄ λͺ©μ .
### ꡬν λ΄μ©
#### 1. `scripts/metrics_collector.py` μ κ· μμ±
- λ§€ μ€ν μ νμ¬ μμ μ CPU/λ©λͺ¨λ¦¬/λμ€ν¬/λ€νΈμν¬ μμΉλ₯Ό μμ§
- `/home/grass/leninbot/data/metrics/YYYY-MM.json` μ μλ³ νμΌλ‘ λμ μ μ₯
- λ°μ΄ν° ꡬ쑰 (κ° νλͺ©μ λ°°μ΄μ append):
```json
{
"snapshots": [
{
"ts": "2026-03-26T07:30:00",
"cpu_pct": 12.3,
"mem_pct": 55.2,
"mem_used_gib": 8.7,
"mem_total_gib": 15.5,
"disk_tps": 4.2,
"net_rx_kbs": 120.5,
"net_tx_kbs": 45.2
}
]
}
```
- νμΌμ΄ μμΌλ©΄ μλ‘ μμ±, μμΌλ©΄ `snapshots` λ°°μ΄μ append (νμΌ μ 체λ₯Ό μ½κ³ μ°λ λ°©μ)
- λ°μ΄ν° μμ§μ `sar` λͺ
λ Ήμ΄ μ¬μ© (νμ¬ 1λΆ κ°κ²© λ°μ΄ν°: `sar -u 1 1`, `sar -r 1 1` λ±)
- λ€νΈμν¬ μΈν°νμ΄μ€λ `eth0` μ°μ , μμΌλ©΄ 첫 λ²μ§Έ non-lo μΈν°νμ΄μ€
#### 2. cron λ±λ‘
- `/etc/cron.d/leninbot-metrics` νμΌ μμ±:
```
*/10 * * * * root /usr/bin/python3 /home/grass/leninbot/scripts/metrics_collector.py >> /home/grass/leninbot/logs/metrics_collector.log 2>&1
```
- 10λΆ κ°κ²© (sarμ λμΌ μ£ΌκΈ°)
#### 3. `scripts/metrics_snapshot.py` μμ
- `--source json` μ΅μ
μΆκ°: JSON νμΌμμ λ°μ΄ν°λ₯Ό μ½μ΄ κ·Έλν μΆλ ₯
- `--source sar` (κΈ°μ‘΄ κΈ°λ³Έκ° μ μ§)
- JSON μμ€ μ¬μ© μ μνλ κΈ°κ°λ§νΌ μλ³ νμΌμ μλμΌλ‘ ν©μ³μ μ½μ
- μ: `--hours 720` (30μΌ) μμ² μ 2κ° μλ³ νμΌμ ν©μ³μ μ²λ¦¬
#### 4. μ¦μ ν
μ€νΈ μ€ν
- `python3 scripts/metrics_collector.py` μ€νν΄μ JSON νμΌ μμ± νμΈ
- μμ±λ JSON λ΄μ© μΆλ ₯
#### 5. λ‘κ·Έ λλ ν 리 νμΈ
- `logs/` λλ ν 리 μμΌλ©΄ μμ±
### νμΌ κ²½λ‘ μ 리
- μ κ·: `scripts/metrics_collector.py`
- μμ : `scripts/metrics_snapshot.py` (--source μ΅μ
μΆκ°)
- μ κ·: `/etc/cron.d/leninbot-metrics`
- μ κ·: `data/metrics/YYYY-MM.json` (μ€ν μ μλ μμ±)
- μ κ·: `logs/metrics_collector.log` (cron λ‘κ·Έ)
### μλ£ μ‘°κ±΄
1. `metrics_collector.py` μ€ν μ±κ³΅ β JSON νμΌμ λ°μ΄ν° 1건 μ΄μ μ μ₯
2. cron λ±λ‘ μλ£ (`crontab -l` λλ νμΌ νμΈ)
3. `metrics_snapshot.py --source json --hours 1` μ€ν μ JSON λ°μ΄ν° κΈ°λ° κ·Έλν μΆλ ₯
4. κ²°κ³Όλ₯Ό νμ€ν¬ 리ν¬νΈμ λͺ
νν κΈ°λ‘