1
트래픽관리를
위한 MRTG서버구축관리
연구보고서 3편
작성자 :
리눅스포털
수퍼유저코리아(www.superuser.co.kr)
박성수
------- 전
체 목 차 ------
1.
MRTG란?
2.
MRTG의 다양한 용도
2-1.
네트웍모니터링
2-1-1.
일간그래프
2-1-2.
주간그래프
2-1-3.
월간그래프
2-1-4.
년간그래프
2-2.
CPU 모니터링예
2-2-1.
일간 CPU사용량
2-2-2.
주간 CPU사용량
2-2-3.
월간그래프
2-2-4.
년간그래프
2-3.
DISK모니터링예
2-3-1.
일간 DISK사용량
2-3-2.
주간 DISK사용량
2-3-3.
월간 DISK사용량
2-3-4.
년간 DISK사용량
2-4.
MEMORY 모니터링예
2-4-1.
일간 MEMORY 사용량
2-4-2.
주간 MEMORY 사용량
2-4-3.
월간 MEMORY 사용량
2-4-4.
년간 MEMORY사용량
2-5.
스위치의 포트별 사용량 분석
3.
MRTG운용을 위해서 필요한 것은?
3-1.
트래픽분석서버
3-2.
분석대상자원
3-3.
필요한 프로그램 및 툴들
3-4.
네트웍이 갖춰진 환경
4.
SNMP란?
5.
MIB이란?
6.
리눅스로 구축하는 MRTG서버
7.
MRTG트래픽서버 디렉토리구성도
7-1.
MRTG 홈디렉토리
7-2.
MRTG 실행파일들 저장위치
7-3.
MRTG Configuration 파일들의 저장위치
7-4.
MRTG 실행결과 생성되는 HTML파일,
LOG파일들의
8.
MRTG를 이용한 트래픽사용량 분석
8-1.
서버트래픽분석 개론
8-2.
Configuration file 만들기
8-3.
cfg파일 분석
8-4.
mrtg 초기실행하기
8-5.
결과확인 및 분석하기
8-6.
결과페이지 로딩시 암호인증걸기
8-7.cron
등록하기
9.
MRTG를 이용한 다양한자원(CPU,
DISK, MEMORY) 사용량 분석
9-1.
다양한 자원분석 사용량분석 개론
9-2.
관련 MIB 확인하기
9-3.
Configuration file 만들기
9-4.
cfg파일 분석
9-5.
mrtg 초기실행과 웹페이지 생성확인
9-6.
웹브라우즈로 결과확인
9-7.
마무리 작업
|
9.
MRTG를
이용한 다양한자원(CPU,
DISK, MEMORY) 사용량
분석
9-1.
다양한
자원분석 사용량분석 개론
MRTG로
분석가능한 자원은 많이 있다.
그중 가장 대표적인 것이 네트웍트래픽분석이다.
앞장에서 설명드린 내용은 이런 트래픽을
웹화면에서 모니터링하는 방법에 대한 것을 다루었다.
이번장에서는 네트웍장비의다양한 자원의
사용량을 분석하는 방법을 CPU사용량을
웹에서 모니터링하는 방법에 대해서 설명할 것이다.
먼저,
mrtg로 트래픽뿐아니라 cpu, memory,
disk등의 다양한 자원에 대한 분석을 하려면
ucd-snmp를 업그레이드해야한다.
사용중인
ucd-snmp의 버전이 4.1대라면
4.2대로 업그레이드하기 바란다.
CPU사용량
모니터링을 하는 방법또한 앞장과 많이 유사하다.
단지,
cfg파일(Configuration
file)이 조금 다를 뿐이다.
따라서 이장과 다음장에 나오는
MEMORY사용량분석에서는
앞장에서 설명한 트래픽분석부분과의 중복되는 부분은
생략하고 주로 cfg파일을
위주로 설명이 될 것이다.
우선, ucd-snmp에
대해서 좀 알아보자.
현재 필자가 MRTG서버로
구축하는 서버는 레드햇리눅스이다.
아마도 최신버전의 리눅스라면 ucd-snmp
4.2.X가 깔려 있을 것이다.
여러분의 서버에 설치되어 있는 ucd-snmp가
4.1.X라면
4.2.X로
업그레이드하기를 권한다.
우선 현재 사용중인 snmp의
버전을 확인해 보자.
확인하는 방법은 "snmpd
-v"를 하면 다음과 같이 현재
사용중인 snmp의
버전을 확인할 수 있다.

