1. 준비작업
: mrtg 설치전에 gd, libpng, zlib 가 설치되어 있어야 된다.
: 소수 다운 후 압축 풀고 /home/mrtg 로 옮긴다.
# tar vzfx mrtg-2.9.29.tar.gz
# mv mrtg-2.9.29.tar.gz /home/mrtg
: mrtg 를 관리할 계정과 디렉토리를 생성하고 권한을 할당한다.
adduser mrtg
passwd mrtg
chmod 701 mrtg
# ll
total 4
drwx-----x 4 mrtg mrtg 4096 Aug 24 14:00 mrtg
mkdir cfg
mkdir www
# chown -R mrtg:mrtg mrtg
# ll
total 8
drwxr-xr-x 2 mrtg mrtg 4096 Aug 24 14:00 cfg
drwxr-xr-x 2 mrtg mrtg 4096 Aug 24 14:00 www
2. 설치하기
./configure --prefix=/usr/local/mrtg \
--with-gd=/usr/local/gd \
--with-z=/usr/local/zlib \
--with-png=/usr/local/libpng
make
make install
3. cfg 파일 생성
./cfgmaker --global 'WorkDir: /home/mrtg/www' \
--global 'Language: Korean' \
--global 'Options[_]: bits,growright' \
--output /home/mrtg/conf/mrtg.cfg \
public@220.85.43.5
: paran(커뮤티니) 틀릴경우 mrtg 를 못 긁어 온다. snmpd.conf 에서 확인한다.
ls /home/mrtg/cfg/
mrtg.cfg mrtg.ok
4. index 페이지 만들기
: 버전마다 옵션 주는 방법이 틀리기 때문에 꼭 확인이 필요하다.
# ./indexmaker --output /home/mrtg/www/index.html /home/mrtg/cfg/mrtg.cfg
5. cron 설정
: 5분 마다 자동 실행되게 설정한다. crontab -e 를 입력한 후 아래 내용을 입력한다.
# crontab -e*/5 * * * * /usr/local/mrtg/bin/mrtg /home/mrtg/cfg/mrtg.cfg
WorkDir: /home/mrtg/
Options[_]: growright, bits
## MRTG 설치하기 ##
## 2003.03.11 기술기획팀/대리 원승민
1)
##필요한 패키지 : 확인후 필요한 패키지는 설치하도록 한다.
ucd-snmp-devel-4.2.4-1
ucd-snmp-4.2.4-1
ucd-snmp-utils-4.2.4-1
gd-1.8.4-4
gd-devel-1.8.4-4
mrtg-2.9.6-6
perl-5.6.1-26.72.4
그리고 Apache 가 설치되있어야 한다.
2)
## snmpd.conf 의 내용이다. default 파일로 동작이 않되면 아래 내용을 그대로 사용한다.
------------------------------------------------------------------------------------
[root@baekdu snmp]# cat /etc/snmp/snmpd.conf
com2sec local default public
#com2sec local default COMMUNITY
#com2sec local localhost COMMUNITY
#com2sec local localhost public
#com2sec local localhost COMMUNITY
#com2sec mynetwork NETWORK/24 COMMUNITY
group MyRWGroup v1 local
group MyRWGroup v2c local
group MyRWGroup usm local
group MyROGroup v1 mynetwork
group MyROGroup v2c mynetwork
group MyROGroup usm mynetwork
view all included .1 80
access MyROGroup "" any noauth exact all none none
access MyRWGroup "" any noauth exact all all none
syslocation Right here, right now. proc mountd proc ntalkd 4 proc sendmail 10 1 exec echotest /bin/echo hello world view mib2 included .iso.org.dod.internet.mgmt.mib-2 fc # Configuration for DISK Usage Analysis ############## load 12 14 14 3) [root@baekdu snmp]# snmpwalk localhost public system 끝부분이 위와같이 끝나면 정상 작동중이다. 4) 5) 몇가지 WARNING이 나오는데 신경쓸 필요가 없다. [root@baekdu snmp]# mrtg /etc/mrtg/baki.cfg 6) /var/www/html/mrtg/ 에 가보게 되면 baki와 관계된 여러개의 파을을 확인할수있다. 7) 이제 마지막으로 /etc/crontab 에 mrtg 를 등록한다. 0-59/5 * * * * root /usr/bin/mrtg /etc/mrtg/baki.cfg 그리고 crond 를 재실행 한다. 8) 개요 페이지 만들기 ######### [root@baekdu snmp]# cat /etc/mrtg/system.cfg #IconDir: /mrtg/images ## 한글설정 # ### # # #System & Nice #### 서버에 맞게 설정 # # /usr, /var # # STATUS ###### 스크립트 예제. [root@baekdu script]# cat disk1 ROOT="sda8" [root@baekdu script]# cat disk2 ROOT="sda2" [root@baekdu script]# cat radius-session SES1=`netstat -ant |grep ESTABLISHED |grep :1812|wc -l` [root@baekdu script]# cat radius-stat WATCH=`ps -e |grep AGSwatch |wc -l` echo $WATCH ### 그림은 http://tunelinux.pe.kr/mrtg/ 이것 보세요. http://tunelinux.pe.kr ## 참고자료 http://www.mrtg.co.kr/ http://www.wowlinux.co.kr/download/specialview.html?id=55&view=1 http://net-snmp.sourceforge.net http://net-snmp.sourceforge.net/tutorial/mrtg/ http://www.oops.org/?t=lecture&sb=mrtg&n=1 http://tunelinux.pe.kr/bbs/read.php?table=linuxinfo&no=26
syscontact Me <root@kebia.net>
disk / 100000
disk /home 100000
disk /usr 100000
disk /var 100000
######################################################
# You can add the other partition for usage monitoring
######################################################
--------------------------------------------------------------------------------
## snmpd 데몬을 실행후 snmp 가 제대로 동작하는지 확인한다.
.
.
.
system.sysORTable.sysOREntry.sysORUpTime.1 = Timeticks: (0) 0:00:00.00
system.sysORTable.sysOREntry.sysORUpTime.2 = Timeticks: (0) 0:00:00.00
system.sysORTable.sysOREntry.sysORUpTime.3 = Timeticks: (0) 0:00:00.00
system.sysORTable.sysOREntry.sysORUpTime.4 = Timeticks: (0) 0:00:00.00
system.sysORTable.sysOREntry.sysORUpTime.5 = Timeticks: (0) 0:00:00.00
system.sysORTable.sysOREntry.sysORUpTime.6 = Timeticks: (0) 0:00:00.00
system.sysORTable.sysOREntry.sysORUpTime.7 = Timeticks: (0) 0:00:00.00
system.sysORTable.sysOREntry.sysORUpTime.8 = Timeticks: (0) 0:00:00.00
system.sysORTable.sysOREntry.sysORUpTime.9 = Timeticks: (0) 0:00:00.00
## 이제부터 mrtg 를 주물러 보자.
## 우선 cfgmaker 를 통해 기본 cfg 파일을 만들도록 한다.
## 생성된 파일을 바탕으로 여러가지 모니터링 설정을 만들도록 한다.
[root@baki bin]# ./cfgmaker --global 'WorkDir: /var/www/html/mrtg' --global 'Options[_]: bits,growright' --output /home/mrtg/baki.cfg public@xxx.xxx.xxx.xxx
## workDir 과 output 에 관한 내용은 자신의 구미에 맞게 설정해 준도록 한다.
## 이제 처음으로 mrtg를 실행해 보도록 한다.
[root@baekdu snmp]# mrtg /etc/mrtg/baki.cfg
이전 비교데이타가 없어서 나오는 메시지이다.
같은 명령을 몇번 실행하면 사라진다.
[root@baekdu snmp]# mrtg /etc/mrtg/baki.cfg
[root@baekdu snmp]# mrtg /etc/mrtg/baki.cfg
# 아래 예제파일처럼 링크가 많을경우 사용한다.
indexmaker -o /var/www/html/mrtg/index.html /etc/mrtg/baki.cfg
######### 아래 내용은 cfg 파일의 예제이다.
#########
######### snmp 를 않쓰고 스키립트를 이용한 부분도 있다.
######### 마지막부분은 관련스크립트의 예제이다.
------------------------------------------------------------------------------
## 작업 디렉토리
WorkDir: /var/www/html/mrtg
#Interval: 5
Language: korean
Refresh: 300
Options[_]: growright
## baekdu - network traffic(eth0)
#
Target[baekdu.eth0]: 2:air_community@baekdu
#100M
#MaxBytes[baekdu.eth0]: 12500000
#10M
MaxBytes[baekdu.eth0]: 1250000
Unscaled[baekdu.eth0]: ymwd
Options[baekdu.eth0]: bits,growright
Title[baekdu.eth0]: Traffic Analysis : 100Mbyte
PageTop[baekdu.eth0]: <H1>Traffic Analysis</H1>
<TABLE>
# <TR><TD>Max Speed:</TD> <TD>1250.0 kBytes/s</TD></TR>
# <TR><TD>Max Speed:</TD> <TD>100 Mbits/s</TD></TR>
# <TR><TD>Ip:</TD> <TD>218.55.101.158 ()</TD></TR>
</TABLE>
## baekdu - load average
#
Target[baekdu.load]: .1.3.6.1.4.1.2021.10.1.3.2&.1.3.6.1.4.1.2021.10.1.3.3:air_community@localhost * 100
WithPeak[baekdu.load]: my
MaxBytes[baekdu.load]: 100
absMax[baekdu.load]: 10000
Unscaled[baekdu.load]: ymwd
Title[baekdu.load]: LOAD AVG.
Options[baekdu.load]: growright,gauge,integer,nopercent
YLegend[baekdu.load]: Load Average
LegendI[baekdu.load]: 5 min:
LegendO[baekdu.load]: 15 min:
Legend1[baekdu.load]: Load average for 5 Min
Legend2[baekdu.load]: Load average for 15 Min
Legend3[baekdu.load]: Max load average for 5 Min
Legend4[baekdu.load]: Max Load average for 15 Min
YTicsFactor[baekdu.load]: 1
PageTop[baekdu.load]: <H1>LOAD AVERAGE</H1>
<TABLE>
# <TR><TD>System:</TD> <TD>AIRCUVE 개발서버</TD></TR>
# <TR><TD>Maintainer:</TD> <TD>baki@aircuve.com</TD></TR>
</TABLE>
## baekdu - cpu usage
#
#User & Idle
LoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Target[baekdu.cpu1]:ssCpuRawUser.0&ssCpuRawIdle.0:air_community@localhost
MaxBytes[baekdu.cpu1]: 100
Title[baekdu.cpu1]: CPU LOAD : User & Idle
Unscaled[baekdu.cpu1]: ymwd
Options[baekdu.cpu1]: growright,nopercent
YLegend[baekdu.cpu1]: CPU Utilization
LegendI[baekdu.cpu1]: User:
LegendO[baekdu.cpu1]: Idle:
Legend1[baekdu.cpu1]: User CPU in % (Load)
Legend2[baekdu.cpu1]: Idle CPU in % (Load)
Legend3[baekdu.cpu1]:
Legend4[baekdu.cpu1]:
ShortLegend[baekdu.cpu1]: %
PageTop[baekdu.cpu1]: <H1>Active CPU Load : User & Idle %</H1>
<TABLE>
# <TR><TD>System:</TD> <TD>AIRCUVE 개발서버</TD></TR>
# <TR><TD>Maintainer:</TD> <TD>baki@aircuve.com</TD></TR>
# <TR><TD>User & Idle</TD></TR>
</TABLE>
LoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Target[baekdu.cpu2]:ssCpuRawSystem.0&ssCpuRawNice.0:air_community@localhost
MaxBytes[baekdu.cpu2]: 100
Title[baekdu.cpu2]: CPU LOAD : System & Nice
Unscaled[baekdu.cpu2]: ymwd
Options[baekdu.cpu2]: growright,nopercent
YLegend[baekdu.cpu2]: CPU Utilization
LegendI[baekdu.cpu2]: System :
LegendO[baekdu.cpu2]: Nice :
Legend1[baekdu.cpu2]: System CPU in % (Load)
Legend2[baekdu.cpu2]: Nice CPU in % (Load)
Legend3[baekdu.cpu2]:
Legend4[baekdu.cpu2]:
ShortLegend[baekdu.cpu2]: %
PageTop[baekdu.cpu2]: <H1>Active CPU Load : System & Nice %</H1>
<TABLE>
# <TR><TD>System:</TD> <TD>AIRCUVE 개발서버</TD></TR>
# <TR><TD>Maintainer:</TD> <TD>baki@aircuve.com</TD></TR>
# <TR><TD>System & Nice</TD></TR>
</TABLE>
#
## baekdu - memory usage
#
Target[baekdu.mem]: memAvailReal.0&memAvailReal.0:air_community@localhost * 1024 + memBuffer.0&memBuffer.0:air_community@localhost * 1024 + memCached.0&memCached.0:air_community@localhost * 1024
#MaxBytes[baekdu.mem]: 1052483584
MaxBytes[baekdu.mem]: 527654912
Title[baekdu.mem]: MEMORY USAGE(avalable = free+buffers+cached)
kilo[baekdu.mem]: 1024
Unscaled[baekdu.mem]: ymwd
Options[baekdu.mem]: growright,gauge, nopercent
YLegend[baekdu.mem]: Free Memory
LegendI[baekdu.mem]: Free Mem:
LegendO[baekdu.mem]:
Legend1[baekdu.mem]: Free Memory
Legend2[baekdu.mem]:
Legend3[baekdu.mem]:
Legend4[baekdu.mem]:
ShortLegend[baekdu.mem]: B
PageTop[baekdu.mem]: <H1>Free Memory Usage</H1>
<TABLE>
# <TR><TD>System:</TD> <TD>AIRCUVE 개발서버</TD></TR>
# <TR><TD>Maintainer:</TD> <TD>baki@aircuve.com</TD></TR>
# <TR><TD>Free memory (Total - 512MB) : </TD> <TD> Free + buffers + cached </TD></TR>
</TABLE>
## baekdu - disk usage
#
# /, /home
#LoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Target[baekdu.disk1]: `/etc/mrtg/script/disk1`
Title[baekdu.disk1]: / , /home DISK USAGE
Unscaled[baekdu.disk1]: ymwd
Options[baekdu.disk1]: growright,gauge,nopercent
YLegend[baekdu.disk1]: disk usage %
LegendI[baekdu.disk1]: / :  
LegendO[baekdu.disk1]: /home :
Legend1[baekdu.disk1]: / Disk usage
Legend2[baekdu.disk1]: /home Disk usage
MaxBytes[baekdu.disk1]: 100
ShortLegend[baekdu.disk1]: %
PageTop[baekdu.disk1]: <H1>/ , /home DISK USAGE</H1>
<TABLE>
# <TR><TD>System:</TD> <TD>AIRCUVE 개발서버</TD></TR>
# <TR><TD>Maintainer:</TD> <TD>baki@aircuve.com</TD></TR>
# <TR><TD>/ , /home</TD></TR>
</TABLE>
Target[baekdu.disk2]: `/etc/mrtg/script/disk2`
Title[baekdu.disk2]: /usr , /var DISK USAGE
Unscaled[baekdu.disk2]: ymwd
Options[baekdu.disk2]: growright,gauge,nopercent
YLegend[baekdu.disk2]: disk usage %
LegendI[baekdu.disk2]: /usr :
LegendO[baekdu.disk2]: /var :
Legend1[baekdu.disk2]: /usr Disk usage
Legend2[baekdu.disk2]: /var Disk usage
MaxBytes[baekdu.disk2]: 100
ShortLegend[baekdu.disk2]: %
PageTop[baekdu.disk2]: <H1>/usr , /var DISK USAGE</H1>
<TABLE>
# <TR><TD>System:</TD> <TD>AIRCUVE 개발서버</TD></TR>
# <TR><TD>Maintainer:</TD> <TD>baki@aircuve.com</TD></TR>
# <TR><TD>/usr , /var</TD></TR>
</TABLE>
#RADIUS
#
# STATUS
Target[baekdu.radius1]: `/etc/mrtg/script/radius-stat`
Title[baekdu.radius1]: Running Radius Daemon
Unscaled[baekdu.radius1]: ymwd
Options[baekdu.radius1]: growright,gauge,nopercent
YLegend[baekdu.radius1]: Radius Daemons
LegendI[baekdu.radius1]: AGSwatch :
LegendO[baekdu.radius1]: AGSradiusd :
Legend1[baekdu.radius1]: AGSwatch
Legend2[baekdu.radius1]: AGSradiusd
MaxBytes[baekdu.radius1]: 50
ShortLegend[baekdu.radius1]: 개
PageTop[baekdu.radius1]: <H1>Running Radius Daemon</H1>
<TABLE>
# <TR><TD>System:</TD> <TD>AIRCUVE 개발서버</TD></TR>
# <TR><TD>Maintainer:</TD> <TD>baki@aircuve.com</TD></TR>
</TABLE>
Target[baekdu.radius2]: `/etc/mrtg/script/radius-session`
Title[baekdu.radius2]: Radius Session Value
Unscaled[baekdu.radius2]: ymwd
Options[baekdu.radius2]: growright,gauge,nopercent
YLegend[baekdu.radius2]: session
LegendI[baekdu.radius2]: UDP Port 1812 :
LegendO[baekdu.radius2]: UDP Port 1813 :
Legend1[baekdu.radius2]: UDP Port 1812
Legend2[baekdu.radius2]: UDP Port 1813
MaxBytes[baekdu.radius2]: 1000
ShortLegend[baekdu.radius2]: 개
PageTop[baekdu.radius2]: <H1>Radius Session Value</H1>
<TABLE>
# <TR><TD>System:</TD> <TD>AIRCUVE 개발서버</TD></TR>
# <TR><TD>Maintainer:</TD> <TD>baki@aircuve.com</TD></TR>
</TABLE>
-------------------------------------------------------------------------------
#!/bin/sh
#disk 사용율 / , /home
#df 로 각 파티션의 device name 입력.
HOME="sda3"
#IN : / : % value
/bin/df|grep $ROOT|/bin/awk '{print $5}'|/bin/awk -F % '{print $1}'
#OUT : /home : % value
/bin/df|grep $HOME|/bin/awk '{print $5}'|/bin/awk -F % '{print $1}'
#DATE : uptime
/usr/bin/uptime |awk '{print $3" "$4}'|awk -F , '{print $1}'
#OS NAME :
echo "LINUX"
-------------------------------------------------------------------
#!/bin/sh
#disk 사용율 /usr , /var
#df 로 각 파티션의 device name 입력.
HOME="sda5"
#IN : /usr : % value
/bin/df|grep $ROOT|/bin/awk '{print $5}'|/bin/awk -F % '{print $1}'
#OUT : /var : % value
/bin/df|grep $HOME|/bin/awk '{print $5}'|/bin/awk -F % '{print $1}'
#DATE : uptime
/usr/bin/uptime |awk '{print $3" "$4}'|awk -F , '{print $1}'
#OS NAME :
echo "LINUX"
-------------------------------------------------------------------
#!/bin/sh
#radius 서버의 현재 session 숫자
SES2=`netstat -ant |grep ESTABLISHED |grep :1813|wc -l`
TIME=`/bin/ps -aux|grep AGSwatch|awk '{print $9}'`
TIME1=$TIME" "start
echo $SES1
echo $SES2
echo $TIME1
echo "RADIUS"
-------------------------------------------------------------------
#!/bin/sh
#RADIUS daemon 상태 체크
RADIUS=`ps -e |grep AGSradiusd |wc -l`
TIME=`/usr/bin/uptime |awk '{print $3" "$4}'|awk -F , '{print $1}'`
OS=LINUX
echo $RADIUS
echo $TIME
echo $OS
-------------------------------------------------------------------
###
### 각 명령어나 설정파일에 대한 세부 내용은 man page 를 통해 확인 하거나
### 아래 링크를 참조하기 바란다...
###
###
http://database.sarang.net
문태준(taejun@tunelinux.pe.kr)
http://tunelinux.pe.kr/bbs/read.php?table=linuxinfo&no=18&o[at]=s&o[sc]=t&o[ss]=mrtg&o[st]=a
MRTG 사용법.
MRTG에 대한 여러가지 관련자료를 잘 모아두었습니다. 시스템 모니터링 자료 있습니다.
SNMP와 스크립트를 같이 이용합니다.
MRTG로 시스템 모니터링하는 방법에 대해 설명이 있습니다. SNMP이용합니다.
ucd-snmp 홈페이지입니다. 이젠 net-snmp로 이름이 바뀐듯 합니다.
위 사이트에서 snmp와 mrtg 이용 시스템 모니터링 예제가 나옵니다.
mrtg 이용 시스템 모니터링 강좌글입니다.
mrtg를 rpm 패키징으로 묶어두고 사용하는 것인데 제 생각에는 강좌내용을 참고만 하고 직접 컴파일을 하여 쓰는게 더 낫지 않은가 합니다. 좀 헷갈리거든요. 여기서는 스크립트 이용한 방식입니다.
네트워크 관리 시스템에 대한 글입니다. SNMP에 대해서 알고싶다면 많은 도움될 것입니다.