본문 바로가기
소프트웨어/서버관련

MRTG 설치부터 활용 까지

by 씨디맨 2007. 11. 1.
320x100
최초작성일 : 07.12.06

참조사이트
http://oss.oetiker.ch/mrtg/


준비물
http://www.wtcs.org/snmp4tpc/getif.htm

다운로드







환경 :
모니터링 서버 : Windows 2000/2003 server
모니터링 대상 서버 : Windows XP / Windows 2000 Pro / Windows 2000/2003 Server


MRTG 를 설치하고 PHP 를 이용해서

트래픽 , CPU , 메모리 , 하드디스크 사용량을 표시하는 데까지 모든것을 적어볼까 합니다
저도 처음에 알아낼려고 이래저래 여러문서를 봐가면서 잘 안되어서 질문도 하여봤지만
답변이 재대로 이루어지는곳도 없고 해서 안타까웠던적이 있습니다

제가 아는데까지 전부 적어볼까 합니다  제가 이것저것 해보면서 맞춰본것이라 CID 값은
좀 틀릴 수 도 있습니다 그래도 적어도 참고는 될듯해서 써봅니다

일단 제가 MRTG 를 활용한 사이트페이지 입니다

사용자 삽입 이미지
[위에 그림은 클릭하시면 크게 보입니다]







사용자 삽입 이미지


위에 그래프를 보시면 일단 [정상],[비정상] 의 상태가 나타나고  타이틀이 나타납니다
그리고 5/100% 를 보면 CPU 사용량이 나타나고 차례대로 메모리사용량 C / D / E 하드디스크 사용량도
퍼센트로 나타나게 됩니다 그리고 일정치 이상 수치가 높아졌을때 노란색 음영으로 경고를 한뒤
수치가 너무 높을때는 붉은색 음영으로 위험을 알리도록 해봤습니다

그리고 아래부분은 조금 아시는분들은 많이 보셨을 트래픽 그래프입니다
보통은 cfgmaker 로 cfg 파일을 생성하면 아래쪽에 트래픽그래프만 나타나게 됩니다   근데 저는
CPU 사용량과 그리고 네트워크상태 , 메모리사용량(%), 하드디스크사용량(%) 를
넣어본것이지요  좀더 꾸민다면 하드디스크용량을 일일이 기입을 해줘야하겠지만 정확히 몇 Mb 를 사용중인지도
나타낼 수 는 있습니다

그리고 CPU 가 2개이상일때도 다나타낼 수 도 있구요 그래프 색도 다르게 나타낼 수 있습니다

제경우도 더 꾸며야하고 몇가지 손봐야하는데 손을 못보고 있네요 요즘은 실시간으로 서버상태를
보는 프로그램도 꾀 많으니까요



1] Mrtg 사전준비 설치하기
윈도우에 설치하기는 : http://cdmanii.tistory.com/entry/MRTG-윈도우에-설치하기
를 참조하셔서 일단 설치를 해주시면 됩니다

리눅스나 FreeBSD 에 설치한것은 자료가 많으니 일단 설치만 하시면 됩니다


2] cfg 환경설정파일 만들기
cfgmaker.cmd 로 cfg 파일을 생성을 합니다
각서버마다 설정이 모두 다르기에 어짜피 모두 다시 수정해줘야합니다

CPU/메모리/하드디스크 사용량을 % 로 나타내야하니 이부분추가를 위해서도 몇몇부분을 더 넣어야합니다

미리 생성된 cfg 파일 안을 살펴보면 일단 트래픽관련된 내용만 있습니다

수정도 할겸 그리고 각 옵션이 어떤역할을 하는지도 알겸 제가 지금 사용중인 cfg 파일 소스를
적어보겠습니다

예제 환경설정 파일 다운로드 :



## 192.168.0.3
#RunAsDaemon: yes
#Interval: 5
WorkDir: D:\Webservice\mrtg\192.168.0.3
EnableIPv6: no
language:korean
Refresh:300
Options[traffic]:bits,growright
XSize[_]: 500
YSize[_]: 100
 
### Interface 16777219 >> Descr: '' | Name: '' | Ip: '' | Eth: '' ###
Target[traffic]: 16777219:snmpid@192.168.0.3:
SetEnv[traffic]: MRTG_INT_IP="192.168.0.3" MRTG_INT_DESCR=""
MaxBytes[traffic]: 104857600
Title[traffic]: Traffic Analysis for 16777219 -- hati
YLegend[traffic]: Traffic
XSize[traffic]: 500
YSize[traffic]: 100
PageTop[traffic]: <h1>Traffic Analysis for </h1>
             
