본문 바로가기

IT/소프트웨어 설치

mrtg 설치 및 모니터링

MRTG


1. snmp 설정

1-1 snmp 설치 및 버전확인

  • snmp는 os 설치시 기본으로 설치되는 패키지이다
  • 하지만 서버간의 snmp버전을 맞춰주는 것이 장애포인트를 줄여줄 수 있다(대부분 버전이 맞다)
  • 왼쪽 그림은 snmp -v 명령어를 통해 snmp 버전을 확인한 모습으로 각 서버간 확인을 해봐야 한다
  • snmpd -v

3가지중 1가지 방법으로 설치

http://sourceforge.net/projects/net-snmp

source 형태 파일 다운로드

http://rpmfind.net/linux/rpm2html/search.php?query=net-snmp

rpm 형태 파일 다운로드

# yum install -y net-snmp*

가장 많이 사용하는 yum 설치 방법

yum은 의존성 문제를 해결해주기때문에 왠만하면 yum 설치를 권장한다

내용을 입력하세요

snmp는 사실 버전 업데이트를 하는 경우는 제외하고는 기본적으로 설치된 snmp를 이용하게 된다. 하지만 서버간 버전이 다를 경우 rpm이나 소스 파일을 통해서 버전을 맞춰주게되는데, 이때에는 rpm을 좀 더 선호한다. 

왜냐하면, os에 따라서는 소스 컴파일에 필요한 gcc등의 라이브러리들이 제대로 동작하지 않는 서버들이 있기때문에 보다 간편하게 설치 가능한 rpm을 이용하게 된다. 단, rpm으로 설치시에는 의존성 문제를 반드시 해결해줘야한다. yum은 자동으로 해결해주지만 rpm으로 하나하나 설치할 경우 생각지도 못한 노가다를 하게 될 수도 있으니 마음의 준비가 필요하다


1-2 snmp 환경 설정파일 수정

 vi /etc/snmp/snmpd.conf


sec.name source community

com2sec private localhost       privv

com2sec private 32.204.115.198 privv

com2sec network 32.204.115.192/27      public


group   rwgroup v1      local

group   rwgroup v2c     local

group   rogroup v1      network

group   rogroup v2c     network


view    all     included        .1      80

view    systemview      included        system


access rwgroup  ""      any     noauth  exact   all     all     all

access rogroup  ""      any     noauth  exact   all     none    none


snmp관련 주의 사항 및 troubleshooting

1. snmpwalk: command not found - 이유가 너무 다양해서 특정 지을 수 없다

 (1) community값과 일치하는 sec.name을 찾지 못해서

  즉, community 값을 잘 못 넣은경우, 다시 확인해서 시도해 볼것

 (2) /etc/snmp/snmpd.conf설정이 엇갈린 경우

  community는 sec.name을 보고있고, sec.name은 group을 보고있고, group은 access를 보고 있는데 이것들이 잘못 들어간 곳은 없는지 확인

2. 2c 버전에서 UCD-SNMP-MIB::dskEntry = No Such Object available on this agent at this OID 에러 발생

 (1) yum install -y net-snmp*로 snmp 모두 설치

 (2) 설치 후에도 같다면 /etc/snmp/snmpd.conf파일에 설정을 안해줘서이다

    예를들어 .1.3.6.1.4.1.2021.9.1.9는 disk관련 oid값인데 파일안에 disk / 10000 이러한 옵션을 주지 않아서 에러발생

3. /etc/snmp/snmpd.conf파일은 수정하고나서 반드시 service snmpd restart해줘야한다

4. /etc/snmp/snmpd.conf파일은 tab이 아니라 space bar로 간격을 띄워야 한다




2. mrtg 설정

2-1 mrtg 설치 및 디렉토리 생성

 yum install -y mrtg* 

 mkdir -p /mrtg/conf

 mkdir -p /mrtg/html


2-2 cfgmaker 실행(설정 파일 생성)

 /usr/bin/cfgmaker --global 'WorkDir: /mrtg/html' --global 'Options[_]:bits,growright' --output /mrtg/conf/mrtg.cfg public@localhost


2-3 mrtg 실행

 /usr/bin/mrtg /mrtg/conf/mrtg.cfg 

에러메시지가 나타나는데 무시하고 3-4번 명령을 실행하면 아무 에러없이 쉘이 떨어진다(초기 데이터가 없다는 에러)


2-4 indexmaker 실행(index 파일 생성)

 /usr/bin/indexmaker --title "MRTG" --output /mrtg/html/index.html /mrtg/conf/mrtg.cfg 


