카테고리 없음

💡 서버 메모리 사용률 체크 후, 저사용 서버 식별 & 정리 방법 (자동화 전략)

idea9329 2025. 4. 3. 12:59
반응형

운영 중인 서버가 많아지면, 일부는 과도하게 사용되고 일부는 거의 사용되지 않는 상황이 생깁니다.

이럴 때 일주일 정도 메모리 사용률을 체크해서 저사용 서버를 삭제하면 비용을 크게 줄일 수 있어요.

이 글에서는 자동 수집 → 시각화 → 판단 → 삭제 후보 선정까지 전체 프로세스를 정리합니다.


✅ 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로 삭제 또는 정지



반응형