4. MRTG Script 만들기
이 section 에서는 mrtg.cfg 의 Target 에서 지정한 script 들이 어떠한 원리로 만들
어 지는지를 설명하겠다.
MRTG는 상당히 복잡한 계산을 한다. WorkDir에 있는 log file을 보면 알겠지만 4 개의
필드를 이용해서 변화된 값들만 저장을 하게 된다. 이 로그 파일에 대해서 분석을 하
고 싶다면 http://www.mrtg.co.kr 의 기술 자료실의 1번 글을 참고하면 될것이다.
여기서는 이 로그파일을 분석하고 머리를 싸매는 일과는 상관이 없다. 로그파일을 분
석하는 일은 mrtg가 알아서 해 주는 것이고 mrtg가 로그파일을 생성 분석할 data 값만
mrtg로 넘겨 주는 일만 하면 되는 것이다.
mrtg 에게 data를 넘겨 주는 것은 생각외로 단순하다. mrtg의 경우에는
IN
OUT
DATE
OS NAME
의 형식으로만 값을 넘겨 주면 된다. 즉 쉘상에서 실행 했을 경우 아래와 같이 출력이
되면 되는 것이다.
Hanterm
[root@bbuwoo mydir]$ /usr/bin/mrtg2/cpuinfo
0
1
58 days
linux
[root@bbuwoo mydir]$
위의 경우는 cpu 사용량을 측정하는 스크립트의 출력 결과이다. IN 과 OUT 의 개념은
mrtg 가 network 전송을 측정하는 것이 원 기능이기 때문에 receive와 transfer 의 값
을 기준으로 삼기 때문에 IN 과 OUT 으로 표현을 하는 것이고 이것을 이용하여 우리는
IN 값과 OUT 값에 적당한 값을 넣어주고 mrtg.cfg 에서 tag 들을 적절히 수정을 하여
이 패키지 처럼 출력을 하게 하는 것이다. 그럼 script 에 대해서 예를 들어서 분석을
해보도록 하겠다.
아래의 예는 loadaverage 를 구하는 script이다.
Hanterm - cat /usr/bin/mrtg2/loadaverage
[root@bbuwoo etc]$ cat /usr/bin/mrtg2/loadaverage
#!/bin/sh
#
# Scripted by JoungKyun Kim
# 2001.2.15 http://oops.org
# This Script follows GPL2 License
# OS 를 지정
OS=LINUX
# uptime 경로
UPTIME=/usr/bin/uptime
# 서버 운영 시간
DAYS=`$UPTIME | awk '{print $3" "$4}'`
DAY=${DAYS%%,*}
이 부분은 서버의 운영시간을 측정한다. uptime | awk '{print $3" "$4}' 를
실행하면 uptime 결과중 58 days, 1:50, 부분만을 가져온다. 그리고 서버가
부팅이 된지 하루가 안되었다면 1:50, 11 users 와 같이 가져올 것이다. 이
결과값을 shell script의 파라미터 확장을 이용하여 ,다음의 모든 문자를 제
거를 하도록 한다. 그럼 결과값은 58days 또는 1:50 이라는 부분만 남게된다.
이것이 3번째 줄에 출력이 될 서버 운영시간을 구하는 것이다.
이 루틴은 다른 부분에 그대로 적용을 해도 상관이 없을 것이다.
TEMP0=`${UPTIME} | sed -e s/,//g`
TEMP1=${TEMP0##*average:}
이 부분은 uptime 명령에서 확인할수 있는 load average filed중 5분과 15분
평균값만 골라 내도록 하는 부분이다. 그럼 하나씩 분석을 해보도록 하자
먼저 uptime | sed -e s/,//g 의 결과값을 TEMP0 이라는 변수값으로 받는다.
다음 TEMP0 의 결과값에서 average: 라는 문자열을 포함하여 앞을 모두 삭제
하여 TEMP1 이라는 변수로 받는다.
그럼 TEMP0 은 uptime 결과중 쉼표만 삭제할 체로
3:41pm up 58 days 1:57 11 users load average: 0.00 0.00 0.00
와 같이 변수값을 가지게 될것이고 TEMP1 은 위의 결과값에서 average: 앞의
문자열을 모두 삭제한 0.00 0.00 0.00 만이 남게 될 것이다. 즉 5분 10분 15
분의 average 만 남게 되는 것이다.
여기서 set 명령을 이용하여 첫번째 field부터 $1, $2, $3 의 변수로 나누어
준다. 즉 $1 은 5분간의 average가 되고 $3 은 15분간의 average 가 되는 것
이다.
FIVE=$1
FIFT=$3
# 5분 평균값
echo ${FIVE}
# 15분 평균값
echo ${FIFT}
echo $DAY
echo $OS
위와 같이 필요한 값을 구한 다음 차례대로 한줄씩 echo를 해 주면 되는것이다.
IN OUT 개념이 헷갈릴지는 모르겠지만 이부분은 우리가 필요한 값을 출력을 해
준 다음 mrtg.cfg 의 LegendO(output tag) 와 LegendI(input tag) 에서 적당한
이름으로 대체를 해 주면 된다는것이다.
exit 0
[root@bbuwoo etc]$
위의 scritp 를 이용하면 여러가지를 측정할수가 있다. 물론 script 만 만드는건 상당
히 쉽다. (물론 script 에 대해서 해박한 지식을 가지고 있어야 할것이다.) 그리고 꼭
shell script로 만들 필요는 없다. 필자의 경우에는 shell 스크립트보다 php를 이용하
는 것이 더욱 간단하고 명확하게 만들수 있지만 package 로 배포를 하려다보니 누구나
설치만 하면 사용할수 있게 만들기 위해 shell script를 이용한 것 뿐이다. 아마 perl
을 php만큼만 할줄 알아도 perl로 만들었을 것이다. :-)
다만 내가 말하고자 하는 것은 스크립트를 만드는 것도 중요 하지만 실제로 중요한 것
은 mrtg.cfg 를 설정을 하는 것이다. 필자의 경우에도 script 를 만들어 놓고선 graph
를 제대로 표현을 하지 못해서 애를 많이 먹었었다. 이 부분에 대해서는 mrtg문서들을
꼼꼼히 읽어 보고 하기를 바란다. 필자가 알려주고 싶지만 필자도 꽁수로 이리저리 해
보고 안것이라서 글로서 표현을 하면서 알려주기에는 벅차기 때문이다.
5. 문의 사항이 있으면..?
문의 사항이 있으면 직접 해결 하든지 http://www.mrtg.co.kr를 이용하도록 하길 바란
다. 필자에게 문의를 해도 답변을 해 줄 능력이 없다. 위의 site의 경우 mrtg 에 대한
아주 자세한 자료들과 관리자 또한 해박한 지식을 보유하고 있으니 위의 site 를 이용
하기 바란다. 다만 여기서 배포하는 package를 사용함에 있어 결과값이 제대로 안나온
다든지 또는 package 에 대한 문제점이 발생할 경우 QnA 게시판을 통해 문의를 하기를
바란다.
4. MRTG Script 만들기
이 section 에서는 mrtg.cfg 의 Target 에서 지정한 script 들이 어떠한 원리로 만들 어 지는지를 설명하겠다. MRTG는 상당히 복잡한 계산을 한다. WorkDir에 있는 log file을 보면 알겠지만 4 개의 필드를 이용해서 변화된 값들만 저장을 하게 된다. 이 로그 파일에 대해서 분석을 하 고 싶다면 http://www.mrtg.co.kr 의 기술 자료실의 1번 글을 참고하면 될것이다. 여기서는 이 로그파일을 분석하고 머리를 싸매는 일과는 상관이 없다. 로그파일을 분 석하는 일은 mrtg가 알아서 해 주는 것이고 mrtg가 로그파일을 생성 분석할 data 값만 mrtg로 넘겨 주는 일만 하면 되는 것이다. mrtg 에게 data를 넘겨 주는 것은 생각외로 단순하다. mrtg의 경우에는 IN OUT DATE OS NAME 의 형식으로만 값을 넘겨 주면 된다. 즉 쉘상에서 실행 했을 경우 아래와 같이 출력이 되면 되는 것이다.
Hanterm |
[root@bbuwoo mydir]$ /usr/bin/mrtg2/cpuinfo 0 1 58 days linux [root@bbuwoo mydir]$ |
위의 경우는 cpu 사용량을 측정하는 스크립트의 출력 결과이다. IN 과 OUT 의 개념은 mrtg 가 network 전송을 측정하는 것이 원 기능이기 때문에 receive와 transfer 의 값 을 기준으로 삼기 때문에 IN 과 OUT 으로 표현을 하는 것이고 이것을 이용하여 우리는 IN 값과 OUT 값에 적당한 값을 넣어주고 mrtg.cfg 에서 tag 들을 적절히 수정을 하여 이 패키지 처럼 출력을 하게 하는 것이다. 그럼 script 에 대해서 예를 들어서 분석을 해보도록 하겠다. 아래의 예는 loadaverage 를 구하는 script이다. |
Hanterm - cat /usr/bin/mrtg2/loadaverage |
[root@bbuwoo etc]$ cat /usr/bin/mrtg2/loadaverage #!/bin/sh # # Scripted by JoungKyun Kim # 2001.2.15 http://oops.org # This Script follows GPL2 License # OS 를 지정 OS=LINUX # uptime 경로 UPTIME=/usr/bin/uptime # 서버 운영 시간 DAYS=`$UPTIME | awk '{print $3" "$4}'` DAY=${DAYS%%,*} 이 부분은 서버의 운영시간을 측정한다. uptime | awk '{print $3" "$4}' 를 실행하면 uptime 결과중 58 days, 1:50, 부분만을 가져온다. 그리고 서버가 부팅이 된지 하루가 안되었다면 1:50, 11 users 와 같이 가져올 것이다. 이 결과값을 shell script의 파라미터 확장을 이용하여 ,다음의 모든 문자를 제 거를 하도록 한다. 그럼 결과값은 58days 또는 1:50 이라는 부분만 남게된다. 이것이 3번째 줄에 출력이 될 서버 운영시간을 구하는 것이다. 이 루틴은 다른 부분에 그대로 적용을 해도 상관이 없을 것이다. TEMP0=`${UPTIME} | sed -e s/,//g` TEMP1=${TEMP0##*average:} 이 부분은 uptime 명령에서 확인할수 있는 load average filed중 5분과 15분 평균값만 골라 내도록 하는 부분이다. 그럼 하나씩 분석을 해보도록 하자 먼저 uptime | sed -e s/,//g 의 결과값을 TEMP0 이라는 변수값으로 받는다. 다음 TEMP0 의 결과값에서 average: 라는 문자열을 포함하여 앞을 모두 삭제 하여 TEMP1 이라는 변수로 받는다. 그럼 TEMP0 은 uptime 결과중 쉼표만 삭제할 체로 3:41pm up 58 days 1:57 11 users load average: 0.00 0.00 0.00 와 같이 변수값을 가지게 될것이고 TEMP1 은 위의 결과값에서 average: 앞의 문자열을 모두 삭제한 0.00 0.00 0.00 만이 남게 될 것이다. 즉 5분 10분 15 분의 average 만 남게 되는 것이다. 여기서 set 명령을 이용하여 첫번째 field부터 $1, $2, $3 의 변수로 나누어 준다. 즉 $1 은 5분간의 average가 되고 $3 은 15분간의 average 가 되는 것 이다. FIVE=$1 FIFT=$3 # 5분 평균값 echo ${FIVE} # 15분 평균값 echo ${FIFT} echo $DAY echo $OS 위와 같이 필요한 값을 구한 다음 차례대로 한줄씩 echo를 해 주면 되는것이다. IN OUT 개념이 헷갈릴지는 모르겠지만 이부분은 우리가 필요한 값을 출력을 해 준 다음 mrtg.cfg 의 LegendO(output tag) 와 LegendI(input tag) 에서 적당한 이름으로 대체를 해 주면 된다는것이다. exit 0 [root@bbuwoo etc]$ |
위의 scritp 를 이용하면 여러가지를 측정할수가 있다. 물론 script 만 만드는건 상당 히 쉽다. (물론 script 에 대해서 해박한 지식을 가지고 있어야 할것이다.) 그리고 꼭 shell script로 만들 필요는 없다. 필자의 경우에는 shell 스크립트보다 php를 이용하 는 것이 더욱 간단하고 명확하게 만들수 있지만 package 로 배포를 하려다보니 누구나 설치만 하면 사용할수 있게 만들기 위해 shell script를 이용한 것 뿐이다. 아마 perl 을 php만큼만 할줄 알아도 perl로 만들었을 것이다. :-) 다만 내가 말하고자 하는 것은 스크립트를 만드는 것도 중요 하지만 실제로 중요한 것 은 mrtg.cfg 를 설정을 하는 것이다. 필자의 경우에도 script 를 만들어 놓고선 graph 를 제대로 표현을 하지 못해서 애를 많이 먹었었다. 이 부분에 대해서는 mrtg문서들을 꼼꼼히 읽어 보고 하기를 바란다. 필자가 알려주고 싶지만 필자도 꽁수로 이리저리 해 보고 안것이라서 글로서 표현을 하면서 알려주기에는 벅차기 때문이다. 5. 문의 사항이 있으면..? 문의 사항이 있으면 직접 해결 하든지 http://www.mrtg.co.kr를 이용하도록 하길 바란 다. 필자에게 문의를 해도 답변을 해 줄 능력이 없다. 위의 site의 경우 mrtg 에 대한 아주 자세한 자료들과 관리자 또한 해박한 지식을 보유하고 있으니 위의 site 를 이용 하기 바란다. 다만 여기서 배포하는 package를 사용함에 있어 결과값이 제대로 안나온 다든지 또는 package 에 대한 문제점이 발생할 경우 QnA 게시판을 통해 문의를 하기를 바란다. |