확인한 바와 같이 현재 snmp의
버전은 ucd-snmp 4.1.2이다.
ucd-snmp의
최신버전은 4.2.1로서
다운을 받으려면 net-snmp.sourceforge.net에
방문해 보기 바란다.
잠깐만 언급한다면 ucd-snmp는
현재 그 이름이 net-snmp로
불리우고 있다.
최신번전은 2001년
4월달에
발표된 것으로 현재 트래픽분석뿐아니라 다양한
자원분석을 위해 많이 사용되고 있는 프로토콜이다.
4.2.X로
버전업 하는 구체적인 방법에 대해서는 "UCD-SNMP
버전업하기"편에
자세히 설명이 되어있다.
을 참조하기 바란다.
이를 참조하여 버전을 하였다면 다음과 같이
snmp의
버전을 다시한번 확인해 보도록 할 것이다.

9-2.
관련
MIB
확인하기
우선 트래픽외의 다양한 자원을 분석하기위해서는
대상 MIB정보를
확인해야한다.
ucd-snmp 4.2.1버전의
SNMP를
정상적으로 설치하였다면 이런 MIB값에
대한 정보를 제공하는 파일들이
/usr/local/share/snmp/mibs/디렉토리에
txt파일로
존재한다.
분석코자하는 대상자원의 MIB정보를
가진 txt 파일을
이 디렉토리에서 확인하여 cfg파일내에
LoadMIBs라는
옵션으로 참조하게만 하면된다.
이 디렉토리에 존재하는 파일들중에 CPU라는
자원을 MRTG로
분석하기 위해서는 UCD-SNMP-MIB.txt라는
파일이 필요하다.
따라서 다음절에 나올 cfg파일분석편에
보시면 LoadMIBs로
이 파일을 읽어들이는 것을 확인할 수 있을 것이다.
자, cpu라는
자원에 대한 MIB정보는
어떤 것들이 있을까?
UCD-SNMP-MIB.txt파일내에
cpu와
관련된 MIB정보를
확인해 보자.
다음표는 UCD-SNMP-MIB.txt파일내용중
CPU와
관련된 MIB값들이다.
표. CPU관련
MIB값
객체
|
구문
|
접근권한
|
Status
|
설명
|
비고
|
ssCpuUser
|
Integer32
|
read-only
|
Current
|
사용자
CPU
time 퍼센트
|
::=
{ systemStats 9 }
|
ssCpuSystem
|
Integer32
|
read-only
|
Current
|
시스템
CPU
time 퍼센트
|
::=
{ systemStats 10 }
|
ssCpuIdle
|
Integer32
|
read-only
|
Current
|
CPU
idle time 퍼센트
|
::=
{ systemStats 11 }
|
ssCpuRawUser
|
Counter32
|
read-only
|
Current
|
사용자
CPU
시간
|
::=
{ systemStats 50 }
|
ssCpuRawNice
|
Counter32
|
read-only
|
Current
|
nice
CPU 시간
|
::=
{ systemStats 51 }
|
ssCpuRawSystem
|
Counter32
|
read-only
|
Current
|
시스템
CPU
시간
|
::=
{ systemStats 52 }
|
ssCpuRawIdle
|
Counter32
|
read-only
|
Current
|
idle
CPU 시간
|
::=
{ systemStats 53 }
|
ssCpuRawWait
|
Counter32
|
read-only
|
Current
|
iowait
CPU 시간
|
::=
{ systemStats 54 }
|
ssCpuRawKernel
|
Counter32
|
read-only
|
Current
|
커널
CPU
시간
|
::=
{ systemStats 55 }
|
ssCpuRawInterrupt
|
Counter32
|
read-only
|
Current
|
interruptlevel
CPU 시간
|
::=
{ systemStats 56 }
|
위의 표를 보면 대충 어떤 MIB값을
사용해야하는 가를 알 수 있을 것이다.
위의 표 "설명"부분을
참조하여 CPU의
어떤사용률에 대한 분석을 하거픈가를 확인하면 된다.
참고로 이책에서 실습대상으로 하는 MIB값은
위의 표중에서 "ssCpuRawUser"와
ssCpuRawIdle"이다.
즉, 사용자
프로세스가 사용한 CPU사용시간과
CPU가
한가하게 놀았던 시간(idle
time)에 대한 분석이될 것이다.
다음표는 UCD-SNMP-MIB.txt파일내용중
MEMORY와
관련된 MIB값들이다.
표. MEMORY관련
MIB값
객체
|
구문
|
접근권한
|
Status
|
설명
|
비고
|
memIndex
|
Integer32
|
read-only
|
current
|
Bogus
Index, 항상 0
리턴
|
::=
{ memory 1 }
|
memErrorName
|
DisplayString
|
read-only
|
current
|
Bogus
Name, 항상
'swap'문자리턴
|
::=
{ memory 2 }
|
memTotalSwap
|
Integer32
|
read-only
|
current
|
전체
swap공간
|
::=
{ memory 3 }
|
memAvailSwap
|
Integer32
|
read-only
|
current
|
사용가능한
swap
공간
|
::=
{ memory 4 }
|
memTotalReal
|
Integer32
|
read-only
|
current
|
전체
물리적인(RAM)
공간
|
::=
{ memory 5 }
|
memAvailReal
|
Integer32
|
read-only
|
current
|
사용가능한
물리적인 공간
|
::=
{ memory 6 }
|
memTotalSwapTXT
|
Integer32
|
read-only
|
current
|
사용된
가상메모리공간
|
::=
{ memory 7 }
|
memAvailSwapTXT
|
Integer32
|
read-only
|
current
|
사용중인
가상메모리공간
|
::=
{ memory 8 }
|
memTotalRealTXT
|
Integer32
|
read-only
|
current
|
사용된
전체 물리적인 메모리공간
|
::=
{ memory 9 }
|
memAvailRealTXT
|
Integer32
|
read-only
|
current
|
사용중인
실제메모리공간
|
::=
{ memory 10 }
|
memTotalFree
|
Integer32
|
read-only
|
current
|
전체사용가능한
메모리
|
::=
{ memory 11 }
|
memMinimumSwap
|
Integer32
|
read-only
|
current
|
비워질
수 있는 swap공간의
최소크기를 리턴하거나 memErrorSwap이
1로
셋팅되어 있을 경우 memSwapErrorMsg에
에러문자리턴
|
::=
{ memory 12 }
|
memShared
|
Integer32
|
read-only
|
current
|
전체공유메모리
크기
|
::=
{ memory 13 }
|
memBuffer
|
Integer32
|
read-only
|
current
|
버퍼링된
메모리크기
|
::=
{ memory 14 }
|
memCached
|
Integer32
|
read-only
|
current
|
캐싱된
메모리크기
|
::=
{ memory 15 }
|
memSwapError
|
Integer32
|
read-only
|
current
|
Error
Flag 리턴.
Flag가 1일
경우 여유swap공간이
거의 없음을 의미함.
|
::=
{ memory 100 }
|
memSwapErrorMsg
|
DisplayString
|
read-only
|
current
|
Error
Flag상태를
알리는 에러메시지리턴
|
::=
{ memory 101 }
|
다음표는
UCD-SNMP-MIB.txt파일내용중
DISK와
관련된 MIB값들이다.
표.
DISK관련 MIB값
객체
|
구문
|
접근권한
|
Status
|
설명
|
비고
|
dskTable
|
SEQUENCE
OF DskEntry
|
not-accessible
|
current
|
SNMP
Agent의
snmpd.conf에
의해 설정되어 watching된
부분.
디스크의
watching정보.
|
::=
{ ucdavis 9 }
|
dskEntry
|
DskEntry
|
not-accessible
|
current
|
디스크나
디스크 통계치를 포함한 엔트리(Entry)
|
::=
{ dskTable 1 }
|
dskIndex
|
Integer32
(0..65535)
|
read-only
|
current
|
디스크
mib를
참조한 (행)수
|
::=
{ dskEntry 1 }
|
dskPath
|
DisplayString
|
read-only
|
current
|
마운트된
디스크의 패스정보
|
::=
{ dskEntry 2 }
|
dskDevice
|
DisplayString
|
read-only
|
current
|
파티션된
디바이스 패스정보
|
::=
{ dskEntry 3 }
|
dskMinimum
|
Integer32
|
read-only
|
current
|
에러발생전의
최소디스크요구공간의 크기(단위
:
kBytes)
|
::=
{ dskEntry 4 }
|
dskMinPercent
|
Integer32
|
read-only
|
current
|
에러발생전의
최소디스크요구공간의 퍼센티지
|
::=
{ dskEntry 5 }
|
dskTotal
|
Integer32
|
read-only
|
current
|
디스크파티션의
총크기
(단위
:
kBytes)
|
::=
{ dskEntry 6 }
|
dskAvail
|
Integer32
|
read-only
|
current
|
사용가능한
디스크공간크기
|
::=
{ dskEntry 7 }
|
dskUsed
|
Integer32
|
read-only
|
current
|
사용중인
디스크공간의 크기
|
::=
{ dskEntry 8 }
|
dskPercent
|
Integer32
|
read-only
|
current
|
사용중인디스크공간의
퍼센티지
|
::=
{ dskEntry 9 }
|
dskPercentNode
|
Integer32
|
read-only
|
current
|
사용중인
inode의
퍼센티지
|
::=
{ dskEntry 10 }
|
dskErrorFlag
|
Integer32
|
read-only
|
current
|
에러를
위해 설정된 최소공간의 디스크(파티션)
에러 Flag
시그널
|
::=
{ dskEntry 100 }
|
dskErrorMsg
|
DisplayString
|
read-only
|
current
|
여유공간과
경고(warning)
메시지
|
::=
{ dskEntry 101 }
|
이제 이들 MIB값들을
이용하면 MRTG를
통해서 이와 관련된 정보를 모니터링해볼 수 있다.
다음장에서는 이런 MIB값을
가지고 MRTG의
트래픽분석을 위한 Configuration
File을 만들어 보도록 할 것이다.
9-3.
Configuration file 만들기
아래와 같은 cfg파일을
만들어 보았다.
분석하려는 구체적인 객체를
/usr/local/share/snmp/mibs/UCD-SNMP-MIB.txt
파일에서 확인한 다음 Target에
아래 예와 같이 설정해 주면 된다.
물론, LoadMIBs
옵션에 UCD-SNMP-MIB.txt
파일의 위치를 지정해 주는 것도
잊지 말아야 할 것이다.
물론 아래와 같은 cfg파일이
아니더라도 cpu분석은
가능하다.



