Shell script를 이용해서 Linux monitoring page 만들기

개요

서버의 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

# Output file name
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
# result(%total, %usr, %sys, %wio)

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
# result(%used, free, total kB)

sed -i '\|$LASTYEAR|d' $DSKFILE
df -kP | grep homepage$ | awk -v today="$TODAY" '$3 != 0 {print today "," $5 "," $4 "," $2}' >> $DSKFILE
# result(%used, available, total kB)

cpu, memory, disk 사용량을 파일에 추가하는 스크립트다.

CSV 파일 생성

사용량을 저장할 파일들을 생성하고, 첫번째 라인에 목록명을 적어준 후 저장한다.
stat_cpu.csv

1
date,total,usr,sys,wio

stat_mem.csv

1
used,free,total kB

stat_disk.csv

1
used,available,total kB

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>

결과 화면

다음과 같이 날짜와 시간별 사용량을 차트로 확인할 수 있다 ^^
monitor모니터링 페이지 스크린샷