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 그래프를 확인 한다.

번호 제목 글쓴이 날짜 조회 수
306 리눅스 커널 버전 의미 file 호스트웨이 2012.04.20 27421
305 debian 에서 CSR decoding 시에 발생되는 에러(40 The CSR uses a key that is believed to have been compromised!) HOSTWAY 2008.12.04 27171
304 원하는 용량만큼 분할해서 압축하기 sylee 2008.05.15 27140
303 diff 사용방법 sylee 2008.05.15 27101
302 부하 테스트 2편 – Web Test 호스트웨이 2012.04.27 26801
301 가용할 수 있는 물리적 메모리를 최대한 이용해봅시다. hostway 2008.05.14 26744
300 sudo 사용하기 호스트웨이 2008.05.19 26715
299 at 으로 작업 예약 하기 호스트웨이 2008.05.19 26408
298 리눅스 ls 디렉토리 혹은 파일 별 출력하기 file 호스트웨이 2012.06.22 26242
297 find 명령 1 sylee 2008.05.14 26077
» mrtg를 이용한 시스템자원 모니터링(debian 5.0) jook 2009.06.02 26035
295 watch 로 시스템 모니터링 하기 호스트웨이 2008.05.19 25670
294 XFS파일 장점및 단점 호스트웨이 2012.07.06 25648
293 XFS 파티션 설치 및 마운트 (CentOS 기준) 호스트웨이 2015.09.09 25629
292 ipv6 비활성화 하기 호스트웨이 2012.04.06 25611
291 CPU core 별 사용량 확인 하기 호스트웨이 2012.06.08 25446
290 vsftp에서 업로드, 다운로드 전송속도 제한하기 file 호스트웨이 2012.05.05 25443
289 rsync를 사용하여 데이터 백업 하기 jook 2009.04.25 25271
288 ncftp의 bookmark 기능 sylee 2008.05.15 25199
287 비프음 콘트롤 호스트웨이 2009.02.12 25032