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

번호 제목 글쓴이 날짜 조회 수
326 vi 편집기에서 모든글자를 대소문자로 변경할때 사용하는 명령어 호스트웨이 2012.11.23 4119
325 리눅스 간단 시스템 점검 1편 호스트웨이 2012.11.14 4128
324 VNC-server 설치 및 설정 호스트웨이 2012.10.12 4151
323 리눅스 dmesg 명령어 file 호스트웨이 2012.12.06 4155
322 [ERROR] ftp error 500 OOPS: cannot change directory:/home/ 호스트웨이 2012.12.21 4276
321 rpm에서 원하는 파일만 풀어서 사용하기 호스트웨이 2015.09.19 4276
320 디렉토리(폴더) 색상 변경하기 file 호스트웨이 2015.09.08 4280
319 ngrinder를 이용한 부하 테스트 - 1) Controller 설치 file 호스트웨이 2015.04.08 4285
318 /dev/null 과 /dev/zero의 차이 file 호스트웨이 2012.10.05 4286
317 명령어 dstat 사용하기 호스트웨이 2015.09.01 4370
316 ifconfig 항목 설명 호스트웨이 2012.11.22 4399
315 리눅스 comm 명령어를 통해 두개의 파일내용 비교하기 file 호스트웨이 2012.11.29 4406
314 df 와 du의 출력 크기가 다르게 보이는 이유 호스트웨이 2012.12.14 4423
313 useradd 명령어 사용방법 및 옵션 호스트웨이 2015.09.08 4431
312 리눅스 tac 명령어를 통해 파일내용 역순으로 출력하기 file 호스트웨이 2012.10.18 4463
311 리눅스 파일명 일괄변경하기 file 호스트웨이 2012.10.18 4467
310 Block 단위 파일 복사를 위한 dd 사용 호스트웨이 2015.09.18 4514
309 서비스 체크 스크립트 호스트웨이 2012.09.28 4536
308 리소스 많이 차지하는 프로세스 찾기 호스트웨이 2015.09.20 4559
307 Kick-Start 설정 호스트웨이 2015.09.18 4589