#cpu used
#Target[cpu.1]: .1.3.6.1.4.1.311.1.1.3.1.1.2.1.3.1.48&.1.3.6.1.4.1.311.1.1.3.1.1.2.1.3.1.48:snmpid@192.168.0.3
Target[cpu.1]: .1.3.6.1.4.1.311.1.1.3.1.1.2.1.3.6.95.84.111.116.97.108&.1.3.6.1.4.1.311.1.1.3.1.1.2.1.3.6.95.84.111.116.97.108:snmpid@192.168.0.3
MaxBytes[cpu.1]: 100
Title[cpu.1]: CPU used
PageTop[cpu.1]: <H1>CPU used %</H1>
Unscaled[cpu.1]: ymwd
ShortLegend[cpu.1]: %
XSize[cpu.1]: 500
YSize[cpu.1]: 100
YLegend[cpu.1]: CPU used
Legend1[cpu.1]: CPU used
Legend2[cpu.1]:
Legend3[cpu.1]:
Legend4[cpu.1]:
LegendI[cpu.1]: CPU used1
LegendO[cpu.1]:
Colours[cpu.1]: VIOLET#4682b4,GREEN#ffffff,BLUE#0000ff,GRAY#AAAAAA
Options[cpu.1]: growright,gauge
#kilo[cpu.1]: 1024

#memory
Target[memory]: .1.3.6.1.4.1.311.1.1.3.1.1.1.3.0&.1.3.6.1.4.1.311.1.1.3.1.1.1.2.0:snmpid@192.168.0.3
#MaxBytes[memory]: 267894784
MaxBytes[memory]: 536326144
Title[memory]: Memory
PageTop[memory]: <H1>Memory load MB</H1>
Unscaled[memory]: ymwd
ShortLegend[memory]: B
XSize[memory]: 500
YSize[memory]: 100
YLegend[memory]: memory
Legend1[memory]: memory Utilization in % (Load)
Legend2[memory]: memory Utilization in % (Load)
Legend3[memory]:
Legend4[memory]:
LegendI[memory]:  Used Memory
LegendO[memory]:  Able Memory
Colours[memory]: VIOLET#dda0dd ,GREEN#4169e1,BLUE#0000ff,GRAY#AAAAAA
Options[memory]: growright,gauge,nopercent
kilo[memory]: 1024

#hdd_c
Target[hdd_c]: .1.3.6.1.2.1.25.2.3.1.6.2&.1.3.6.1.2.1.25.2.3.1.6.2:snmpid@192.168.0.3 * 4096 * 100 / 5239468032
MaxBytes[hdd_c]: 100
Title[hdd_c]: hdd C
PageTop[hdd_c]: <H1>hdd_c Used</H1>
Unscaled[hdd_c]: ymwd
ShortLegend[hdd_c]: %
XSize[hdd_c]: 500
YSize[hdd_c]: 100
YLegend[hdd_c]: hdd_c
Legend1[hdd_c]: hdd_c Utilization in % (Load)
Legend2[hdd_c]: hdd_c Utilization in % (Load)
Legend3[hdd_c]:
Legend4[hdd_c]:
LegendI[hdd_c]:  Used hdd_c
LegendO[hdd_c]:
Colours[hdd_c]: VIOLET#191970,GREEN#ffffff,BLUE#0000ff,GRAY#AAAAAA
Options[hdd_c]: growright,gauge
#kilo[hdd_c]: 1024

#hdd_d d
Target[hdd_d]: .1.3.6.1.2.1.25.2.3.1.6.3&.1.3.6.1.2.1.25.2.3.1.6.3:snmpid@192.168.0.3 * 4096 * 100 / 5239468032
MaxBytes[hdd_d]: 100
Title[hdd_d]: hdd D
PageTop[hdd_d]: <H1>hdd_d Used</H1>
Unscaled[hdd_d]: ymwd
ShortLegend[hdd_d]: %
XSize[hdd_d]: 500
YSize[hdd_d]: 100
YLegend[hdd_d]: hdd_d
Legend1[hdd_d]: hdd_d Utilization in % (Load)
Legend2[hdd_d]: hdd_d Utilization in % (Load)
Legend3[hdd_d]:
Legend4[hdd_d]:
LegendI[hdd_d]:  Used hdd_d
LegendO[hdd_d]:
Colours[hdd_d]: VIOLET#191970,GREEN#ffffff,BLUE#0000ff,GRAY#AAAAAA
Options[hdd_d]: growright,gauge
#kilo[hdd_d]: 1024

#hdd_e d
Target[hdd_e]: .1.3.6.1.2.1.25.2.3.1.6.4&.1.3.6.1.2.1.25.2.3.1.6.4:snmpid@192.168.0.3 * 4096 * 100 / 7789305856
MaxBytes[hdd_e]: 100
Title[hdd_e]: hdd E
PageTop[hdd_e]: <H1>hdd_e Used</H1>
Unscaled[hdd_e]: ymwd
ShortLegend[hdd_e]: %
XSize[hdd_e]: 500
YSize[hdd_e]: 100
YLegend[hdd_e]: hdd_e
Legend1[hdd_e]: hdd_e Utilization in % (Load)
Legend2[hdd_e]: hdd_e Utilization in % (Load)
Legend3[hdd_e]:
Legend4[hdd_e]:
LegendI[hdd_e]:  Used hdd_e
LegendO[hdd_e]:
Colours[hdd_e]: VIOLET#191970,GREEN#ffffff,BLUE#0000ff,GRAY#AAAAAA
Options[hdd_e]: growright,gauge
#kilo[hdd_e]: 1024
 


