반응형
운영 중인 서버가 많아지면, 일부는 과도하게 사용되고 일부는 거의 사용되지 않는 상황이 생깁니다.
이럴 때 일주일 정도 메모리 사용률을 체크해서 저사용 서버를 삭제하면 비용을 크게 줄일 수 있어요.
이 글에서는 자동 수집 → 시각화 → 판단 → 삭제 후보 선정까지 전체 프로세스를 정리합니다.
✅ 1. 목표 정리
- 대상: AWS, Azure, GCP 또는 IDC 내의 리눅스 기반 서버
- 수집 항목: 메모리 사용률 (총 메모리 대비 사용량 %)
- 수집 주기: 5분 또는 1시간 간격
- 수집 기간: 7일
- 최종 목표: 평균 사용률이 낮은 서버를 자동 식별하고 삭제
🧰 추천 솔루션 조합
목적도구
메모리 수집 | Node Exporter, collectd, 또는 vmstat |
데이터 저장 | Prometheus, InfluxDB, 또는 CSV |
시각화 | Grafana, Excel, 또는 Plotly |
자동 분석 | Python + Pandas 또는 PromQL |
삭제 실행 | Ansible, Terraform, 또는 AWS CLI 자동화 스크립트 |
🔧 실전 구성 예시: Prometheus + Node Exporter
1. 모든 서버에 node_exporter 설치 (리눅스 기준)
wget https://github.com/prometheus/node_exporter/releases/...
tar xvfz node_exporter-*.tar.gz
./node_exporter &
2. Prometheus 서버에서 수집 설정
prometheus.yml:
scrape_configs:
- job_name: 'servers'
static_configs:
- targets: ['10.0.1.1:9100', '10.0.1.2:9100', ...]
3. Grafana 대시보드에서 메모리 사용률 시각화
- Panel 예시 쿼리 (PromQL):
100 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100)
📊 자동 분석: Python + Pandas 로 분석하기
수집된 CSV 예시:
HostnameTimestampMemory_Usage(%)
server-a | 2025-04-01 10:00 | 38.2 |
server-b | 2025-04-01 10:00 | 4.1 |
Python 코드로 평균 사용률 정리:
import pandas as pd
df = pd.read_csv("memory_usage.csv")
avg_usage = df.groupby("Hostname")["Memory_Usage(%)"].mean()
low_usage_servers = avg_usage[avg_usage < 10] # 10% 이하인 서버
print("🛑 삭제 후보 서버 목록:\n", low_usage_servers)
🔐 삭제 전 고려할 사항
- 해당 서버가 서비스 중인지, 또는 배포 대상인지 체크 필요
- Auto Scaling Group 또는 Deployment Group에 포함된 경우는 주의
- 삭제 대신 스냅샷 후 중지 → 몇 주 후 완전 삭제도 고려 가능
⚡ 자동화 예시: AWS EC2 정지/삭제 스크립트
aws ec2 stop-instances --instance-ids i-0123456789abcdef
aws ec2 terminate-instances --instance-ids i-0123456789abcdef
✅ 마무리 요약
단계설명
1 | node_exporter 또는 collectd로 메모리 수집 |
2 | Prometheus에 저장 (or CSV로 기록) |
3 | Grafana로 시각화 or Python으로 평균 분석 |
4 | 사용률 기준으로 서버 필터링 |
5 | Ansible/Terraform/AWS CLI로 삭제 또는 정지 |
반응형