다른 Configuration
File들과는 조금 다른 것이라면
디스크의 사용량분석을 위해 대상파티션을 지정해줘야한다는
것이다.
즉, dskPercent.1
과 dskPercent.2는
각각 루트파티션(/) 과
usr파티션(/usr)에
해당하며, 이들의
설정을 Legend1과
Legend2, 그리고
LegendI와
LegendO에
각각 설정하였다.
그리고, 무엇보다
중요한 것은 디스크의 모니터링을 위한 대상 파티션의
설정을 /usr/local/share/snmp/snmpd.con
파일내에서 다음과 같은 설정을
해야한다.

즉, 모니터링의
대상이 되는 파티션의 설정을 위와 같이 한후에
snmpd를
다시 띄워야한다.
이 cfg 파일에서
설정한 각 options들에
대한 설명은 다음장에서 설명된다.
참고로, 이런
cfg파일
작성 및 구성에 대한 예제파일들은 아래의 URL에서
찾아볼 수 있으려 이를 그대로 적용하기보다는 좀더
다양한 방법으로 수정해서 사용해보는 것이 발전이
지름길이 될 것이다.
http://net-snmp.sourceforge.net/tutorial/mrtg/index.html
9-4.
cfg파일
분석
여기서 설명되는 옵션들은 앞장에서 설명된
것과 "MRTG
Configuration File Format"편에 자세히
설명되었으므로 여기서는 CPU사용량분석이라는
초점에 맞추어서 설명됨을 유의하기바란다.
Language