이소스는 일단 서버는 Windows 2000 pro 이고 하드디스크는 1개인데 파티션이 3개로 나뉜 상태입니다
100메가회선이 꽂혀있는상태입니다

이 서버에 대한 cfg 환경설정파일입니다  이게 딱 무조건 맞다는 아닙니다 이부분을 어떻게 꾸미느냐에
따라서 얼마든지 다른형태로 나타낼 수 있습니다

이제 각 부분을 설명을 드리겠습니다


## 전체적인 설명 부분입니다   주석은 # 을 앞에 쓰고 쓰면됩니다
## 192.168.0.3        192.168.0.3 이라고 서버주소를 적어놓았습니다 햇갈리면 안되니까요
#RunAsDaemon: yes      
데몬으로 cfg 파일을 실행하겠다는것인데요 지금은 Windows 서버에서 예약
프로그램에서 perl 로 실행할것이기때문에 주석처리 했습니다

#Interval: 5                    
데몬 실행주기를 설정하는곳인데요 (분/min) 데몬으로 실행할것이 아니기에
이부분도 주석처리 합니다
WorkDir: D:\Webservice\mrtg\192.168.0.3       
WorkDir 은 cfg 파일을 실행하면 아래쪽에 설정한 이름으로 jpg 파일이 생성되게 되는데 그것이 만들어질 폴더를 지정합니다 각 서버마다 따로 지정해둬야 나중에 편집이나 응용할때도 편하게 됩니다 (뭐 소스에서 커버되지만요)
EnableIPv6: no       
IPv6 을 활성화할건지 묻는겁니다 보통은 no 이죠

language:korean    
언어설정입니다 korean 으로 두면됩니다

Refresh:300           
리플래쉬 타이밍인데요 300은 5분을 말합니다 단위 (초/sec)

Options[traffic]:bits,growright      
Option 은 옵션부분을 말하며 [] 대괄호 안에 있는것은 목록이름을 뜻
합니다 traffic 목록이름에 대한 옵션이라고 보면 되겠네요 bits 는 비트단위로 growright 는 오른쪽에서 그래프가 생성되도록 한다는 뜻입니다 자세한 옵션은 맨위에 참조주소에[mrtg] 가보시면 자세히 더 나옵니다

XSize[_]: 500    
XSize 는 jpg 파일생성시 Width 를 설정하는 부분 이며 [] 대괄호안의 _ 는 모든 목록을 뜻합니다 즉 모든 목록의 그림생성파일의 Width 를 500 으로 하겠다는 뜻이지요

YSize[_]: 100    
모든 항목의 height 를 100 으로 하겠다는 뜻입니다


# Traffic 에 대한 항목 설명
Target[traffic]: 16777219:snmpid@192.168.0.3:      
Target 은 말그대로 대상을지정하는부분입니다   Target[traffic] 라고 하면 traffic 라는 항목이 생성되며
그림파일도 위에 설정한 WorkDir: 에 traffic.jpg 라고 생성이 되게 됩니다
16777219는 getif 를 통해서 얻은 모니터링 대상 서버의 랜카드 CID 값이며
snmpid 는 모니터링 대상 서버의 SNMP 서비스의 커뮤니티 ID 를 말합니다
192.168.0.3 은 모니터링 대상 서버의 IP 를 뜻하죠
형식을 적어보자면 Target[항목]: CID:SNMPID@Server IP: 가 되지요
 
SetEnv[traffic]: MRTG_INT_IP="192.168.0.3" MRTG_INT_DESCR=""
이부분은 traffic 항목에 대한 페이지가 나타날때 뿌려지는부분을 적는곳입니다
설명을 더 추가해도 됩니다 모니터링 대상 서버 IP 는 192.168.0.3 이라고 뿌려지게 해놨고
설명부분은 비어있군요 MRTG_INT_DESCR=""   의 "" 부분안에 설명글을 적어넣으면 설명글이
나타나게 됩니다


MaxBytes[traffic]: 104857600
MaxBytes 는 항목에 대한 최대 수치를 적는 곳입니다 제가 100메가 회선이 꽂혔다고 했으니
100 * 1024 * 1024 = 104857600 byte 를 적어줍니다 10 메가 회선이라면 10 * 1024 * 1024 = 10485760 을 적어주면되겠지요


Title[traffic]: Traffic Analysis for 16777219 -- hati
이부분은 타이틀을 적는부분입니다 저는 귀찮아서 재대로 적지를 않앗네요 ㅡㅡ;;
Traffic Analysis for 16777219 -- hati   이부분을 지우고 타이틀을 멋지게 적어주시면
나중에 MRTG 그래프가 나타나고 그 그림을 클릭할때 세부페이지에 이부분이 멋지게 나타날겁니다
귀찮으시면 대충 적으셔도 되구요 ;


YLegend[traffic]: Traffic
이부분은 그래프의 Y 항목에 대한 이름입니다 일단 네트워크 트래픽 관련된부분이니 Traffic 라고 적어놓죠

