Ubuntu - 사용량체크
■ 개 요 : 리눅스 서버의 자원사용량을 일정 시간 간격으로 로그로 남겨서 모니터링 + 이상감지 하려고 함.
■ 대 상 : CPU/Memory/Disk
■ 스 펙 : 80~90% 알람 수준
■ 내 용 : top의 결과를 Log File로 남겨서 Spec이상 여부를 감지
■ 방 법 :
** Linux이외 별도의 Util은 사용하지 않음.
(1) 일단 df/free/top등 명령어의 결과를 일정 시간 간격으로 Log File로 남길 수 있는지 확인 필요.
- 이건 해봐서 된다는걸 알고있긴 해
(2) 내가 필요한 정보가 무엇인지 확인해야 함
- 자원사용량(CPU/Memory/Disk)
- 나는 프로세스별 자원사용량이 필요한가? 전체의 자원사용량이 필요한가?
- 시스템은 프로세스별 자원사용량이 높아도, 전체의 자원사용량이 높아도 죽음
- 전체는 프로세스별 자원사용량을 포함함, 따라서 CPU/Memory는 Whole로, Disk를 Usage별로 구분.
- 이번 Monitoring에서 Network는 제외, 추후 RV Message 관련 Monitoring은 추가 용의 있음.
3) 모니터링 명령어 중 필요한 것을 선택해야 함
0. CPU : top, pstree, ps, vmstat, uptime,/proc/cpuinfo
1. Memory : top, vmstat, free, more /proc/meminfo
2. Process : top, pstree, ps
3. Disk : df, du, quota
- #df -m : MB 단위의 파일시스템 파티션 별 사용량
- #du -m : MB 단위의 디렉토리의 사용량
- #df - h : Disk 용량 파악
- #du -skh * : 서브 디렉토리 용량 파악
4. Network : ping, netstat, traceroute, tcpdump
5. User : who, w, last
(4) top명령어는 실행시켜두면 5초? 단위로 refresh하는 것으로 보임. 리소스도 먹는애임.
- 내가필요한전 전체 CPU/Memory사용량 및 특정 Disk 몇 개의 사용량에 대한 사용률임.
- 이걸 초단위 까지는 아니더라도 5분단위 정도로만 남기면 될거같음.
ps -e -p "user,pcpu,vsz,comm" | grep -v "<" | grep -v "ps" | grep -v "기준" | grep -v "grep" > "$logdir/resourceMonitoring.list"
free -m | awk 'NR==2{printf "%.2f%%\t\t", $3*100/$2 }'
9.24%
1
2 3 4 5 |
[root@localhost tmp]# free -m
total used free shared buffers cached Mem: 996 92 904 0 11 31 -/+ buffers/cache: 49 947 Swap: 1583 0 1583 |
df -h | awk '$NF=="/"{printf "%s\t\t", $5}'
7%
1
2 3 4 5 |
[root@localhost tmp]# df -h
Filesystem Size Used Avail Use% Mounted on /dev/mapper/VolGroup-lv_root 14G 814M 12G 7% / tmpfs 499M 0 499M 0% /dev/shm /dev/sda1 485M 32M 428M 7% /boot |
cd /tmp
vi stats.sh
#! /bin/bash
printf "Memory\t\tDisk\t\tCPU\n"
end=$((SECONDS+3600))
while [ $SECONDS -lt $end ]; do
MEMORY=$(free -m | awk 'NR==2{printf "%.2f%%\t\t", $3*100/$2 }')
DISK=$(df -h | awk '$NF=="/"{printf "%s\t\t", $5}')
CPU=$(top -bn1 | grep load | awk '{printf "%.2f%%\t\t\n", $(NF-2)}')
echo "$MEMORY$DISK$CPU"
sleep 5
done
./stats.sh >> log.txt