유지보수 문서 작성할 때 매번 해야하니 정리해둔다.
sysstat 패키지 설치 및 서비스 활성화
sar는 sysstat 패키지에 포함되어 있습니다. dnf 로 설치한다.
dnf install sysstat
systemctl enable sysstat
systemctl start sysstat
로그 보관기간 설정
월간 리포트를 작성해야 한다면 31일 이상으로 늘려야 한다. 리포트 작성 기간에 맞추서 셋팅
vi /etc/sysconfig/sysstatHISTORY=60sar 동작확인
# 수동으로 즉시 수집
sudo /usr/lib64/sa/sa1 1 1
# 로그 파일 생성 확인
ls -l /var/log/sa/
# 오늘 CPU 사용률 확인
sar -u
# 오늘 메모리 사용률 확인
sar -r리포트 확인 스크립트
#!/bin/bash
echo "========================================"
echo " 시스템 월간 리소스 리포트"
echo "========================================"
# ── 시스템 기본 정보 ──────────────────────────
echo ""
echo "[ 시스템 기본 정보 ]"
echo "----------------------------------------"
cpu_sockets=$(lscpu | grep "Socket(s)" | awk '{print $NF}')
cpu_cores=$(lscpu | grep "^Core(s) per socket" | awk '{print $NF}')
cpu_threads=$(lscpu | grep "^Thread(s) per core" | awk '{print $NF}')
cpu_model=$(lscpu | grep "Model name" | sed 's/Model name[[:space:]]*:[[:space:]]*//')
total_cores=$(($cpu_sockets * $cpu_cores))
echo " CPU 모델 : $cpu_model"
echo " 물리 CPU(소켓) : ${cpu_sockets}개"
echo " 코어 수 : ${total_cores}개 (소켓당 ${cpu_cores}코어)"
echo " 스레드 수 : $(($total_cores * $cpu_threads))개 (코어당 ${cpu_threads}스레드)"
mem_total_kb=$(grep MemTotal /proc/meminfo | awk '{print $2}')
mem_total_gb=$(echo "scale=1; $mem_total_kb / 1024 / 1024" | bc)
mem_total_mb=$(echo "scale=0; $mem_total_kb / 1024" | bc)
echo " 물리 메모리 : ${mem_total_gb}GB (${mem_total_mb}MB)"
# ── 월간 CPU 사용률 ───────────────────────────
echo ""
echo "[ 월간 CPU 사용률 ]"
echo "----------------------------------------"
total_idle=0
cpu_day_count=0
for i in {1..31}; do
day=$(printf "%02d" $i)
file="/var/log/sa/sa$day"
if [ -f "$file" ]; then
idle=$(sar -u -f "$file" | grep "Average" | awk '{print $NF}')
if [[ $idle =~ ^[0-9]+(\.[0-9]+)?$ ]]; then
total_idle=$(echo "$total_idle + $idle" | bc)
((cpu_day_count++))
fi
fi
done
if [ $cpu_day_count -eq 0 ]; then
echo " 수집된 sar CPU 로그가 없습니다."
else
avg_idle=$(echo "scale=2; $total_idle / $cpu_day_count" | bc)
avg_cpu=$(echo "scale=2; 100 - $avg_idle" | bc)
echo " 📊 월간 평균 CPU 사용률: ${avg_cpu}% (기준: ${cpu_day_count}일 데이터)"
fi
# ── 월간 메모리 사용률 ────────────────────────
echo ""
echo "[ 월간 메모리 사용률 ]"
echo "----------------------------------------"
total_memused=0
mem_day_count=0
for i in {1..31}; do
day=$(printf "%02d" $i)
file="/var/log/sa/sa$day"
if [ -f "$file" ]; then
memused=$(sar -r -f "$file" | grep "Average" | awk '{print $4}')
if [[ $memused =~ ^[0-9]+(\.[0-9]+)?$ ]]; then
total_memused=$(echo "$total_memused + $memused" | bc)
((mem_day_count++))
fi
fi
done
if [ $mem_day_count -eq 0 ]; then
echo " 수집된 sar 메모리 로그가 없습니다."
else
avg_mem=$(echo "scale=2; $total_memused / $mem_day_count" | bc)
echo " 📊 월간 평균 메모리 사용률: ${avg_mem}% (기준: ${mem_day_count}일 데이터)"
fi
echo ""
echo "========================================"
echo " 리포트 생성 완료: $(date '+%Y-%m-%d %H:%M:%S')"
echo "========================================"