XSize[traffic]: 500
traffic 항목에 대한 그림 width 사이즈를 500으로 하겠다는 뜻입니다
다만 위에서 XSize[_] : 500 으로 해서 모든 항목의 그림 width 를 500으로 고정시켰는데요
사실 이부분은 주석해도 상관은 없지만 만약에 모든 항목은 500으로 하고 Traffic 는 600 으로 하고싶다면
따로 설정해주면 따로 설정이 됩니다


YSize[traffic]: 100
traffic 항목에 대한 그림 height 사이즈 설정

PageTop[traffic]: <h1>Traffic Analysis for </h1>
페이지 상단에 나타날 부분에 대해서 적는부분입니다
쭉 길게 적어도 테그가 다 먹힙니다 다만 저는 이부분 별로 필요없기에 지워버렸습니다
딱한줄만 대충 적어놨네요 Traffic Analysis for 트래픽분석 해놧는데 뒤에 뭔가 더 적어야할거같은데
귀찮아서 안적었습니다

사실 서버마다 cfg 파일을 만들어야하니 서버대수가 많아지면 이부분 일일이 적기는 좀 그렇습니다
뭐 능력되시는분은 기입을 하셔도 ....

 

# CPU 사용량 나타내기 위한 부분           
#cpu used

#Target[cpu.1]: .1.3.6.1.4.1.311.1.1.3.1.1.2.1.3.1.48&.1.3.6.1.4.1.311.1.1.3.1.1.2.1.3.1.48:snmpid@192.168.0.3
이부분은 제가 설정하다가 실패한 Target 인데요 OID 값을 어디서 구해다가 넣어봤는데
이서버랑은 맞지 않아서인지 실패를 했습니다 그걸 보여드리기위해서 적어봤습니다
이부분을 확실히 알아내려면 이문서의 맨위에 getif 파일을 실행시켜서 OID 값을 알아내시기 바랍니다


Target[cpu.1]: .1.3.6.1.4.1.311.1.1.3.1.1.2.1.3.6.95.84.111.116.97.108&
.1.3.6.1.4.1.311.1.1.3.1.1.2.1.3.6.95.84.111.116.97.108:snmpid@192.168.0.3

이부분 한줄입니다 너무 길어서 짤리네요
이단
OID&OID@SNMPID@서버IP 순으로 적어줘야합니다 OID 는 2개를 적어서 꼭 쌍으로 만들어야
합니다 한개만 적으면 안되네요 1개만 체크할거라면 같은걸 두번 적어주면 됩니다

숫자 길게 적힌것이 이 서버의 CPU 에 대한 OID 값입니다 5분안쪽에 CPU 로드된 양을 나타내지요
항목이름은 제가 cpu.1 로 해놧습니다 다음에 cpu.2 가 생길지도 몰라서 저렇게 만들어 둔거랍니다
이름은 사람이 짓기 나름입니다


MaxBytes[cpu.1]: 100
cpu 항목에 대한 최대수치를 적는곳인데요 cpu 의 퍼센트를 적어야하니 최대치는 100 이겠죠 100% 를
뜻합니다

Title[cpu.1]: CPU used
타이틀 지정하는부분인데여 CPU used 라고 적어보겠습니다

PageTop[cpu.1]: <H1>CPU used %</H1>
페이지 탑부분에 나타날 부분입니다

Unscaled[cpu.1]: ymwd
이부분은 자세히는 기억안나지만 y는 년단위 m은 월단위 w 는 뭐시기 d는 일단위로 그래프를 나타내겠
다는 뜻입니다 년단위 그래프가 필요없다면 y 를 지우면 되지요 근데 다적어두는게 나중에 1년지나서
트래픽 분석할때도 용의 합니다


ShortLegend[cpu.1]: %
단위를 적는곳인데요 %로 나타내야하니 % 라고 적습니다

XSize[cpu.1]: 500
YSize[cpu.1]: 100
이부분은 아시겠죠 cpu.1 에 대한 width height 설정부분입니다

YLegend[cpu.1]: CPU used
그래프 Y 항목에 항목이름입니다
Legend1[cpu.1]: CPU used
Legend2[cpu.1]:
Legend3[cpu.1]:
Legend4[cpu.1]:
LegendI[cpu.1]: CPU used1
LegendO[cpu.1]:
Colours[cpu.1]: VIOLET#4682b4,GREEN#ffffff,BLUE#0000ff,GRAY#AAAAAA
이부분은 그래프의 실선이나 색칠한 그래프에 색을 변경하는부분입니다 그래프가 많아지면
서로 색이 섞여서 안보일수도 있으니 적절하게 색을 배치하면 됩니다

Options[cpu.1]: growright,gauge
그래프를 나타낼 옵션인데요 growright 는 오른쪽에서 나타나게 하는것이고 gauge 는 까먹었네요 나중에 적겠습니다 ;
#kilo[cpu.1]: 1024

#memory
Target[memory]: .1.3.6.1.4.1.311.1.1.3.1.1.1.3.0&.1.3.6.1.4.1.311.1.1.3.1.1.1.2.0:snmpid@192.168.0.3
메모리 부분 타겟지정입니다  앞에 OID 와 뒤에 OID 가 다른데요
하나는 메모리 사용량이고 하나는 남은 메모리 용량입니다