2-5 crontab 등록

 crontab -e

 */5 * * * * LANG=C /usr/bin/mrtg /mrtg/conf/mrtg.cfg --logging /mrtg/log/mrtg.log 

/mrtg/conf/mrtg.cfg 파일에 다음의 항목을 추가하는 방법으로 대체할 수도 있다

RunAsDaemon: Yes

Interval: 5

편한대로


2-6-1 apache 설정

 vi /etc/httpd/conf.d/mrtg.conf

 Allow from 127.0.0.1을 Allow from All 또는 특정 ip로 지정

 /etc/init.d/httpd restart 

2-6-2 apache 설정

 NameVirtualHost 32.240.115.108

 <VirtualHost 32.240.115.108>

   ServerAdmin se@matth.co.kr

   DocumentRoot /data/admin.matth.co.kr

   ServerName mrtg.matth.co.kr

   ErrorLog /data/admin.matth.co.kr/mrtg/log/error_log

   CustomLog /data/admin.matth.co.kr/mrtg/log/access_log common

 </VirtualHost>


이 후 mrtg가 설치된 서버의 ip로 웹브라우저를 통해서 접속해서 그래프가 나오면 된다

예) http://32.240.115.198/mrtg/html/index.html


2-7 색 넣기

 Colours[localhost.rootfs]: Yellow#FFFF00, White#FFFFFF, Gray#CCCCCC, Blue#1000ff

각 cfg파일의 설정 내용에 원하는 색을 추가해주면 된다




3. 각종 모니터링 설정

3-1 oid를 통한 config

Target[server.disk]: 1.3.6.1.4.1.2021.9.1.9.1&1.3.6.1.4.1.2021.9.1.9.2:public@192.168.11.134

Title[server.disk]: Disk Partition Usage

WorkDir: /etc/mrtg/html

PageTop[server.disk]: <H1>Disk Partition Usage </H1>

MaxBytes[server.disk]: 100

ShortLegend[server.disk]: %

YLegend[server.disk]: Disk Utilization

Legend1[server.disk]:

Legend2[server.disk]:

LegendI[server.disk]: Disk

LegendO[server.disk]: nfs

Options[server.disk]: gauge,growright,nopercent

Unscaled[server.disk]: ymwd


3-2 mib파일을 통한 config (디스크와 inode모니터링)

LoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt

Target[server.disk]: dskPercent.3&dskPercentNode.3:public@192.168.11.134

Title[server.disk]: Disk Partition Usage

WorkDir: /data/admin.matth.co.kr/mrtg/html

PageTop[server.disk]: <H1>nfsmail Disk Usage </H1>

MaxBytes[server.disk]: 100

ShortLegend[server.disk]: %

YLegend[server.disk]: Disk Utilization

Legend1[server.disk]:

Legend2[server.disk]:

LegendI[server.disk]: Disk Usage

LegendO[server.disk]: Inode State

Options[server.disk]: gauge,growright,nopercent

Unscaled[server.disk]: ymwd


중요한 옵션은 맨위의 Target옵션이다


위는 OID라는 값을 통해 받아온 값을 그래프에 뿌리라는 소리이다

https://support.ipmonitor.com/mibs_byname_A.aspx <- oid값을 검색할 수 있는 곳


 1.3.6.1.4.1.2021.9.1.9.1&1.3.6.1.4.1.2021.9.1.9.2:public@192.168.11.134:::::2

 [              Input             ]  [            output             ] [community] [값을 구하려는 주소] [ snmp v2로 통신 ]   

mrtg는 input&ouput의 형식으로 구성되어 2개의 값을 입력해 주어야 한다


3-3 각종 모니터링 설정

# CPU Monitoring

Target[server.cpu]:ssCpuRawUser.0&ssCpuRawIdle.0:public@192.168.0.123:::::2

Title[server.cpu]: CPU Usage

PageTop[server.cpu]: <H1>CPU Usage</H1>

MaxBytes[server.cpu]: 100

ShortLegend[server.cpu]: %

YLegend[server.cpu]: CPU Utilization

Legend1[server.cpu]: Current CPU percentage load

LegendI[server.cpu]: Used

LegendO[server.cpu]:

Options[server.cpu]: growright,nopercent

Unscaled[server.cpu]: ymwd

oid로 할 경우 

Target[server.cpu]:1.3.6.1.4.1.2021.11.50.0&1.3.6.1.4.1.2021.11.53.0:public@192.168.0.123:::::2


# Memory Monitoring (Total Versus Available Memory)

Target[server.memory]: memAvailReal.0&memTotalReal.0:public@192.168.0.123:::::2

Title[server.memory]: Free Memory

PageTop[server.memory]: <H1>Free Memory</H1>

