트래픽 이외의 다양한 자원을 분석하기 위해서는 각각의 MIB 정보를 확인해야 한다.
debian5.0에서 snmp를 설치 했을
경우는, /usr/share/snmp/mibs/UCD-SNMP-MIB.txt 파일이 존재하며, UCD-SNMP-MIB.txt 파일에서 각 자원의
MIB 정보를 확인할 수 있다.
설정파일을 생성할때는 cfg파일내에 LoadMIBs라는 옵션으로 UCD-SNMP-MIB.txt 파일을
참조할 수 있도록 해야 한다.
- cpu 모니터링
설정파일
==========================================================================================
jook:~#
cat /etc/mrtg/cpu.cfg
WorkDir: /var/www/mrtg
LoadMIBs:
/usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Target[localhost.cpu]:ssCpuRawUser.0&ssCpuRawIdle.0:public@127.0.0.1
RouterUptime[localhost.cpu]:
public@127.0.0.1
MaxBytes[localhost.cpu]:
100
Title[localhost.cpu]: CPU Load
PageTop[localhost.cpu]:
<H1>Active CPU Load %</H1>
Unscaled[localhost.cpu]:
ymwd
ShortLegend[localhost.cpu]: %
YLegend[localhost.cpu]: CPU
Utilization
Legend1[localhost.cpu]: User CPU in %
(Load)
Legend2[localhost.cpu]: Idle CPU in %
(Load)
Legend3[localhost.cpu]:
Legend4[localhost.cpu]:
LegendI[localhost.cpu]:
User
LegendO[localhost.cpu]: Idle
Options[localhost.cpu]:
growright,nopercent
==========================================================================================
- memory 모니터링
설정파일
==========================================================================================
jook:~#
cat /etc/mrtg/mem.cfg
LoadMIBs:
/usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Target[localhost.mem]:
memAvailReal.0&memAvailSwap.0:public@localhost
PageTop[localhost.mem]:
<H1>Free Memory</H1>
WorkDir:
/var/www/mrtg
Options[localhost.mem]:
nopercent,growright,gauge,noinfo
Title[localhost.mem]: Free
Memory
MaxBytes[localhost.mem]: 10000000000
kMG[localhost.mem]:
k,M,G,T,P,X
YLegend[localhost.mem]: bytes
ShortLegend[localhost.mem]:
bytes
Legend1[localhost.mem]: Real free
Legend2[localhost.mem]: Swap
free
LegendI[localhost.mem]: Real Free :
LegendO[localhost.mem]: Swap Free
:
==========================================================================================
- disk 모니터링
설정파일
==========================================================================================
jook:~#
cat /etc/mrtg/disk.cfg
LoadMIBs:
/usr/share/snmp/mibs/UCD-SNMP-MIB.txt
Target[server.disk]:
dskPercent.6&dskPercent.7:public@localhost
Title[server.disk]: Disk
Partition Usage
WorkDir: /var/www/mrtg
PageTop[server.disk]:
<H1>Disk Partition Usage /home and
/var</H1>
MaxBytes[server.disk]: 100
ShortLegend[server.disk]:
%
YLegend[server.disk]: Disk Utilization
Legend1[server.disk]:
dskPath.6
Legend2[server.disk]: dskPath.7
LegendI[server.disk]:
/home
LegendO[server.disk]: /var
Options[server.disk]:
gauge,growright,nopercent
Unscaled[server.disk]:
ymwd
jook:~#
==========================================================================================
mrtg로 디스크를 모니터링 하기위해서는 /etc/snmp/snmpd.conf 파일에 아래와 같이 disk checks 부분이 활성화 되어
있어야 한다.
snmpd.conf 파일의 disk checks 부분을 사용하는 서버의 디스크 파티션 정보를 입력하여 수정해 놓아야
한다.
jook:/var/www/mrtg# cat /etc/snmp/snmpd.conf
~~~
###############################################################################
#
disk checks
#
# The agent can check the amount of available disk space, and make
# sure
it is above a set limit.
# disk PATH [MIN=DEFDISKMINIMUMSPACE]
#
# PATH: mount path to the disk
in question.
# MIN: Disks with space below this value will have the Mib's
errorFlag set.
# Default value = DEFDISKMINIMUMSPACE.
# Check the / partition and make sure it contains at least 10 megs.
disk / 10000
disk /usr 10000
disk /boot 10000
disk /var
10000
disk /tmp 10000
disk /home 10000
disk /home/khpark 10000
# % snmpwalk -v 1 -c public localhost .1.3.6.1.4.1.2021.9
#
enterprises.ucdavis.diskTable.dskEntry.diskIndex.1 = 0
#
enterprises.ucdavis.diskTable.dskEntry.diskPath.1 = "/" Hex: 2F
#
enterprises.ucdavis.diskTable.dskEntry.diskDevice.1 = "/dev/dsk/c201d6s0"
#
enterprises.ucdavis.diskTable.dskEntry.diskMinimum.1 = 10000
#
enterprises.ucdavis.diskTable.dskEntry.diskTotal.1 = 837130
#
enterprises.ucdavis.diskTable.dskEntry.diskAvail.1 = 316325
#
enterprises.ucdavis.diskTable.dskEntry.diskUsed.1 = 437092
#
enterprises.ucdavis.diskTable.dskEntry.diskPercent.1 = 58
#
enterprises.ucdavis.diskTable.dskEntry.diskErrorFlag.1 = 0
#
enterprises.ucdavis.diskTable.dskEntry.diskErrorMsg.1 = ""
# -----------------------------------------------------------------------------
###############################################################################
~~~
- 설정 파일에 추가되는 각각의 옵션에 대해 간단히 설명하자면, 아래와 같다.
WorkDir : mrtg의 실행결과 생성되는 웹페이지들이 저장될 디렉토리경로 설정
LoadMIBs : MIB값을 저장하고 있는 파일
Include 설정
Target : 자원을 분석하기위한 MIB값의 설정, 수집할 MIB 값은 아래의 snmpwalk 명령으로 확인하고,
필요한 MIB값을 수집힌다.
Title : 생성되는 웹(html)파일에 <title>제목</title>에 들어갈
제목부분 설정
Options : 옵션 설정 부분
- growright : 오른쪽에서부터 그래프가
생성이됨.
- nopercent : 결과로 생성되는 웹페이지내의 그래프에서 퍼센트표시를
나타내지않음.
MaxBytes : 100으로 설정했을 경우는 표시될 전체사용량을 100으로 설정
RouterUptime : 동일한
라우터를 사용하여 동일한 분석을 여러개 동시에 분석할 경우에 community name과 address를 여러번 반복하여 사용하지 않도록
하기위한 설정
Unscaled : 4개의 그래프 즉, day, week, month, year 그래프에서 Y축그래프가 MaxBytes에서
지정한 수치에 미치지 못하는 부분을 축약(생략)하여 표현하기위한 설정이다.
즉, 불필요한 부분을 보지 않기위한
설정이라는 것을 의미한다.
YLegend : Y축 그래프에 대한 설명
Legend1 : 결과 웹페이지의 하단에 표시되는 그래프의
색깔(녹색)에 대한 설명
Legend2 : Legend1과 마찬가지로 그래프 색깔(청색)에 대한 설명
LegendI : 4개의
그래프(일,주,월,년) 각각의 INPUT에 해당하는 것이 무엇인가를 설명함
LegendO : 4개의 그래프(일,주,월,년) 각각의
OUTPUT에 해당하는 것이 무엇인가를 설명함
PageTop : mrtg 실행결과 생성되는 웹 페이지의 최상단에 나타날 내용을 입력
- snmpwalk 명령으로 systemStats와 관련된 mib 값 확인
jook:/usr/share/snmp/mibs#
snmpwalk -v 1 -c public localhost systemStats
UCD-SNMP-MIB::ssIndex.0 =
INTEGER: 1
UCD-SNMP-MIB::ssErrorName.0 = STRING:
systemStats
UCD-SNMP-MIB::ssSwapIn.0 = INTEGER:
0
UCD-SNMP-MIB::ssSwapOut.0 = INTEGER: 0
UCD-SNMP-MIB::ssIOSent.0 =
INTEGER: 5
UCD-SNMP-MIB::ssIOReceive.0 = INTEGER:
11
UCD-SNMP-MIB::ssSysInterrupts.0 = INTEGER:
17
UCD-SNMP-MIB::ssSysContext.0 = INTEGER: 12
UCD-SNMP-MIB::ssCpuUser.0 =
INTEGER: 0
UCD-SNMP-MIB::ssCpuSystem.0 = INTEGER:
0
UCD-SNMP-MIB::ssCpuIdle.0 = INTEGER: 99
UCD-SNMP-MIB::ssCpuRawUser.0 =
Counter32: 296596
UCD-SNMP-MIB::ssCpuRawNice.0 = Counter32:
57888
UCD-SNMP-MIB::ssCpuRawSystem.0 = Counter32:
66659
UCD-SNMP-MIB::ssCpuRawIdle.0 = Counter32:
52355565
UCD-SNMP-MIB::ssCpuRawWait.0 = Counter32:
22003
UCD-SNMP-MIB::ssCpuRawKernel.0 = Counter32:
52486
UCD-SNMP-MIB::ssCpuRawInterrupt.0 = Counter32:
7894
UCD-SNMP-MIB::ssIORawSent.0 = Counter32:
11651102
UCD-SNMP-MIB::ssIORawReceived.0 = Counter32:
4851654
UCD-SNMP-MIB::ssRawInterrupts.0 = Counter32:
137952384
UCD-SNMP-MIB::ssRawContexts.0 = Counter32:
6142429
UCD-SNMP-MIB::ssCpuRawSoftIRQ.0 = Counter32:
6279
UCD-SNMP-MIB::ssRawSwapIn.0 = Counter32:
0
UCD-SNMP-MIB::ssRawSwapOut.0 = Counter32: 15
- snmpwalk 명령으로 memory와 관련된 mib 값 확인
jook:/usr/share/snmp/mibs# snmpwalk
-v 1 -c public localhost memory
UCD-SNMP-MIB::memIndex.0 = INTEGER:
0
UCD-SNMP-MIB::memErrorName.0 = STRING: swap
UCD-SNMP-MIB::memTotalSwap.0
= INTEGER: 977216
UCD-SNMP-MIB::memAvailSwap.0 = INTEGER:
977156
UCD-SNMP-MIB::memTotalReal.0 = INTEGER:
508748
UCD-SNMP-MIB::memAvailReal.0 = INTEGER:
25148
UCD-SNMP-MIB::memTotalFree.0 = INTEGER:
1002304
UCD-SNMP-MIB::memMinimumSwap.0 = INTEGER:
16000
UCD-SNMP-MIB::memShared.0 = INTEGER: 0
UCD-SNMP-MIB::memBuffer.0 =
INTEGER: 134288
UCD-SNMP-MIB::memCached.0 = INTEGER:
229608
UCD-SNMP-MIB::memSwapError.0 = INTEGER:
0
UCD-SNMP-MIB::memSwapErrorMsg.0 = STRING:
- snmpwalk 명령으로 dskTable과 관련된 mib 값 확인
jook:/usr/share/snmp/mibs# snmpwalk
-v 1 -c public localhost dskTable
UCD-SNMP-MIB::dskIndex.1 = INTEGER:
1
UCD-SNMP-MIB::dskIndex.2 = INTEGER: 2
UCD-SNMP-MIB::dskIndex.3 =
INTEGER: 3
UCD-SNMP-MIB::dskIndex.4 = INTEGER: 4
UCD-SNMP-MIB::dskIndex.5
= INTEGER: 5
UCD-SNMP-MIB::dskIndex.6 = INTEGER:
6
UCD-SNMP-MIB::dskIndex.7 = INTEGER: 7
UCD-SNMP-MIB::dskPath.1 = STRING:
/
UCD-SNMP-MIB::dskPath.2 = STRING: /usr
UCD-SNMP-MIB::dskPath.3 = STRING:
/boot
UCD-SNMP-MIB::dskPath.4 = STRING: /var
UCD-SNMP-MIB::dskPath.5 =
STRING: /tmp
UCD-SNMP-MIB::dskPath.6 = STRING:
/home
UCD-SNMP-MIB::dskPath.7 = STRING:
/home/khpark
UCD-SNMP-MIB::dskDevice.1 = STRING:
/dev/hda6
UCD-SNMP-MIB::dskDevice.2 = STRING:
/dev/hda2
UCD-SNMP-MIB::dskDevice.3 = STRING:
/dev/hda1
UCD-SNMP-MIB::dskDevice.4 = STRING:
/dev/hda3
UCD-SNMP-MIB::dskDevice.5 = STRING:
/dev/hda7
UCD-SNMP-MIB::dskDevice.6 = STRING:
/dev/hda8
UCD-SNMP-MIB::dskDevice.7 = STRING:
/dev/hdc1
UCD-SNMP-MIB::dskMinimum.1 = INTEGER:
10000
UCD-SNMP-MIB::dskMinimum.2 = INTEGER:
10000
UCD-SNMP-MIB::dskMinimum.3 = INTEGER:
10000
UCD-SNMP-MIB::dskMinimum.4 = INTEGER:
10000
UCD-SNMP-MIB::dskMinimum.5 = INTEGER:
10000
UCD-SNMP-MIB::dskMinimum.6 = INTEGER:
10000
UCD-SNMP-MIB::dskMinimum.7 = INTEGER:
10000
UCD-SNMP-MIB::dskMinPercent.1 = INTEGER:
-1
UCD-SNMP-MIB::dskMinPercent.2 = INTEGER:
-1
UCD-SNMP-MIB::dskMinPercent.3 = INTEGER:
-1
UCD-SNMP-MIB::dskMinPercent.4 = INTEGER:
-1
UCD-SNMP-MIB::dskMinPercent.5 = INTEGER:
-1
UCD-SNMP-MIB::dskMinPercent.6 = INTEGER:
-1
UCD-SNMP-MIB::dskMinPercent.7 = INTEGER: -1
UCD-SNMP-MIB::dskTotal.1 =
INTEGER: 961824
UCD-SNMP-MIB::dskTotal.2 = INTEGER:
9612636
UCD-SNMP-MIB::dskTotal.3 = INTEGER:
114171
UCD-SNMP-MIB::dskTotal.4 = INTEGER:
3845120
UCD-SNMP-MIB::dskTotal.5 = INTEGER:
473400
UCD-SNMP-MIB::dskTotal.6 = INTEGER:
22489576
UCD-SNMP-MIB::dskTotal.7 = INTEGER:
38464340
UCD-SNMP-MIB::dskAvail.1 = INTEGER:
806020
UCD-SNMP-MIB::dskAvail.2 = INTEGER:
8492580
UCD-SNMP-MIB::dskAvail.3 = INTEGER: 91611
UCD-SNMP-MIB::dskAvail.4
= INTEGER: 1215936
UCD-SNMP-MIB::dskAvail.5 = INTEGER:
438407
UCD-SNMP-MIB::dskAvail.6 = INTEGER:
19538384
UCD-SNMP-MIB::dskAvail.7 = INTEGER:
9391236
UCD-SNMP-MIB::dskUsed.1 = INTEGER: 106944
UCD-SNMP-MIB::dskUsed.2
= INTEGER: 631756
UCD-SNMP-MIB::dskUsed.3 = INTEGER:
16665
UCD-SNMP-MIB::dskUsed.4 = INTEGER: 2433860
UCD-SNMP-MIB::dskUsed.5 =
INTEGER: 10551
UCD-SNMP-MIB::dskUsed.6 = INTEGER:
1808752
UCD-SNMP-MIB::dskUsed.7 = INTEGER:
27119200
UCD-SNMP-MIB::dskPercent.1 = INTEGER:
12
UCD-SNMP-MIB::dskPercent.2 = INTEGER: 7
UCD-SNMP-MIB::dskPercent.3 =
INTEGER: 15
UCD-SNMP-MIB::dskPercent.4 = INTEGER:
67
UCD-SNMP-MIB::dskPercent.5 = INTEGER: 2
UCD-SNMP-MIB::dskPercent.6 =
INTEGER: 8
UCD-SNMP-MIB::dskPercent.7 = INTEGER:
74
UCD-SNMP-MIB::dskPercentNode.1 = INTEGER:
8
UCD-SNMP-MIB::dskPercentNode.2 = INTEGER:
2
UCD-SNMP-MIB::dskPercentNode.3 = INTEGER:
0
UCD-SNMP-MIB::dskPercentNode.4 = INTEGER:
11
UCD-SNMP-MIB::dskPercentNode.5 = INTEGER:
0
UCD-SNMP-MIB::dskPercentNode.6 = INTEGER:
1
UCD-SNMP-MIB::dskPercentNode.7 = INTEGER: 0
UCD-SNMP-MIB::dskErrorFlag.1
= INTEGER: 0
UCD-SNMP-MIB::dskErrorFlag.2 = INTEGER:
0
UCD-SNMP-MIB::dskErrorFlag.3 = INTEGER: 0
UCD-SNMP-MIB::dskErrorFlag.4 =
INTEGER: 0
UCD-SNMP-MIB::dskErrorFlag.5 = INTEGER:
0
UCD-SNMP-MIB::dskErrorFlag.6 = INTEGER: 0
UCD-SNMP-MIB::dskErrorFlag.7 =
INTEGER: 0
UCD-SNMP-MIB::dskErrorMsg.1 =
STRING:
UCD-SNMP-MIB::dskErrorMsg.2 = STRING:
UCD-SNMP-MIB::dskErrorMsg.3
= STRING:
UCD-SNMP-MIB::dskErrorMsg.4 =
STRING:
UCD-SNMP-MIB::dskErrorMsg.5 = STRING:
UCD-SNMP-MIB::dskErrorMsg.6
= STRING:
UCD-SNMP-MIB::dskErrorMsg.7 = STRING:
2. cpu, memory, disk 체크 mrtg스크립트 작성
/etc/cron.mrtg 디렉토리를 생성하고 디렉토리 하위에 각각의 자원을 체크할 스크립트를 작성한다.
- CPU 체크 스크립트
/etc/cron.mrtg/cpu
-----------------------------------
#!/bin/sh
/usr/bin/mrtg
/etc/mrtg/cpu.cfg
-----------------------------------
- Memory 체크 스크립트
/etc/cron.mrtg/mem
-----------------------------------
#!/bin/sh
/usr/bin/mrtg
/etc/mrtg/mem.cfg
-----------------------------------
- Disk 체크 스크립트
/etc/cron.mrtg/disk
-----------------------------------
#!/bin/sh
/usr/bin/mrtg
/etc/mrtg/disk.cfg
-----------------------------------
스크립트 작성이 완료되면, 각각의 스크립트를 3회 정도 수동으로 실행한다.
3. index 페이지 생성
indexmaker 명령을 통해서 mrtg 모니터링을 위한 index 파일을 생성한다. 기존에 생성한 /etc/mrtg/mrtg.conf 파일을 포함하여 하나의 페이지에서 모두 모니터링 가능 하도록 index 파일을 생성한다.
jook:~# indexmaker -output=/var/www/mrtg/index.html -title="Server status" -sort=name -enumerate /etc/mrtg/mrtg.conf /etc/mrtg/cpu.cfg /etc/mrtg/mem.cfg /etc/mrtg/disk.cfg
4. crontab에 등록
crontab에 mrtg 스크립트가 실행되도록 아래와 같이 스케쥴을 등록한다.
*/5 * * * * /bin/run-parts /etc/cron.mrtg 1> /var/log/mrtg/mrtg.log
5. 가상호스트 설정 후, 웹상에서 mrtg 그래프 확인
/var/www/mrtg 디렉토리를 http://mydomain.com/mrtg 또는 http://mrtg.mydomain.com 등으로 접속이 가능하도록 apache 가상호스트를 설정한다.
mrtg 모니터링 페이지로 접속해서 mrtg 그래프를 확인 한다.