#MaxBytes[memory]: 267894784
MaxBytes[memory]: 536326144
메모리의 최대수치를 적는곳입니다  로컬메모리의 바이트수치를 적어주면 됩니다
위에건 256램일때 아래에건 512램 일때입니다


Title[memory]: Memory
그래프 왼쪽에 나타날 타이틀입니다

PageTop[memory]: <H1>Memory load MB</H1>
세부페이지 상단에 나타날 내용입니다

Unscaled[memory]: ymwd
그래프를 년월일 중에 어떤걸 나타낼지 나타냅니다

ShortLegend[memory]: B
나타낼 항목의 단위를 나타냅니다

XSize[memory]: 500
YSize[memory]: 100
그림의 좌우 넓이를 지정합니다

YLegend[memory]: memory


Legend1[memory]: memory Utilization in % (Load)
Legend2[memory]: memory Utilization in % (Load)
항목이 2개이므로 두개에 대한 설명을 적어줍니다

Legend3[memory]:
Legend4[memory]:
LegendI[memory]:  Used Memory
LegendO[memory]:  Able Memory
두항목에 대한 이름인데요 하나는 사용한 메모리양 , 하나는 사용가능한 메모리양입니다

Colours[memory]: VIOLET#dda0dd ,GREEN#4169e1,BLUE#0000ff,GRAY#AAAAAA
항목의 컬러 지정 부분입니다

Options[memory]: growright,gauge,nopercent
옵션부분이네요 오른쪽에서 생성되게하고 gauge 는 죄송해요 까먹었음 , nopercent 는 퍼센트단위로
하지 말라는 뜻이구요


kilo[memory]: 1024
단위를 지정해줘버리는부분인데요 1kb 를 1024 라고 명시해버리는부분입니다




하드디스크 C 드라이브 정보가져오는부분

#hdd_c
Target[hdd_c]: .1.3.6.1.2.1.25.2.3.1.6.2&.1.3.6.1.2.1.25.2.3.1.6.2:snmpid@192.168.0.3 * 4096 * 100 / 5239468032

타켓을 지정하는데 좀 다르지요 Hdd_c  라고 항목이름을 정한뒤 OID 끝자리를 보면 2,3,4 이렇게 시작합니다
하드가 3개인지라 2,3,4 가 차례대로 C/D/E  이지요  
Getif 로 조사한뒤 가져와야합니다 상황에 따라 좀 다를 수 도 있거든요


근데 끝에보면 뭔가를 더 곱하지요 * 4096 은 클러스터 크기라고 하며 * 100 을 곱한뒤에 하드디스크의
총용량을 나누어줍니다 그러면  " 사용량*100/전체용량  "  이 되어서 퍼센트를 만들 수 있겠죠



MaxBytes[hdd_c]: 100
최대치를 입력하는부분인데 지금 하드사용량을 퍼센트로 나타낼것이기때문에 100% 의 의미로 100 을입력합니다


Title[hdd_c]: hdd C
타이틀을 지정하는 부분입니다

PageTop[hdd_c]: <H1>hdd_c Used</H1>
세부항목에 상단에 나타날 부분 입니다

Unscaled[hdd_c]: ymwd
그래프를 년월일 중에 어떤걸 나타낼지 고르는 부분이지요

ShortLegend[hdd_c]: %
단위를 지정하는부분 당연 % 겠지요

XSize[hdd_c]: 500
YSize[hdd_c]: 100
이부분은 이제 아시겠죠?

YLegend[hdd_c]: hdd_c
Legend1[hdd_c]: hdd_c Utilization in % (Load)
Legend2[hdd_c]: hdd_c Utilization in % (Load)
Legend3[hdd_c]:
Legend4[hdd_c]:
LegendI[hdd_c]:  Used hdd_c
LegendO[hdd_c]:
Colours[hdd_c]: VIOLET#191970,GREEN#ffffff,BLUE#0000ff,GRAY#AAAAAA
Options[hdd_c]: growright,gauge
#kilo[hdd_c]: 1024

하드디스크 D / E 는 위에 내용과 같으므로 생략

#hdd_d d
Target[hdd_d]: .1.3.6.1.2.1.25.2.3.1.6.3&.1.3.6.1.2.1.25.2.3.1.6.3:snmpid@192.168.0.3 * 4096 * 100 / 5239468032
MaxBytes[hdd_d]: 100
Title[hdd_d]: hdd D
PageTop[hdd_d]: <H1>hdd_d Used</H1>
Unscaled[hdd_d]: ymwd
ShortLegend[hdd_d]: %
XSize[hdd_d]: 500
YSize[hdd_d]: 100
YLegend[hdd_d]: hdd_d
Legend1[hdd_d]: hdd_d Utilization in % (Load)
Legend2[hdd_d]: hdd_d Utilization in % (Load)
Legend3[hdd_d]:
Legend4[hdd_d]:
LegendI[hdd_d]:  Used hdd_d
LegendO[hdd_d]:
Colours[hdd_d]: VIOLET#191970,GREEN#ffffff,BLUE#0000ff,GRAY#AAAAAA
Options[hdd_d]: growright,gauge
#kilo[hdd_d]: 1024