웹페이지에 한글을 사용하기위한 설정.
WorkDir

mrtg의
실행결과 생성되는 웹페이지들이 저장될 디렉토리경로
설정
LoadMIBs

CPU과련
MIB값을
저장하고 있는 파일 Include
설정
Target

CPU자원을
분석하기위한 MIB값의
설정.
-
kebia_2_cpu
: 대상자원의 이름이며, 생성되는
웹파일들의 이름또한 여기서 설정된 이름이 사용된다.
-
ssCpuRawUser.0
: 사용자프로세스가 차지하는 CPU사용량의
MIB객체지정.
-
ssCpuRawIdle.0
: CPU의 idle time 값의 MIB객체
지정.
-
public
: SNMP로 통신하기위한 community
name.
-
192.168.0.5
: 대상객체의 IP Address 또는
도메인명
위의 표를 참조하여 CPU관련된
다른 MIB값들을
참조하여 다양한 분석이 가능하다는 것을 인지하기
바란다.
Options

growright : 오른쪽에서부터
그래프가 생성이됨.
nopercent : 결과로
생성되는 웹페이지내의 그래프에서 퍼센트표시를
나타내지않음.
MaxBytes

CPU의
전체사용량을 100으로
설정.
Title

생성되는 웹(html)파일에
<title>제목</title>에
들어갈 제목부분 설정.
웹브라우즈로 결과를 보았을 때 웹브라우즈의
최상단 바(bar)에
나타나는 제목으로 확인하거나 "소스보기"등으로
확인가능.
RouterUptime