MaxBytes[server.memory]: 1000000

ShortLegend[server.memory]: B

YLegend[server.memory]: Bytes

LegendI[server.memory]: Free

LegendO[server.memory]: Total

Legend1[server.memory]: Free memory, not including swap, in bytes

Legend2[server.memory]: Total memory

Options[server.memory]: gauge,growright,nopercent

kMG[server.memory]: k,M,G,T,P,X

oid로 할 경우

Target[server.memory]: 1.3.6.1.4.1.2021.4.6.0&1.3.6.1.4.1.2021.4.5.0:public@192.168.0.123:::::2


# Memory Monitoring (Percentage usage)

Title[server.mempercent]: Percentage Free Memory

PageTop[server.mempercent]: <H1>Percentage Free Memory</H1>

Target[server.mempercent]: ( memAvailReal.0&memAvailReal.0:public@192.168.0.123:::::2 ) * 100 / ( memTotalReal.0&memTotalReal.0:public@192.168.0.123:::::2 )

options[server.mempercent]: growright,gauge,transparent,nopercent

Unscaled[server.mempercent]: ymwd

MaxBytes[server.mempercent]: 100

YLegend[server.mempercent]: Memory %

ShortLegend[server.mempercent]: Percent

LegendI[server.mempercent]: Free

LegendO[server.mempercent]: Free

Legend1[server.mempercent]: Percentage Free Memory

Legend2[server.mempercent]: Percentage Free Memory

oid로 할 경우

Target[server.mempercent]: ( 1.3.6.1.4.1.2021.4.6.0&1.3.6.1.4.1.2021.4.6.0:public@192.168.0.123:::::2 ) * 100 / ( 1.3.6.1.4.1.2021.4.5&1.3.6.1.4.1.2021.4.5:public@192.168.0.123:::::2 )


# Disk & inode Monitoring

Target[server.disk]: dskPercent.3&dskPercentNode.3:public@192.168.0.123

Title[server.disk]: Disk Partition Usage

PageTop[server.disk]: <H1>nfsmail Disk Usage </H1>

MaxBytes[server.disk]: 100

ShortLegend[server.disk]: %

YLegend[server.disk]: Disk Utilization

Legend1[server.disk]:

Legend2[server.disk]:

LegendI[server.disk]: Disk Usage

LegendO[server.disk]: Inode Usage

Options[server.disk]: gauge,growright,nopercent

Unscaled[server.disk]: ymwd

oid로 할 경우

Target[server.disk]: 1.3.6.1.4.1.2021.9.1.9.3&1.3.6.1.4.1.2021.9.1.10.3:public@192.168.0.123


# tcp connection error

LoadMIBs: /usr/share/snmp/mibs/TCP-MIB.txt

Target[server.conn]: tcpCurrEstab.0&tcpMaxConn.0:public@192.168.0.123

Title[server.conn]: TCP Connection

PageTop[server.conn]: <H1>TCP Connection </H1>

MaxBytes[server.conn]: 1000

YLegend[server.conn]: TCP Connection

Legend1[server.conn]:

Legend2[server.conn]:

LegendI[server.conn]: Current Connection

LegendO[server.conn]: Max Connection

Options[server.conn]: gauge,growright,nopercent

Unscaled[server.conn]: ymwd

oid로 할 경우

Target[server.conn]: 1.3.6.1.2.1.6.9.0&1.3.6.1.2.1.6.4.0:public@192.168.0.123


#트래픽 모니터링

Target[211.174.182.196]: 2:routerit@192.168.0.123:::::2

SetEnv[211.174.182.196]: MRTG_INT_IP="" MRTG_INT_DESCR="Ethernet1"

MaxBytes[211.174.182.196]: 500000

Title[211.174.182.196]: PRI alteon_traffic

PageTop[211.174.182.196]: <H1>PRI alteon_traffic</H1>

Options[211.174.182.196]: gauge,growright,nopercent




4. 트래픽 모니터링

  - 장비내에서 각 포트를 구별해주는 포트번호

 - snmp의 community 값 

 - snmp를 통해서 모니터링의 대상이 되는 각포트별 mib값 


4-1 장비내에서 각 포트를 구별해주는 포트번호

여기서 의미하는 포트번호는 물리적인 1~24의 포트번호를 의미하는 것이 아니라 내부적으로 지정된 포트번호를 의미한다      포트번호는 snmpwalk 명령을 통해서 알 수 있다

 snmpwalk -v 2c -c public 32.204.10.12  ifDescr


4-2 snmp의 community값 확인

4-1에서도 포트번호를 알기위해 community값을 알아야 한다. 

