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 linux 특정 용량으로 파일을 찾기, 삭제하기 호스트웨이 2015.09.08 4692
305 리눅스 tee명령어를 이용하여 디렉토리 목록 저장 file 호스트웨이 2012.09.28 4733
304 라우팅 제어명령 호스트웨이 2015.09.17 4785
303 리눅스 명령어 모음 호스트웨이 2012.12.06 4789
302 bios 타이머 및 시간 설정 호스트웨이 2015.09.18 4826
301 iotop 사용하기 호스트웨이 2015.09.14 4922
300 Web site에서 php error log 출력하지 않기 호스트웨이 2012.11.01 5048
299 패키지에 포함된 리스트 확인하기 호스트웨이 2012.12.07 5084
298 리눅스 파일 및 디렉토리 권한 관리 file 호스트웨이 2015.09.13 5183
297 리눅스 캐시 메모리 비우기 file 호스트웨이 2012.12.26 5269
296 Linux -(하이픈)으로 시작하는 파일 지우기 호스트웨이 2015.09.20 5506
295 Proftp 설치 및 xinetd 에서 실행하기 file 호스트웨이 2015.09.18 5589
294 dumpe2fs - 파일시스템 상세 정보 확인 호스트웨이 2015.09.18 5611
293 서버 네트워크 대역폭 제한 호스트웨이 2015.09.20 5719
292 LAN 카드에 여러개의 IP 주소 할당 호스트웨이 2015.09.18 5770
291 tar 분할압축하기 호스트웨이 2015.09.19 5876
290 Linux chkrootkit을 이용한 백도어 설치 탐지 호스트웨이 2015.09.18 5936
289 lrzsz 사용해보기 호스트웨이 2012.10.12 6062
288 Touch 파일 용량 0바이트 만들기 호스트웨이 2015.09.20 6116
287 ls -l 출력 시 날짜형태 변경 호스트웨이 2012.12.27 6139