이설정은 동일한 라우터를 사용하여 동일한
분석을 여러개 동시에 분석할 경우에 community
name과 address를
여러번 반복하여 사용하지 않도록 하기위한 설정이다.
Unscaled

4개의
그래프 즉, day, week,
month, year 그래프에서 Y축그래프가
MaxBytes에서
지정한 수치에 미치지 못하는 부분을 축약(생략)하여
표현하기위한 설정이다.
즉, 불필요한
부분을 보지 않기위한 설정이라는 것을 의미한다.
YLegend

Y축 그래프에
대한 설명표를 "CPU
Utilization"이라고 나타낸다.
Legend1

결과 웹페이지의 하단에 표시되는 그래프의
색깔에 대한 설명을 붙인 것이다
즉, 첫
번째 그래프(여기서는
녹색)색깔에
대한 설명을 "User
CPU in % (Load)"로 하겠다라는
설정임.
Legend2

Legend1과
마찬가지로 그래프(여기서는
청색)색깔에
대한 설명을 "Idel
CPU in % (Load)"로 하겠다라는
설정임.
LegendI

4개의
그래프(일,주,월,년)
각각의 하단에 INPUT표시의
설명을 "User"로
하겠다라는 설정임.
즉, 각각의
그래프에서 INPUT에
해당하는 것이 무엇을 뜻하는 것인가를 설명하기 위한
것이며, 여기서는
사용자프로세스에 대한 그래프의 색깔이므로 "User"로
설정한 것임.
LegendO

LegendI와
마찬가지로 OUTPUT에
해당하는 그래프의 색깔 설명을 "Idle"로
설정한 것임.
PageTop

mrtg 실행결과
생성되는 웹페이지의 최상단에 나타낼 내용임.
9-5.
mrtg 초기실행과
웹페이지 생성확인
이제 cfg파일의
생성과 이에대한 설명까지 끝났다.
이제 남은 것은 이 cfg파일로
mrtg를
실행하고 그 결과 지정한 디렉토리에 웹페이지들이
생성이 되는가를 확인한 다음 웹브라우즈로 확인을
해보도록 할 것이다.
아래와 같이 mrtg를
실행시켜보자.

mrtg를
처음실행시킬 때에는 mrtg
실행파일의 경로를 절대경로로
해서 실행하는 것이 습관이 되면 좋을 것이다.
mrtg를
처음실행시키면 트래픽분석에서 보았던 것 처럼 동일한
에러가 발생한다.
동일한 실행은 몇회 계속하게되면 이런 에러는
발생하지 않는다.
이제 cfg파일의
WorkDir에서
지정한 디렉토리로 가서 웹파일들이 생성이 되었는가를
확인해 보자.

앞에서는 볼 수 없었던 파일종류가 하나 있을
것이다
*.png, *.html, *.log, *.old 파일들은
트래픽분석에서도 볼 수 있었던 것이나 *.txt파일은
여기서 처음 생성된 것이다.
이것은 cfg파일에서
LoadMIBs를
사용하였기 때문에 생성된 파일로서 LoadMIBs에서
지정한 UCD-SNMP-MIB.txt파일내의
모든 MIB값들이
필요한 것이 아니기 때문에 다음에 실행할 때에
사용하기위한 것으로 필요한 MIB값을
oid형태의
파일로 보관한 것이다.
아래는 이 파일의 내용이다.

보시는 바와 같이 UCD-SNMP-MIB.txt내의
많은 MIB값들중
두 개(ssCpuRawUser,
ssCpuRawIdle)만을 사용했으므로 이
두 개의 oid값만이
들어가 있는 것이다.
9-6.
웹브라우즈로
결과확인
자 이제 모든 실행이 끝나고 그 결과를
웹브라우즈로 확인해 보도록 하자.
cfg파일
설명부분에서 설명했던 것을 참조하여 결과 웹페이지가
어떻게 나타났는지 확인하기 바란다.
cfg파일을
수정함으로써 원하는 결과를 다르게 나타내는 것을
각자 해보기바란다.




DISK 사용량
모니터링 분석 결과확인


9-7.
마무리
작업
웹브라우즈로 결과까지 확인을
했다. 이제 트래픽분석의
마지막에 했던 것과 마찬가지로 결과 웹페이지를 로딩할
때에 ID와
패스워드를 입력받도록 하기위한 설정과 주기적인
mrtg실행을
위하여 cron파일에
등록하는 것을 잊지 말자.
|