스위치마다의 community 값을 확인하는 방법은 다 달라서 각 스위치의 매뉴얼을 보고 설정된 community값을 확인한다


4-3 snmp를 통해서 모니터링의 대상이 되는 각포트별 mib

포트를 통해서 in/out의 값만 알고 싶다면 mib는 크게 의미 없지만, in/out 이외의 cpu상태등을 알고자한다면 IF-MIB.txt에 있는 내용을 참조해서 해당 mib값을 이용해서 설정




오류1

2015-01-06 11:14:02 -- SNMP Error:

Received SNMP response with error code

  error status: noSuchName

  index 2 (OID: 1.3.6.1.4.1.2021.9.1.9.7)

SNMPv1_Session (remote host: "192.168.11.111" [192.168.11.111].161)

                  community: "public"

                 request ID: 1211199652

                PDU bufsize: 8000 bytes

                    timeout: 2s

                    retries: 5

                    backoff: 1)

 at /usr/bin/../lib64/mrtg2/SNMP_util.pm line 492

2015-01-06 11:14:02 -- SNMPGET Problem for dskPercent.6 dskPercent.7 sysUptim

e sysName on public@211.174.182.198::::::v4only

 at /usr/bin/mrtg line 2203

2015-01-06 11:14:02 -- 2015-01-06 11:14:02: ERROR: Target[server.disk][_IN_]

' $target->[0]{$mode} ' did not eval into defined data

2015-01-06 11:14:02 -- 2015-01-06 11:14:02: ERROR: Target[server.disk][_OUT_]

 ' $target->[0]{$mode} ' did not eval into defined data

2015-01-06 11:15:01 -- Started mrtg with config '/data/admin.matth.co.kr/mrtg

/disk.cfg'

config 오류다. 위는 oid를 넣지 않고 이름으로 찾는 방법으로 했을때이다. 저 변수에 맞는 값이 없다는 소리이다.

dskPercent라는 값을 snmpwalk로 보면 뒤에 번호들이 뜰텐데 6과 7에 맞는건 없어서 나오는 에러


오류 2

2015-01-06 18:56:01 -- Started mrtg with config '/etc/mrtg

/disk.cfg'

2015-01-06 18:56:01 -- 2015-01-06 18:56:01: WARNING: Expected a number but go

t '/'

2015-01-06 18:56:01 -- 2015-01-06 18:56:01: WARNING: Expected a number but go

t '/'

2015-01-06 18:56:01 -- 2015-01-06 18:56:01: ERROR: Target[server.disk][_IN_] 

' $target->[0]{$mode} ' did not eval into defined data

2015-01-06 18:56:01 -- 2015-01-06 18:56:01: ERROR: Target[server.disk][_OUT_]

 ' $target->[0]{$mode} ' did not eval into defined data

oid로 지정한 값이 실제 디스크 사용량 값이 아니었던 것이다


[root@WEB mrtg]# snmpwalk -c public -v 2c 211.174.182.198 1.3.6.1.4.1.2021.9.1.9.1

UCD-SNMP-MIB::dskPercent.1 = INTEGER: 10

[root@WEB mrtg]# snmpwalk -c public -v 2c 211.174.182.198 1.3.6.1.4.1.2021.9.1.9  

UCD-SNMP-MIB::dskPercent.1 = INTEGER: 10

UCD-SNMP-MIB::dskPercent.2 = INTEGER: 7

UCD-SNMP-MIB::dskPercent.3 = INTEGER: 10


위와 같이 퍼센트 값을 가져와야 하는데 


[root@WEB mrtg]# snmpwalk -c public -v 2c 211.174.182.198 1.3.6.1.4.1.2021.9.1.2

UCD-SNMP-MIB::dskPath.1 = STRING: /

UCD-SNMP-MIB::dskPath.2 = STRING: /boot

UCD-SNMP-MIB::dskPath.3 = STRING: /test

[root@WEB mrtg]# snmpwalk -c public -v 2c 211.174.182.198 1.3.6.1.4.1.2021.9.1.2.1

UCD-SNMP-MIB::dskPath.1 = STRING: /


그냥 '/' 값을 가져오고 있던 것이다. 결국 그래프는 그려야 하는데 이상한 oid값을 주고 있으니 에러가 나는 것이다

제대로된 oid로 수정 후 해결

'IT > 소프트웨어 설치' 카테고리의 다른 글

JBoss 6.0 설치하기 - centos6.5  (0) 2015.02.15
nagios 모니터링 툴  (4) 2015.02.09
apache mod_cband 설치 및 설정  (0) 2015.02.09
NFS  (0) 2015.01.04
DRBD / HeartBeat / NFS  (2) 2014.12.29