개요
서버의 CPU, MEMORY, DISK 사용량을 모니터링할 수 있는 웹 페이지를 간단히 만들어보았다.
- 사용 Skill
Shell script, Crontab, dygraph.js
- 작업 순서
Shell script로 OS사용량 csv파일 생성 -> 실행 스크립트를 스케줄러에 등록 -> csv 파일을 차트로 출력
Shell script 작성
stat_system.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| #!/bin/sh
CPUFILE=$HOMEPAGE_ROOT/performance/stat_cpu.csv MEMFILE=$HOMEPAGE_ROOT/performance/stat_mem.csv DSKFILE=$HOMEPAGE_ROOT/performance/stat_disk.csv
LANG=C; export LANG TODAY=`date '+%Y/%m/%d %H:%M'` LASTYEAR=`date '+%Y/%m/%d' -d'1 year ago'`
sed -i '\|$LASTYEAR|d' $CPUFILE sar 3 3 | grep Average | awk -v today="$TODAY" '{print today "," $3 + $5 + $6 "," $3 "," $5 "," $6}' >> $CPUFILE
sed -i '\|$LASTYEAR|d' $MEMFILE free | grep Mem | awk -v today="$TODAY" '{printf "%s,%.2f,%d,%d\n", today, $3 / $2 * 100, $4, $2}' >> $MEMFILE
sed -i '\|$LASTYEAR|d' $DSKFILE df -kP | grep homepage$ | awk -v today="$TODAY" '$3 != 0 {print today "," $5 "," $4 "," $2}' >> $DSKFILE
|
cpu, memory, disk 사용량을 파일에 추가하는 스크립트다.
CSV 파일 생성
사용량을 저장할 파일들을 생성하고, 첫번째 라인에 목록명을 적어준 후 저장한다.
stat_cpu.csv
stat_mem.csv
stat_disk.csv
Shell script 파일에 실행권한을 주고 여러번 실행해보자
1 2 3
| $ chmod 755 stat_system.sh $ ./stat_system.sh $ ./stat_system.sh
|
그럼 csv파일에 사용량이 다음과 같이 추가된다.
stat_cpu.csv
1 2 3 4
| date,total,usr,sys,wio 2021/01/01 18:25,4.13,1.90,2.01,0.22 2021/01/01 18:25,5.58,2.29,3.01,0.22 2021/01/01 18:26,3.45,3.24,3.21,0.28
|
crontab 등록
1
| 0,10,20,30,40,50 * * * * /$HOMEPAGE_ROOT/performance/stat_system.sh
|
10분마다 stat_system.sh를 실행하도록 crontab에 등록한다.
View
csv 파일을 차트로 보기 위해서 dygraphs.js 라이브러리를 사용했다
아래 사이트에서 다운로드 받을 수 있다.
dygraphs
monitor.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| <script type="text/javascript" src="lib/dygraph.min.js"></script> <link rel="stylesheet" src="lib/dygraph.css" />
<div id="chart-cpu" style="width:900px; height:400px;"></div> <div id="chart-mem" style="width:900px; height:400px;"></div> <div id="chart-disk" style="width:900px; height:400px;"></div>
<script> new Dygraph( document.getElementById("chart-cpu"), "stat_cpu.csv", { title: 'CPU 사용량', rollPeriod: 114 } );
new Dygraph( document.getElementById("chart-mem"), "stat_mem.csv", { title: 'Memory 사용량', rollPeriod: 500 } );
... </script>
|
결과 화면
다음과 같이 날짜와 시간별 사용량을 차트로 확인할 수 있다 ^^
모니터링 페이지 스크린샷