MRTG
1. snmp 설정
1-1 snmp 설치 및 버전확인
|
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 |