Skip to content

MRTG 소스 설치

조회 수 24028 추천 수 0 2010.05.11 16:47:38

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.
syscontact Me <root@kebia.net>

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 ##############
disk / 100000
disk /home 100000
disk /usr 100000
disk /var 100000
######################################################
# You can add the other partition for usage monitoring
######################################################

load 12 14 14
--------------------------------------------------------------------------------

3)
## snmpd 데몬을 실행후 snmp 가 제대로 동작하는지 확인한다.

[root@baekdu snmp]# snmpwalk localhost public system
.
.
.
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 를 주물러 보자.

4)
## 우선 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 에 관한 내용은 자신의 구미에 맞게 설정해 준도록 한다.

5)
## 이제 처음으로 mrtg를 실행해 보도록 한다.
[root@baekdu snmp]# mrtg /etc/mrtg/baki.cfg

몇가지 WARNING이 나오는데 신경쓸 필요가 없다.
이전 비교데이타가 없어서 나오는 메시지이다.
같은 명령을 몇번 실행하면 사라진다.

[root@baekdu snmp]# mrtg /etc/mrtg/baki.cfg
[root@baekdu snmp]# mrtg /etc/mrtg/baki.cfg
[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) 개요 페이지 만들기
# 아래 예제파일처럼 링크가 많을경우 사용한다.
indexmaker -o /var/www/html/mrtg/index.html /etc/mrtg/baki.cfg

#########
######### 아래 내용은 cfg 파일의 예제이다.
#########
######### snmp 를 않쓰고 스키립트를 이용한 부분도 있다.
######### 마지막부분은 관련스크립트의 예제이다.

[root@baekdu snmp]# cat /etc/mrtg/system.cfg
------------------------------------------------------------------------------
## 작업 디렉토리
WorkDir: /var/www/html/mrtg

#IconDir: /mrtg/images
#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>

#System & Nice
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:&nbsp;
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]: / :&nbsp&nbsp&nbsp;
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>

# /usr, /var
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 :&nbsp;
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>

# STATUS
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>
-------------------------------------------------------------------------------

###### 스크립트 예제.

[root@baekdu script]# cat disk1
#!/bin/sh
#disk 사용율 / , /home
#df 로 각 파티션의 device name 입력.

ROOT="sda8"
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"
-------------------------------------------------------------------

[root@baekdu script]# cat disk2
#!/bin/sh
#disk 사용율 /usr , /var
#df 로 각 파티션의 device name 입력.

ROOT="sda2"
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"
-------------------------------------------------------------------

[root@baekdu script]# cat radius-session
#!/bin/sh
#radius 서버의 현재 session 숫자

SES1=`netstat -ant |grep ESTABLISHED |grep :1812|wc -l`
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"
-------------------------------------------------------------------

[root@baekdu script]# cat radius-stat
#!/bin/sh
#RADIUS daemon 상태 체크

WATCH=`ps -e |grep AGSwatch |wc -l`
RADIUS=`ps -e |grep AGSradiusd |wc -l`
TIME=`/usr/bin/uptime |awk '{print $3" "$4}'|awk -F , '{print $1}'`
OS=LINUX

echo $WATCH
echo $RADIUS
echo $TIME
echo $OS
-------------------------------------------------------------------

 

 

###
###
### 각 명령어나 설정파일에 대한 세부 내용은 man page 를 통해 확인 하거나
### 아래 링크를 참조하기 바란다...
###
###

그림은 http://tunelinux.pe.kr/mrtg/ 이것 보세요.

http://tunelinux.pe.kr
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 사용법.

http://www.mrtg.co.kr/
MRTG에 대한 여러가지 관련자료를 잘 모아두었습니다. 시스템 모니터링 자료 있습니다.
SNMP와 스크립트를 같이 이용합니다.

http://www.wowlinux.co.kr/download/specialview.html?id=55&view=1
MRTG로 시스템 모니터링하는 방법에 대해 설명이 있습니다. SNMP이용합니다.

http://net-snmp.sourceforge.net
ucd-snmp 홈페이지입니다. 이젠 net-snmp로 이름이 바뀐듯 합니다.

http://net-snmp.sourceforge.net/tutorial/mrtg/
위 사이트에서 snmp와 mrtg 이용 시스템 모니터링 예제가 나옵니다.

http://www.oops.org/?t=lecture&sb=mrtg&n=1
mrtg 이용 시스템 모니터링 강좌글입니다.
mrtg를 rpm 패키징으로 묶어두고 사용하는 것인데 제 생각에는 강좌내용을 참고만 하고 직접 컴파일을 하여 쓰는게 더 낫지 않은가 합니다. 좀 헷갈리거든요. 여기서는 스크립트 이용한 방식입니다.

http://tunelinux.pe.kr/bbs/read.php?table=linuxinfo&no=26
네트워크 관리 시스템에 대한 글입니다. SNMP에 대해서 알고싶다면 많은 도움될 것입니다.

profile

일요일은 짜빠게뤼~ 먹는날~^^

엮인글 :
http://adminplay.com/12714/640/trackback
List of Articles
번호 제목 글쓴이 날짜 조회 수sort
287 CentOS Samba 설정 ADMINPLAY 2010-11-08 24884
286 가볍고 강력한 SNMP를 이용한 모니터링 프로그램입니다. file ADMINPLAY 2009-10-31 24859
285 리눅스 - htop file ADMINPLAY 2010-09-12 24838
284 favicon 만들기 ADMINPLAY 2009-09-30 24835
283 네트워크 관리자를 위한 통합 모니터링 툴 - N.E.W.T file [2] ADMINPLAY 2009-10-31 24705
282 리눅스 - zip 압축 해제 ADMINPLAY 2009-07-25 24646
281 [CentOS] ffmpeg 설치 ADMINPLAY 2012-02-07 24495
280 리눅스 Proxy Server[Squid] 설정법[RedHatLinux8.0] ADMINPLAY 2009-11-26 24408
279 커널 컴파일 장애 처리 perl: warning: Please check that... ADMINPLAY 2009-08-08 24378
278 대용량 하드 디스크 파티셔닝 (GPT 파티션) ADMINPLAY 2009-06-04 24364
277 lighttpd와 Apache의 성능 차이 file [2] l2zeo 2012-03-08 24242
276 [Flash] 크로스 도메인 설정 방법 ADMINPLAY 2010-08-31 24233
275 로드밸런싱의 ‘꽃’, L4/L7 스위치 관심 집중 ADMINPLAY 2009-11-30 24151
274 kernel panic 발생 시 자동으로 리부팅 설정 ADMIN 2008-12-10 24084
273 하드웨어정보 확인(lshw) file ADMINPLAY 2008-11-03 24038
» MRTG 소스 설치 ADMINPLAY 2010-05-11 24028
271 리눅스에서 특정 파일을 제외하고 삭제하기 ADMIN 2008-11-03 23970
270 VI 에디터 유니코드(UTF-8)로 인코딩 전환 ADMINPLAY 2010-04-02 23966
269 리눅스 공유 메모리의 설정 (세마포어) ADMINPLAY 2010-04-28 23950
268 젠투리눅스에서 잃어버린 암호를 다시 설정하기 ADMINPLAY 2010-04-15 23899

Copyright ADMINPLAY corp. All rights reserved.

abcXYZ, 세종대왕,1234

abcXYZ, 세종대왕,1234