#hdd_e d
Target[hdd_e]: .1.3.6.1.2.1.25.2.3.1.6.4&.1.3.6.1.2.1.25.2.3.1.6.4:snmpid@192.168.0.3 * 4096 * 100 / 7789305856
MaxBytes[hdd_e]: 100
Title[hdd_e]: hdd E
PageTop[hdd_e]: <H1>hdd_e Used</H1>
Unscaled[hdd_e]: ymwd
ShortLegend[hdd_e]: %
XSize[hdd_e]: 500
YSize[hdd_e]: 100
YLegend[hdd_e]: hdd_e
Legend1[hdd_e]: hdd_e Utilization in % (Load)
Legend2[hdd_e]: hdd_e Utilization in % (Load)
Legend3[hdd_e]:
Legend4[hdd_e]:
LegendI[hdd_e]:  Used hdd_e
LegendO[hdd_e]:
Colours[hdd_e]: VIOLET#191970,GREEN#ffffff,BLUE#0000ff,GRAY#AAAAAA
Options[hdd_e]: growright,gauge
#kilo[hdd_e]: 1024





cfg 를 모두 수정후에 실행을 시키면 각각

트래픽 , CPU , 메모리 , 하드디스크 사용량을 보면

사용자 삽입 이미지


이렇게 나타나게 됩니다
이제 감이 좀 잡히시죠 이제 주기적으로 실행하게 해서 cfg 파일이 jpg 파일을 생성하게 한뒤 이부분을
index.php 등에서 가져와서 뿌려지게 해야됩니다


그런데 제가 처음보여드린 사진에보면 한화면에 모든 내용이 다나타나게 되는데 어떻게 했는지 알려드리겠습니다

제가 만든 index.php 의 소스 입니다      
   예제 다운로드


<html>
<head>
<title>MRTG(Muti Router Traffic Grapher)</title>
<link rel=StyleSheet HREF=./style.css type=text/css title=style>
 <meta http-equiv="refresh" content="300" />
 <meta http-equiv="pragma" content="no-cache" />
 <meta http-equiv="cache-control" content="no-cache" />
 <meta http-equiv="expires" content="Mon, 18 Dec 2006 02:45:46 GMT" />
 <meta http-equiv="generator" content="MRTG 2.12.2" />
 <meta http-equiv="date" content="Mon, 18 Dec 2006 02:45:46 GMT" />
 <meta http-equiv="content-type" content="text/html; charset=euc-kr" />
