Linux ETC

 

앞서 등록된 mrtg 트래픽 모니터링 글에 이어서, 진행을 할 것. ^^

 

 1. cpu, memory, disk 등의 데이터 수집에 필요한 각각의 설정파일을 만든다.

트래픽 이외의 다양한 자원을 분석하기 위해서는 각각의 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 그래프를 확인 한다.