</head>
<body marginwidth="3" marginheight="3" topmargin="3" leftmargin="3">
<?
 function grafic($S, $src, $subject, $drive, $Ghz, $Mb, $OS){
 GLOBAL $mode;

  // MRTG 상태 정보 가져오기
  $fp = @fopen("$src/traffic.html","r");
     if(!$fp) break;
  while(!feof($fp)){
     $tmp = fgets($fp, 2000);
     if(eregi("가동 시간",$tmp)){
  $status="<font color=blue>[정상]</font>";
  $graf_status="";
        break;
        }
     if(!eregi("가동 시간",$tmp)){ 
        $status="<font color=red>[비정상]</font>";
        $graf_status="style=\"filter:gray()\"";
  }                                        
     }
     fclose($fp);

  //cpu 상태 가져오기
     $fp = @fopen("$src/cpu.1.log","r");
     if(!$fp) break;
     $tmp = fgets($fp, 200);   
  $cpu_temp = split(" ",$tmp);
     if($cpu_temp[1] >= 50){
   $C_color="<span style=\"background-color:red;color:black;\">";   
  }else if($cpu_temp[1] < 50 && $cpu_temp[1] > 20){
   $C_color="<span style=\"background-color:yellow;color:black;\">";
  }else{
   $C_color="<span>";
  }
 
  $cpu = $cpu_temp[1];
 
  fclose($fp);
  //memory 상태 가져오기
     $fp = @fopen("$src/memory.log","r");
  if(!$fp) break;
     $tmp = fgets($fp, 200);   
  $memory_tmp = split(" ",$tmp);
     $memory_temp2 = (($memory_tmp[1] / 1024) / 1024) % 10000;
  if($memory_temp2 < $Mb){
  $memory=$memory_temp2;
  }else if($memory_temp2 >= $Mb){
  $memory="<span style=\"background-color:red;color:black;\">".$memory_temp2."</span>";
  }
 
  fclose($fp);

 
  //disk 사용량 가져오기
  $hdd_name = array('hdd_c','hdd_d','hdd_e','hdd_f','hdd_g','hdd_h','hdd_i','hdd_j','hdd_k');
  $hdd_name_A = array('C','D','E','F','G','H','I','J','K');
  $i=0;
  while ($i < $drive){   // drive 는 드라이브 갯수 유저가 지정
  $fp = @fopen("$src/$hdd_name[$i].log","r");
  if(!$fp) {echo "&nbsp;&nbsp;&nbsp;<B>$src's Fault Drive Settings</B>"; break;}
  $tmp = fgets($fp, 200);   
  $hdd_tmp = split(" ",$tmp);
 
  if($hdd_tmp[1] >= 80 && $hdd_tmp[1] < 90){    // 80 이상 90미만경우 경고
   $D_color="<span style=\"background-color:yellow;color:black;\">";
  }else if($hdd_tmp[1] >= 90){  // 90이상일경우 경고
   $D_color="<span style=\"background-color:red;color:black;\">";
  }else{
   $D_color="<span>";  // 정상일경우
  }
  $save.="<a href=./$src/$hdd_name[$i].html><img src=./images/disk.jpg border=0>$D_color $hdd_name_A[$i] $hdd_tmp[1] </span></font></a>% | ";
   fclose($fp);
  $i++;
  }
  // $S 로 테이블 색 구별하기
  if($S ==1){
  $S_Color="#708090";
  }else if($S==2){
  $S_Color="#1e90ff";
  }else{
  $S_Color="#696969";
  }
echo "
<table border=1 cellspacing=0 cellpadding=1 bgcolor=white border=1 bordercolor=#708090 style=\"border-collapse:collapse;\">
  <tr> 
 <td bgcolor=$S_Color><font color=white>$status $src / $subject / $Ghz Ghz / $Mb Mb / $OS</font></td>                    
  </tr>
  <tr>
    <td><a href=./$src/cpu.1.html><img src=./images/cpu.jpg border=0>$C_color $cpu /100 %</span></font></a> | <a href=./$src/memory.html><img src=./images/memory.jpg border=0> $memory / $Mb Mb</a> | $save</td>
  </tr>
  <tr>
    <td>";
// 모드 선택부분
// 0 트래픽 , 1 CPU , 2 메모리 , 3 HDDC , 4 HDDD , 5 HDDE , 6 ....    traffic-day.png
 if(!$mode) $mode=0;
  if($mode==0){
  echo "<a href=./$src/traffic.html><img src=$src/traffic-day.png border=0 $graf_status></a>";
 }else if($mode==1){
  echo "<a href=./$src/cpu.1.html><img src=$src/cpu.1-day.png border=0></a>";
 }else if($mode==2){
  echo "<a href=./$src/memory.html><img src=$src/memory-day.png border=0></a>";
 }else if($mode==3){
  echo "<a href=./$src/hdd_c.html><img src=$src/hdd_c-day.png border=0></a>";
 }else if($mode==4){
  echo "<a href=./$src/hdd_d.html><img src=$src/hdd_d-day.png border=0></a>";
 }else if($mode==5){
  if(file_exists("$src/hdd_e-day.png")){
   echo "<a href=./$src/hdd_e.html><img src=$src/hdd_e-day.png border=0></a>";
  }else{
   echo "<img src=./images/noimage.jpg border=0>";
  }
 }else if($mode==6){
  if(file_exists("$src/hdd_f-day.png")){
   echo "<a href=./$src/hdd_f.html><img src=$src/hdd_f-day.png border=0></a>";
  }else{
   echo "<img src=./images/noimage.jpg border=0>";
  }
 }else if($mode==7){
  if(file_exists("$src/hdd_g-day.png")){
   echo "<a href=./$src/hdd_g.html><img src=$src/hdd_g-day.png border=0></a>";
  }else{
   echo "<img src=./images/noimage.jpg border=0>";
  }
 }else if($mode==8){
  if(file_exists("$src/hdd_h-day.png")){
   echo "<a href=./$src/hdd_h.html><img src=$src/hdd_h-day.png border=0></a>";
  }else{
   echo "<img src=./images/noimage.jpg border=0>";
  }
 }else{
  echo "<a href=./$src/traffic.html><img src=$src/traffic-day.png border=0 $graf_status></a>";
 }
 
 
 
 echo "
 
 </td>
  </tr>
</table>";
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// grafic("구분색","주소","타이틀","드라이브갯수","CPU클럭","메모리용량","운영체제");
?>

<? echo"<a href='$_SERVER[PHP_SELF]?action=logout'>"; ?><B>로그아웃</B></a><br><br><br>
<font color=#708090>■</font>&nbsp;A SERVER&nbsp;&nbsp;
<font color=#1e90ff>■</font>&nbsp;B SERVER&nbsp;&nbsp;
<font color=#696969>■</font>&nbsp;사내망&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<font color=yellow>■</font>&nbsp;경고&nbsp;&nbsp;
<font color=red>■</font>&nbsp;위험&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

<? //드라이브 모드 자동생성 부분
 $s=array('Traffic','CPU','Memory','C','D','E','F','G','H');
 
 for($a=0; $a<sizeof($s); $a++){
  if($mode==$a){
   echo "<a href=$PHP_SELF?mode=$a><b><font color=red>▶$s[$a]◀</font></b></a> &nbsp;|&nbsp;";
  }else{
   echo "<a href=$PHP_SELF?mode=$a>$s[$a]</a> &nbsp;|&nbsp;";
  }
 }
// 실제 뿌려지는 부분 /////////////////////////////////////////////////////////////////////
?>
<table>
 <tr>
  <td><?grafic("1","192.168.0.3","호스팅","3","1","512","Windows 2003 Server");?></td>
  <td><?grafic("1","192.168.0.4","호스팅","3","1","512","Windows 2003 Server");?></td>
 </tr>
 <tr>
  <td><?grafic("1","192.168.0.5","호스팅","3","1","512","Windows 2003 Server");?></td>
  <td><?grafic("1","192.168.0.6","호스팅","3","1","512","Windows 2003 Server");?></td>
 </tr>
 <tr>
  <td><?grafic("1","192.168.0.7","호스팅","3","1","512","Windows 2003 Server");?></td>
  <td><?grafic("1","192.168.0.8","호스팅","3","1","512","Windows 2003 Server");?></td>
 </tr>
 <tr>
  <td><?grafic("1","192.168.0.9","호스팅","3","1","512","Windows 2003 Server");?></td>
  <td><?grafic("1","192.168.0.10","호스팅","3","1","512","Windows 2003 Server");?></td>
 </tr>
 <tr>
  <td><?grafic("1","192.168.0.11","호스팅","3","1","512","Windows 2003 Server");?></td>
  <td><?grafic("1","192.168.0.12","호스팅","3","1","512","Windows 2003 Server");?></td>
 </tr>
 <tr>
  <td><?grafic("1","192.168.0.13","호스팅","3","1","512","Windows 2003 Server");?></td>
  <td><?grafic("1","192.168.0.14","호스팅","3","1","512","Windows 2003 Server");?></td>
 </tr>
 <tr>
  <td><?grafic("1","192.168.0.15","호스팅","3","1","512","Windows 2003 Server");?></td>
  <td><?grafic("1","192.168.0.16","호스팅","3","1","512","Windows 2003 Server");?></td>
 </tr>
 <tr>
  <td><?grafic("1","192.168.0.17","호스팅","3","1","512","Windows 2003 Server");?></td>
  <td><?grafic("1","192.168.0.18","호스팅","3","1","512","Windows 2003 Server");?></td>
 </tr>
 </table>
</body>
</html>



몇몇 부분 보안상 공개못하는부분은 지우고 딱 필요한부분만 적어봤습니다

일단 function 구문을 만들어서 밑에서 grafic 로 불러오면 자동으로 그래프가 생성되도록 만들었습니다

일단 보시면 트래픽정보페이지를 눌러봤을때 나타나는 시간정보가 있는데 이부분이 나타나면
트래픽 이 살아있는 상태입니다 그래서 [정상] 으로 나타나며 이글자가 나타나지 않으면 [비정상]
으로 나타나게 해봤습니다 사실 간단한거지만 이것으로 일단 확 표가 나지요

그리고 비정상일때는 트래픽그래프 그림이 흑백으로 나타나게 해놨습니다 이러면 더 비쥬얼 해지겠죠


그리고 CPU 정보와 메모리정보 하드정보는 어떻게 가져와서 뿌리느냐 궁금하실겁니다

이건 cfg 파일이 실행되면 로그가 생성되는데 로그의 맨 윗쪽 부분에 정보를 가져와서
뿌리는 방식입니다 파일에 접근해서 정보를 가져와서 계산한뒤 뿌리는것이지요

소스설명은 다 설명드리자면 너무 복잡할테고 잘 짜여진 소스도 아니라서 일단 참고만 해주세요 ㅠㅠ

일단 이것으로 MRTG 활용편을 일단락 시키겠습니다

소스는 퍼가시기 편하게 다 첨부파일로 만들어서 링크를 걸었고 설명부분은 막 퍼가지 못하도록
막아놓은 상태예용 자주 페이지 들리셔서 질문도해주시고 하세요 ~ 그럼




// 추가
Getif 다운로드 :




Getif 로 OID 값 알아오기

사용자 삽입 이미지




















Getif 를 설치 후 실행한뒤
Host name 에는 OID 값을 알아올 대상 서버의 아이피를
그리고 SNMP Read community 에는 대상 서버의 SNMP 커뮤니티 아이디를 적어준뒤

Start 버튼을 누릅니다

사용자 삽입 이미지





















MBrower 에서 iso 를 선택후 Start 를 누르면 서버에 대한 모든 정보값이 나타납니다
원하는 값이 나오지 않을때는

Windows 서버경우에는 SNMP4W2K-STD 를 설치하여 정보를 확장해줍니다

다운로드 SNMP4W2K-STD
설치후 재부팅 요함

'소프트웨어 > 서버관련' 카테고리의 다른 글

FreeBSD CPU 정보 알아내기  (0) 2007.11.05
Mercury/32 4.52  (4) 2007.11.04
FreeBSD PDF 메뉴얼 전체  (0) 2007.10.30
Packet Queue & Session Queue - pf.conf  (1) 2007.10.30
FreeBSD 6.2 pf.conf Default File  (0) 2007.10.30

댓글