1 Inside Cacti (상) 효주아빠(http://blog.naver.com/cordba )
1
Inside Cacti
(상)
효주아빠(http://blog.naver.com/cordba )
2
Cacti Interface
1. Cacti 화면 구성 – cacti를 설치하고 admin 사용자로 로그인하면 다음과 같은 화면을 볼
수있다. 이번장에서는 기능을 간단하게 알아보고 다음 장에서는 실제 적용하는 방법에 대하
여 알아보고자 한다.
Cacti의 Console은 크게 3가지 부분으로 나눌수 있으며 그것은 다음과 같다. 또한 이 문
서에서 가장 중요한 내용은 Template(틀,형판)기능으로 미리 만들어진 틀(Template)를 통하
여 다양한 특정 장비(Host)에 국한되지 않으면서 여러 Host에 적용할수 있다.
기능 설명
Host(Graph) 관리 기능 - 모니터링 대상이 되는 Host에 대한 관리 기능
- 대상의 Graph에 대한 관리(추가.삭제.편집) 기능
Template 기능
- 미리 정해진 다양한 방법(틀)으로 이것을 통해 데이터를
수집
- Data Template은 대한 데이터 수집 방법에 대한 정의
- Graph Template은 ‘Data Template’에서 수집된 데이터
를 어떻게 그래프(Graph)로 표현할 것인가 정의
- Host Template로 형태(Unix, Linux, Windows,…)에 대한
3
수집할 ‘Graph Template’들을 미리 정의
- Data Queries는 앞서 나왔던 Data, Graph의 Template의
집합적(Collection)인 형태로 반복적인 작업을 줄여 줄
수 있다.
- Data Input Methods를 통하여 Script, SNMP등에서 데이
터를 가져오는 방법과 재가공하여 의미있는 데이터로 만
드는 방법등에 대한 정의를 한다.
Cacti Management 기능
- Cacti를 이용하기 위하여 ‘사용환경(Settings)’이나
‘로그(System Utilities)’, ‘사용자 관리(User
Management)’등의 기능을 수행한다.
100101001
101101101
...
Cacti에서 대상HOST에서 데이터를 수집하고 처리하여 사용자에게 그래프로 표출되는 과정
을 대략적으로 도식화하면 위와 같은 그림이 될수 있다.
4
2. New Graphs(Create) – 이 메뉴는 새로운 Host를 추가하거나 기존에 있었던 것들을 관리
하는 기능을 수행한다.
또한 새로운 그래프, 디바이스를 추가하거나 삭제하는 등의 작업도 이곳에서 할수있다.
3. Management – 앞서 ‘New Graphs’메뉴를 통하여 생성된 그래프, 디바이스를 관리하는
기능을 수행한다. 크게 복잡한 기능이 없기 때문에 간략한 설명으로 대신한다.
5
Management에 포함된 메뉴의 기능은 다음과 같다.
기능 설명
Graph Menagement - New Graphs’에서 추가되었던 모든 그래프를 개별 단위로 관리
할수 있다.
Graph Trees - 각각의 Host별로 Tree구조로 만들어 일목요연하게 볼수 있도록
분류하는 기능
Data Source - 하나의 Graph를 만들기 위해서는 다양한 요소의 데이터가 필요
한데 각각 개별 요소별로 관리를 할수 있다.
Devices - 모니터링 할 대상 Host(Device)를 관리한다.
6
대상(Device)별 SNMPD설치하기
어떤 호스트 또는 대상(Device)을 모니터링 하기 위해서는 기본적으로 SNMP Query(질의)
에 대한 응답을 할수 있어야 한다. SNMP의 설정 방법에 대하여 간략하게 알아보기로 하겠다.
1. Windows 2003
A) SNMP서비스 설치 – “프로그램 추가/제거”-> “Windows 구성요소 추가/제거” ->
“관리 및 모니터링 도구”->”SNMP(단순 네트워크 관리 프로토콜)”을 선택하여 설치한다.
B) 서비스(services.msc) – “서비스 관리자”를 수행하여 “SNMP Service”를 클릭한다.
7
C) 트랩 – SNMP 질의시 사용할 ‘커뮤니티 이름’과 ‘트랩 대상’의 IP Address를 입력
한다.
8
D) 보안 – “보안”을 선택하여 허용할 ‘커뮤니티 이름’과 ‘SNMP 패킷’을 받을 호스
트의 IP Address를 입력한다.
※ 참고 자료: Windows Server 2003에서 SNMP 서비스의 네트워크 보안 구성
(http://support.microsoft.com/kb/324261/ko )
9
2. Solaris – Sunfreeware(http://www.sunfreeware.com/ )나 Net-Snmp(http://www.net-
snmp.org)에서 Netsnmp를 다운로드 받아서 설치하며 여기서는 Sunfreeware에서 Package형태
로 받아 설치하는 것을 기본으로 한다.
※ 설치 환경: Solaris Sparc 9
A) 패키지 받기
[root:/home/pkg/netsnmpd]wget \
ftp://ftp.sunfreeware.com/pub/freeware/sparc/9/netsnmp -5.1.1-sol9-sparc-local.gz
--17:32:44-- ftp://ftp.sunfreeware.com/pub/freeware/sparc/9/netsnmp -5.1.1-sol9-
sparc-local.gz
=> `netsnmp-5.1.1-sol9-sparc-local.gz'
Connecting to ftp.sunfreeware .com:21... connected!
…
9500K .......... .......... ..... 100% @ 199.44 KB/s
17:33:33 (206.45 KB/s) - `netsnmp-5.1.1-sol9-sparc-local.gz' saved [9754141]
10
B) 패키지 설치하기
[root:/home/pkg/netsnmpd] gunzip netsnmp-5.1.1-sol9-sparc-local.gz
[root:/home/pkg/netsnmpd] pkgadd -d netsnmp-5.1.1-sol9-sparc-local
The following packages are available:
1 SMCnsnmp netsnmp
(sparc) 5.1.1
Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]: all
…
/usr/local/share/snmp/snmpconf -data/snmptrapd-data/traphandle
[ verifying class <none> ]
Installation of <SMCnsnmp> was successful.
C) net-snmp 서비스 등록
[root:/usr/local/share/snmp]cd /etc/init.d
[root:/etc/init.d]cat > net-snmpd
#!/sbin/sh
#
# Copyright (c) 1997 by Sun Microsystems, Inc.
# All rights reserved.
#
#ident "@(#)netsnmpd 1.12 97/12/08 SMI"
case "$1" in
'start')
echo "Starting the Simple Network Management Daemon "
if [ -f /usr/local/share/snmp/snmpd.conf ]; then
/usr/local/sbin/snmpd -c /usr/local/share/snmp/snmpd.conf
fi
;;
'stop')
echo "Stopping the Simple Network Management Daemon "
11
/usr/bin/pkill -9 -x -u 0 '(snmpd)'
;;
*)
echo "Usage: $0 { start | stop }"
exit 1
;;
esac
exit 0
[root:/etc/init.d]chmod 744 net-snmpd
[root:/etc/init.d]cd ../rc3.d
[root:/etc/rc3.d]./S76snmpdx stop
[root:/etc/rc3.d]./S77dmi stop
[root:/etc/rc3.d]mv S76snmpdx s76snmpdx
[root:/etc/rc3.d]mv S77dmi s77dmi
[root:/etc/rc3.d]ln -s /etc/init.d/net-snmpd S76net-snmpd
[root:/etc/rc3.d]cd ../rc2.d
[root:/etc/rc2.d]mv K07dmi k07dmi
[root:/etc/rc2.d]mv K07snmpdx k07snmpdx
[root:/etc/rc2.d]ln -s /etc/init.d/net-snmpd K07net-snmpd
D) snmpd환경 설정
[root:/etc/rc2.d]cd /usr/local/share/snmp
[root:/usr/local/share/snmp] cat > snmpd.conf
부록에 첨부된 snmpd.conf를 붙여넣거나 편집한다.
^D
[root:/usr/local/share/snmp] vi snmpd.conf
자신의 환경에 알맞게 수정한다.
E) snmpd 서비스 시작
[root:/usr/local/share/snmp] cd /etc/init.d
[root@black:/etc/init.d]./net-snmpd start
Starting the Simple Network Management Daemon
12
3. Router(Cisco)
A) snmp server 기동
Sehll>telnet router3
User Access Verification
Password:
Router-3>en
Password:
Router-3#conf t
Router-3(config)# snmp-server community mycom RO
Router-3(config)#^Z
Router-3#wr
Building configuration...
[OK]
Router-3#show snmp
Chassis: 13649248
…
0 SNMP trap PDUs
SNMP logging: disabled
B) Access List를 이용한 보안 – 앞서 알아보았던 snmp서버의 기동은 “mycom이라는 커뮤
니티를 이용한 모든 Host에 Snmp조회를 Read Only로 허용하겠다”는 의미이다. 따라서 허용
할 호스트를 Access List를 활용하여 관리하는 것이 바람직할 것이다.
Router-3#conf t
Router-3(config)# access-list 100 permit ip any any
Router-3(config)# access-list 100 deny udp any any eq snmp
Router-3(config)# access-list 100 deny udp any any eq snmptrap
Router-3(config)# access-list 100 permit ip host {조회할 호스트 IP} any
Router-3(config)#^Z
Router-3#wr
Building configuration...
[OK]
Router-3#show conf
Using 698 out of 32762 bytes
!
…
access-list 100 permit ip any any
13
access-list 100 deny udp any any eq snmp
access-list 100 deny udp any any eq snmptrap
access-list 100 permit ip host 192.9.201.1 any
snmp-server community mycom RO
end
※ Switch의 경우 – Switch의 경우도 위의 Router와 동일한 방법으로 설정하면 된다.
4. L4 or L7 Switch
A) Snmp Server 기동
Press RETURN to activate console . . .
Password:
L4> en
Password:
L4# configure
L4(config)#snmp set community mycom privilege read
B) Access Host지정
L4(config)#snmp set target target1 ip-address {호스트 IP} security-name mycom
L4(config)#show
Running system configuration:
!
…
!
41 : snmp set community m ycom privilege read
42 : snmp set target target 1 ip-address 20*.**.**.** security-name mycom
!
…
L4(config)# save active
Are you sure you want to overwrite the Active configuration [no]?yes
2007-09-01 01:29:12 %CONFIG-I-SAVED, configuration saved to Active configuration.
L4(config)#^Z
L4#
14
5. Linux(Fedora)
A) Net-Snmpd 설치하기
[root@ ~]# yum install net-snmp
Loading "installonlyn" plugin
Setting up Install Process
…
=============================================================================
Package Arch Version Repository Size
================================================== ===========================
Installing:
net-snmp i386 1:5.3.1 -15.fc6 updates 695 k
Installing for dependencies:
lm_sensors i386 2.10.1 -1.fc6 updates 506 k
net-snmp-libs i386 1:5.3.1-15.fc6 updates 1.1 M
Transaction Summary
=============================================================================
Install 3 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 2.3 M
Is this ok [y/N]:y
Downloading Packages:
(1/3): net-snmp-5.3.1-15. 100% |=========================| 695 kB 00:03
…
Finished Transaction Test
Transaction Test Succeeded
Installing: net-snmp-libs ######################### [1/3]
Installing: lm_sensors ######################### [2/3]
Installing: net-snmp ######################### [3/3]
Installed: net-snmp.i386 1:5.3.1-15.fc6
Dependency Installed: lm_sensors.i386 0:2.10.1 -1.fc6 net-snmp-libs.i386 1:5.3.1-
15.fc6
Complete!
15
B) snmpd설정하기
[root@ ~]cd /etc/snmp
[root:/etc/snmp]vi snmpd.conf
부록에 첨부된 snmpd.conf(linux)를 참고로 수정한다.
C) 서비스 등록 및 시작
[root:/etc/snmp]cd /etc/init.d
[root:/etc/init.d]chkconfig --level 5 snmpd on
[root:/etc/init.d]chkconfig --list snmpd
snmpd 0:해제 1:해제 2:해제 3:해제 4:해제 5:활성 6:해제
[root:/etc/init.d]./snmpd start
snmpd (을)를 시작합니다: [ OK ]
[root:/etc/init.d]ls -al ../rc3.d/*snmpd*
lrwxrwxrwx 1 root root 15 11월 1 20:11 ../rc3.d/K50snmpd -> ../init.d/snmpd
[root:/etc/init.d]ls -al ../rc5.d/*snmpd*
lrwxrwxrwx 1 root root 15 11월 1 20:38 ../rc5.d/S50snmpd -> ../init.d/snmpd
6. Network Printer(HP Jetdirect)
A) Jetdirect접속 – telnet을 이용하여 Jetdirect Admin Console로 접속한다.
Shell>telnet {Jetdirect IP Address}
Connected.
HP JetDirect
…
> menu
===JetDirect Telnet Configuration===
HP JetDirect : J6057A
…
MAIN MENU
----------------------------------------
1. General Settings
2. TCP/IP Menu
3. SNMP Menu
…
0. Exit Telnet
Enter Selection => 3
16
B) SNMP Menu
===JetDirect Telnet Configuration===
HP JetDirect : J6057A
…
System Up Time : 4:53:01
SNMP MENU
----------------------------------------------
1. SNMP - Main Settings
2. SNMP - Traps
0. Return to Main Menu
Enter Selection => 1
C) SNMP설정하기
===JetDirect Telnet Configuration===
…
SNMP - MAIN SETTINGS
-----------------------------------------
SNMP Config : Disabled
…
Change Settings ?(Y/[N]): Y
SNMP - MAIN SETTINGS
-----------------------------------------
Use the BACKSPACE key to edit. Press ENTER when correct.
Press ESCAPE to get out of Editing Mode.
SNMP Config : 1
Get Cmnty Name : mycom
Set Cmnty Name : mycom
Default Get Cmnty : 1
Change Settings ?(Y/[N]): N
17
D) SNMP-Trap설정
SNMP MENU
----------------------------------------------
1. SNMP - Main Settings
2. SNMP - Traps
0. Return to Main Menu
Enter Selection => 2
…
Change Settings ?(Y/[N]): Y
SNMP - TRAPS
-----------------------------------------
Auth. Trap : 1
----------------------------------------------------------------------
| | IP Address | Trap Cmnty Name | Port |
----------------------------------------------------------------------
| 1 |{조회할 IP Address}| mycom | 0162 |
----------------------------------------------------------------------
Change Settings ?(Y/[N]): N
※참고: HP Jetdirect and Embedded Jetdirect Inside Print Servers
HP Jetdirect Download Manager
7. 기타 모니터링 있는 장비들 – 위에서 설명된 몇몇 장비(Device)를 제외한 장비는 어떠한
것이 있을까? 이에 대한 해답은 “SNMP나 PHP Script로 접근이 가능한 모든 것들”이라고
할수 있겠다. 형태를 불문하고 모니터링에 가치가 있다고 생각되는 다양한 것들이 SNMP를
지원하고 있기 때문에 관리자도 평소에 몰랐던 장비가 Cacti를 통하여 모니터링 될수 있다.
18
SNMP OID 조회
1.snmpwalk – SNMP(Simple Network Management Protocol)란 자체로 어떠한 값을 가진다기보
다 MIB(Management Information Bases)라는 규약을 통하여 특정 장비(Device)의 데이터가
구조화된다. 이러한 구조의 하나의 객체를 OID(Object Indentifiers)라하며 각각의 장비의
정보를 나타내거나 조작할 수 있도록되어 있다. OID를 조회하기 위하여 snmpwalk라는 유틸
리티를 많이 사용하며 앞서 이야기했던 snmp query에 대한 응답을 할 수 있는 demon(예:
snmpd)가 설치된 장비에서 원하는 OID의 하부의 값(tree)을 포함한 것들을 가져오는 기능을
수행한다. 여기서 중요한 것은 해당 값을 단순히 확인하는 것이 아니라 조회된 “OID가 과
연 어떠한 내용을 나타내는가?”에 두어야 할 것이다.
snmpwalk의 간략한 사용방법은 다음과 같다.
Shell> snmpwalk [OPTIONS] IP_Address [OID]
옵션(OPTIONS) 설명 주요 파라미터
-v SNMP의 버전(1, 2c, 3) 1, 2c, 3
-c Community 문자 대상 snmp서버에서 설정한
-O 출력 타입 a – 문자 형식의 출력
f – 전체 OID를 출력
n – 숫자 형식의 OID출력
[OID] 출력을 원하는 OID 값 1 – OID의 최 상위 값
예) solaris : snmpwalk -Oa -c mycom -v 2c {ip address} 1
SNMPv2-MIB::sysDescr.0 = STRING: SunOS sunos 5.7 Generic_106541-08 sun4u
SNMPv2-MIB::sysObjectID.0 = OID: NET -SNMP-MIB::netSnmpAgentOIDs.3
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (8115943) 22:32:39.43
SNMPv2-MIB::sysContact.0 = STRING: blog.naver.com/cordba
SNMPv2-MIB::sysName.0 = STRING: opi
SNMPv2-MIB::sysLocation.0 = STRING: "Computer Center"
…
예) hp jetdirect: snmpwalk -On -c mycom -v 2c {ip address} 1
.1.3.6.1.2.1.1.1.0 = STRING: HP ETHERNET MULTI -ENVIRONMENT,ROM
R.22.01,JETDIRECT,JD95,EEPROM R.25.57,CIDATE 05/02/2006
.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.11.2.3.9.1
.1.3.6.1.2.1.1.3.0 = Timeticks: (1987100) 5:31:11.00
…
19
2. 기타 OID 조회방법 – 서버나 네트웍 장비 회사의 홈페이지나 구입시 딸려오는 자료에는
대부분 SNMP에 대한 자료들이 있다. 하지만 서버에 네트웍카드도 꽂혀있는 위치에 따라서
조금씩 값이 변할수도 있으므로 맞는 자료도 있고 틀린 부분도 있으니 꼭 확인을 해봐야 한
다. 다음은 SNMP OID를 조회하고 그것이 의미하는 내용을 좀더 쉽게 찾을 수 있는 툴이나
검색엔진으로 참고하며 더 쉽게 찾을 수도 있을 것이다.
회사 SNMP OID조회 홈페이지
Cisco http://tools.cisco.com/Support/SNMP/do/BrowseOID.do?local=en
Mib Browser http://www.oidview.com/mibbrowser.html
ByteSphere사의 MIB Browser는 편리하기는 하지만 Shareware로 단 일주일 정도 받아서 사
용해 볼수 Free Trial을 받을수 있다. 평소에 궁금했거나 조회할 OID를 모아서 한번에 조회
해보는 것도 좋은 방법이라고 생각된다.
20
모니터링 대상 찾기
유닉스에 설치된 NET-SNMP를 통하여 해당서버에서 중요한 프로세서의 갯수등 정보를 얻어
보기로 하자. 아래의 예는 Linux에서 운용되는 삼바(Samba) 서버를 모니터링하는 것을 기준
으로 하면 용도나 중요하게 생각되는 프로세서(Process)에 따라서 조금씩 틀려질 것이다.
하지만 대상서버에 NET-SNMP가 설치된 경우에는 어떠한 경우든 적용이 가능하도록 Cacti에
적용할수 있도록하는데 중점을 두었다.
1. 대상 서버 작업
A) 프로세서 확인
shell>ps –e
PID TTY TIME CMD
1 ? 00:00:21 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 migration/0
…
11450 ? 00:00:09 nmbd
11452 ? 00:00:00 smbd
13083 ? 00:12:14 snmpd
위의 과정을 통하여 모니터링할 프로세서를 확인할수 있다.
예) mount.smbfs(실제는 없지만 에러감지를 위해), smbd, nmbd, automount
B) snmpd.conf수정
이제 모니터 할 프로세서가 정해졌다면 snmpd에 적용하여 본다. /etc/snmp/snmpd.conf(리
눅스 Net-Snmpd 패키지 기본 설정 파일) 를 수정하여 앞서 찾아낸 프로세서를 입력해보자.
일부 Unix의 경우에는 /usr/local/share/snmp/snmpd.conf나 /usr/share/snmp/snmpd.conf에
있는 경우도 있다.
Shell>vi /etc/snmp/snmpd.conf
…
#access MyRWGroup "" any noauth 0 all all all
proc mount.smbfs
proc smbd
proc nmbd
proc automount
…
21
disk /
C) snmpd 재시작
shell>cd /etc/init.d
/etc/init.d>./snmpd restart
snmpd 를 정지함: [ OK ]
snmpd (을)를 시작합니다: [ OK ]
2. Cacti서버 작업
A) snmpwalk로 조회하기 – 이제는 해당값을 snmpwalk를 통하여 어떤 OID값을 가지고 있는
지 조회할 차례이다. 조회를 하다보면 어떠한 값이 어느곳에 있는지 찾기가 힘든 경우가 많
으나 Redirect를 이용해 파일로 덤프를 해놓고 보면 위치는 어렵지 않게 찾을 수 있다.
- snmpwalk덤프해서 조회
[root:/root/swalk]snmpwalk -Oa -c mycom -v 2c {대상IP} 1 > test.walk
[root:/root/swalk]vi test.walk
…
HOST-RESOURCES-MIB::hrSystemInitialLoadParameters.0 = ""
HOST-RESOURCES-MIB::hrSystemNumUsers.0 = Gauge32: 9
HOST-RESOURCES-MIB::hrSystemProcesses.0 = Gauge32: 66
HOST-RESOURCES-MIB::hrSystemMaxProcesses.0 = INTE GER: 0
HOST-RESOURCES-MIB::hrMemorySize.0 = INTEGER: 2096640 KBytes
…
- 문자형태 조회
shell>snmpwalk -Oa -c {커뮤니티} -v 2c {대상IP} 1.3.6.1.4.1.2021.2.1
UCD-SNMP-MIB::prIndex.1 = INTEGER: 1
UCD-SNMP-MIB::prIndex.2 = INTEGER: 2
UCD-SNMP-MIB::prIndex.3 = INTEGER: 3
UCD-SNMP-MIB::prIndex.4 = INTEGER: 4
UCD-SNMP-MIB::prNames.1 = STRING: mount.smbfs
UCD-SNMP-MIB::prNames.2 = STRING: smbd
UCD-SNMP-MIB::prNames.3 = STRING: nmbd
UCD-SNMP-MIB::prNames.4 = STRING: automount
…
UCD-SNMP-MIB::prCount.2 = INTEGER: 28
UCD-SNMP-MIB::prCount.3 = INTEGER: 1
UCD-SNMP-MIB::prCount.4 = INTEGER: 1
…
22
- 숫자형태 조회
shell>snmpwalk -On -c {커뮤니티} -v 2c {대상IP} 1.3.6.1.4.1.2021.2.1
.1.3.6.1.4.1.2021.2.1.1.1 = INTEGER: 1
.1.3.6.1.4.1.2021.2.1.1.2 = INTEGER: 2
.1.3.6.1.4.1.2021.2.1.1.3 = INTEGER: 3
.1.3.6.1.4.1.2021.2.1.1.4 = INTEGER: 4
.1.3.6.1.4.1.2021.2.1.2.1 = STRING: mount.smbfs
.1.3.6.1.4.1.2021.2.1.2.2 = STRING: smbd
.1.3.6.1.4.1.2021.2.1.2.3 = STRING: nmbd
.1.3.6.1.4.1.2021.2.1.2.4 = STRING: automount
.1.3.6.1.4.1.2021.2.1.3.1 = INTEGER: 0
.1.3.6.1.4.1.2021.2.1.3.2 = INTEGER: 0
.1.3.6.1.4.1.2021.2.1.3.3 = INTEGER: 0
…
.1.3.6.1.4.1.2021.2.1.5.2 = INTEGER: 28
.1.3.6.1.4.1.2021.2.1.5.3 = INTEGER: 1
.1.3.6.1.4.1.2021.2.1.5.4 = INTEGER: 1
.1.3.6.1.4.1.2021.2.1.100.1 = INTEGER: 1
…
.1.3.6.1.4.1.2021.2.1.100.4 = INTEGER: 0
.1.3.6.1.4.1.2021.2.1.101.1 = STRING: No mount.smbfs process running.
.1.3.6.1.4.1.2021.2.1.101.2 = STRING:
…
위의 두가지 값을 통하여 여러가지 정보를 알수가 있으며 순서는 Index, Name, Min, Max,
Count, Error, ErrorMessage,… 라는 것을 알수가 있다.
23
Cacti 기본 모니터링
지금까지 많은 내용을 함축적으로 정리해 보았지만 모든 내용이 Cacti를 이용하기 위한
예비 단계였다. 여기서 “Cacti 장비를 어떻게 추가할 것 인가?”라는 비교적 단순한 부분
들은 건너뛰고 실제 모니터링을 어떻게 하는지 지금부터 알아보고자 한다.
1. 모니터링 대상 선정 – TCP Data의 현재 ActiveOpen, PassiveOpen, Current
Established,Established Rest값을 모니터링 해보자.
A) 문자값으로 찾기
[root:/root/down]snmpwalk -Oa -c mycom -v 2c 2*.**.**.** .1.3.6.1.2.1.6
TCP-MIB::tcpRtoAlgorithm.0 = INTEGER: vanj(4)
TCP-MIB::tcpRtoMin.0 = INTEGER: 200 milliseconds
TCP-MIB::tcpRtoMax.0 = INTEGER: 60000 milliseconds
TCP-MIB::tcpMaxConn.0 = INTEGER: -1
TCP-MIB::tcpActiveOpens.0 = Counter32: 1291
TCP-MIB::tcpPassiveOpens.0 = Counter32: 3238
TCP-MIB::tcpAttemptFails.0 = Counter32: 0
TCP-MIB::tcpEstabResets.0 = Counter32: 44
TCP-MIB::tcpCurrEstab.0 = Gauge32: 94
TCP-MIB::tcpInSegs.0 = Counter32: 67613379
…
B) 숫자값(OID)으로 찾기
[root:/root/down]snmpwalk -On -c mycom -v 2c 2*.**.**.** .1.3.6.1.2.1.6
.1.3.6.1.2.1.6.1.0 = INTEGER: vanj(4)
.1.3.6.1.2.1.6.2.0 = INTEGE R: 200 milliseconds
.1.3.6.1.2.1.6.3.0 = INTEGER: 60000 milliseconds
.1.3.6.1.2.1.6.4.0 = INTEGER: -1
.1.3.6.1.2.1.6.5.0 = Counter32: 1292
.1.3.6.1.2.1.6.6.0 = Counter32: 3239
.1.3.6.1.2.1.6.7.0 = Counter32: 0
.1.3.6.1.2.1.6.8.0 = Counter32: 44
.1.3.6.1.2.1.6.9.0 = Gauge32: 94
.1.3.6.1.2.1.6.10.0 = Counter32: 67632126
…
24
2. Data Template 만들기 -‘Data Templates’ -> Add를 눌러 다음과 같이 추가한다.
※ 팁: 위의 Template를 만드는 도중“Data Source Type”은 snmpwalk로 조회할 때 표시된
값을 사용하면 된다. ‘예’는 나머지 값은 Counter가되고 CurrEstab만 Guage가된다. 위의
값들을 그래프가 생성시에 지정하려면 “Use Per-Data Source Value(Ignore this
value)”를 체크한다.
25
위의 그림과 같이 ‘Duplicate’기능을 이용하여 3개를 더 복사해 놓는다.
ActiveOpens를 통해 복사된 나머지 값들을 수정한다.
26
3.Graph Template 만들기 – ‘Graph Templates’-> Add를 클릭하여 다음과 같이 편집하고
‘Create’를 누른다.
‘Create’를 누르면 다음과 같은 항목이 새롭게 생긴다. “Graph Template Items”의
Add눌러 이전에 만들어 두었던 “Data Template”들과 연결시킨다.
아래의 값은 실제 그래프가 그려질 값으로 “Data Template”에서 가져온 값은
평균값을‘녹색’으로 표현한다.
위와 같이 만들었다면 이제는 그래프 바닥에 표시될 항목 현제(Current), 평균(Average),
최대(Maximum)값을 만들어 보도로 하겠다.
27
Current
Average
MAX – 단 최대값 다음에는 CR(리턴)값을 넣기위해 Insert Hard Return을 채크한다.
28
나머지 값들도 위와 같은 요령으로 “Data Template”와 “Graph Template Items”와 서로
연결을 시켜준다.
29
4.Device에 새로운 그래프 추가
A) Device에 Graph Template추가 – Devices -> 대상 선택(기존에 추가되었던 호스트) ->
Add Graph Templates에서 “TCP Mib – Connections”를 선택후에 추가 -> 우측 상단에
“Create Graphs for this host”클릭
B) Graph를 생성 – “TCP Mib – Connections”를 선택 - Save
C) 그래프
30
C) 다양한 그래프 보기 – 위의 그래프는 높은 값에 낮은 값들이 Overwrite되면서 보기가
힘든 경우가 많다. 따라서 그래프를 수정할 필요성을 느끼게 된다. 단 “Data Template”가
변경(순서,타입등)된 경우에는 기존 그래프를 삭제하고 재생성하는 것이 좋다.
- 기존값 삭제 및 추가: 기존의 그래프를 삭제하려면 ‘Graph Template’와 “Graph
Management”에서 해당 그래프도 삭제하여야 한다.
- Line을 이용한 경우
31
- 스텍(Stack을 이용한 경우)
32
Data Queries를 이용한 모니터링
(UCD MIB 조회)
앞서 알아보았던 SNMP조회는 고정적인 OID를 가지는 것들 이였지만 앞장“모니터링 대상
찾기”의 경우처럼 사용자가 snmpd.conf에 입력된 어떤 프로세서의, 몇 개의 정보를 원할지
모를 때는 어떻게 할 것인가? Cacti가 기존의 MRTG와 차별화된 기능 중에 하나가 이런
경우에도 대응을 할수 있도록 유연성을 가졌다는 것이다. 이제 앞서 “모니터링 대상
찾기”에서 알아보았던 프로세서들을 모니터링 해보도록 하겠다.
1. XML작성
A) UCD-MIB의 OID 형식 보기 – 아래의 조회를 통하여 사용자 프로세서가 어떤 OID형식의
구조를 가지는지 조회해 볼수있다.
shell>snmpwalk -Oa -c {커뮤니티} -v 2c {대상IP} 1.3.6.1.4.1.2021.2
UCD-SNMP-MIB::prIndex.1 = INTEGER: 1
UCD-SNMP-MIB::prIndex.2 = INTEGER: 2
...
UCD-SNMP-MIB::prNames.1 = STRING: proc
UCD-SNMP-MIB::prNames.2 = STRING: pcshare
...
UCD-SNMP-MIB::prCount.1 = INTEGER: 0
UCD-SNMP-MIB::prCount.2 = INTEGER: 85
...
UCD-SNMP-MIB::prErrorFlag.1 = INTEGER: 1
UCD-SNMP-MIB::prErrorFlag.2 = INTEGER: 0
...
UCD-SNMP-MIB::prErrMessage.1 = STRING: No proc process running.
UCD-SNMP-MIB::prErrMessage.2 = STRING:
...
33
B) XML Data Query의 TAG 형식 – XML의 SNMP를 조회하기 최소한의 TAG는 다음과 같다.
<interface>
<name>이름</name>
<oid_index>INDEX_OID</oid_index>
<fields>
<prIndex>
<name>Index</name>
<method>walk</method>
<source>value</source>
<direction>input</direction>
<oid> .1.3.6.1.4.1.2021.2.1.1</oid>
</prIndex>
<prNames> … </prNames>
…
</fields>
</interface>
※ 가장 많이 쓰는 형태이지만 좀더 자세한 옵션을 알고 싶으면 Cacti Manual을 참고
C) XML작성
[root:/etc]cd /var/www/html/cacti/resource/snmp_queries/
[root:/var/www/html/cacti/resource/snmp_queries] cat > net-snmp_ucd_process.xml
부록에 첨부된 net-snmp_ucd_process.xml을 붙여넣거나 편집한다.
^D
34
2. Cacti 등록하기
A) Data Template 만들기 – 아래와 같이 Template를 등록한다.
35
B) Graph Template 만들기
36
C) Data Queries 등록
“Associated Graph Templates”에서 ‘Add’를 눌러 다음과 같이 하여 앞서 만들었던
Graph와 Data Template와 연결 시켜준다.
37
D) Host(Device)에 추가하기 – Management -> Devices 추가하고자 하는 호스트를 선택후에
아래의 그림을 따라서 추가해본다.
- Data Queries추가
- Verbose Query를 클릭하여 해당되는 대상(프로세서) 몇 가지가 존재하는지 조회한다.
- 정상적으로 조회되면 아래와 디버그 메시지를 중앙에서 볼수있다.
- 우측 상단에서 “Create Graphs for this Host”를 클릭한다.
38
- Graph 추가하기 – 그래프를 만들고자 하는 객체를 선택하여 Create를 누른다.
E) 그래프
- Daily
- Weekly
39
- Error의 경우 – 테스트를 위해 추가했던 존재하지 않는 프로세서
40
마치며
처음 이 글을 남기고자 했을 때 최대한 간단하게 만들자 생각했던 내용이 너무 길어져
이번에도 끝마치지 못하고 다음으로 넘기게 되었다. 다음에 다룰 내용은 PHP(PHP-SNMP
모듈)를 이용하여 좀더 세밀하게 가공된 데이터의 경우와 좀더 다양한 디바이스에 Cacti를
적용하고자 한다. 이번에 또 마무리 하지 못한 것은 아쉽지만 2가지 문서를 통해서도
수많은 ‘관리자’의 고민을 어느 정도 해소 했으면 하는 바램을 가지며 2번째 내용을
마친다.
읽게 될 분들에게 먼저 양해를 구했어야 하지만 내용이 존대어로 작성되지 않는 것은 이
글들을 남기는 가장 큰 목적이 “제 스스로에게 남기는 일기”라서 그렇다고 이해하여
주셨으면 좋겠습니다. 10여년 컴퓨터라는 것을 가지고 수많은 일들을 해왔지만 그
발전속도를 기억력은 따라가지 못하더군요. 어느 순간 일기처럼 지금까지 해왔던 일들을
남기는 버릇이 생기더군요. 또한 틀린 글이나 내용이 있더라도 이해하여 주시기 바랍니다.
41
부록
1. snmpd.conf
####################################################################
#
# snmpd.conf
#
# - created by the snmpconf configuration program
#
####################################################################
# SECTION: System Information Setup
#
# This section defines some of the information reported in
# the "system" mib group in the mibII tree.
# syslocation: The [typically physical] location of the system.
# arguments: location_string
# 장비의 위치
syslocation "MK Computer Center"
# sysservices: The proper value for the sysServices object.
# arguments: sysservices_number
sysservices 79
# syscontact: The contact information for the administrator
# 관리자 이 메일 주소
syscontact root@localhost
####################################################################
# SECTION: Access Control Setup
#
# This section defines who is allowed to talk to your running
# snmp agent.
# rocommunity: a SNMPv1/SNMPv2c read-only access community name
# arguments: community [default|hostname|network/bits] [oid]
# readonly community 정보
rocommunity mycom 203.***.***.**
# rouser: a SNMPv3 read-only user
# arguments: user [noauth|auth|priv] [restriction_oid]
42
# 검증
13
rouser mycom noauth
####################################################################
# SECTION: Trap Destinations
#
# Here we define who the agent will send traps to.
# authtrapenable: Should we send traps when authentication failures occur
# arguments: 1 | 2 (1 = yes, 2 = no)
authtrapenable 1
# trapcommunity: Default trap sink community to use
# arguments: community-string
# trap community 이름
trapcommunity mycom
# trapsink: A SNMPv1 trap receiver
# arguments: host [community] [portnum]
# SNMP Version 1 trap 정보를 보낼 서버 정보
trapsink 203.***.***.** mycom
# informsink: A SNMPv2c inform (acknowledged trap) receiver
# arguments: host [community] [portnum]
# SNMP Version 2 trap 정보를 보낼 서버 정보
informsink 203.***.***.** mycom
# trap2sink: A SNMPv2c trap receiver
# arguments: host [community] [portnum]
# SNMP Version 2 trap 정보를 보낼 서버 정보
trap2sink 203.***.***.** mycom
####################################################################
# SECTION: Monitor Various Aspects of the Running Host
#
# The following check up on various aspects of a host.
# proc: Check for processes that should be running.
# proc NAME [MAX=0] [MIN=0]
#
# NAME: the name of the process to check for. It must match
# exactly (ie, http will not find httpd processes).
# MAX: the maximum number allowed to be running. Defaults to 0.
43
# MIN: the minimum number to be running. Defaults to 0.
#
# The results are reported in the prTable section of the UCD-SNMP-MIB tree
# Special Case: When the min and max numbers are both 0, it assumes
14
# you want a max of infinity and a min of 1.
# 추가적으로 모니터링 하고 싶은 값
# cpu load
load 20 20 20
# process
proc "smbd"
proc "tnslsnr"
proc "oracle"
# 디스크 파티션
disk /
disk /home
disk /tmp
2. snmpd.conf (linux)
# Following entries were added by HP Insight Management Agents at
# Thu Jan 26 14:46:39 KST 2006
dlmod cmaX /usr/lib/libcmaX.so
rwcommunity y2Aj4CihBd9 127.0.0.1
syscontact System Admin < root@localhost>
syslocation MK Computer Center
## sec.name source community
com2sec admin 203.***.***.** mycom
#com2sec mynetwork NETWORK/24 COMMUNITY
## group.name sec.model sec.name
#group MyRWGroup any local
group admingroup v1 admin
group admingroup v2c admin
group admingroup usm admin
#group MyROGroup any mynetwork
44
#
#group MyRWGroup any otherv3user
#...
## incl/excl subtree mask
view all included .1 80
## context sec.model se c.level prefix read write notif
access admingroup "" any noauth exact all all all
#access MyROGroup "" any noauth 0 all none none
#access MyRWGroup "" any noauth 0 all all all
# 추가적으로 모니터링 하고 싶은 값
proc mount.smbfs
proc smbd
proc nmbd
proc automount
disk /
disk /home
load 60 40 30
45
3. net-snmp_ucd_process.xml
<interface>
<name>UCD SNMP Custom Process Information</name>
<index_order_type>numeric</index_order_type>
<oid_index>.1.3.6.1.4.1.2021.2.1.1</oid_index>
<index_title_format>|chosen_order_field|</index_title_format>
<fields>
<prIndex>
<name>Index</name>
<method>walk</method>
<source>value</source>
<direction>input</direction>
<oid>.1.3.6.1.4.1.2021.2.1.1</oid>
</prIndex>
<prNames>
<name>Name</name>
<method>walk</method>
<source>value</source>
<direction>input</direction>
<oid>.1.3.6.1.4.1.2021.2.1.2</oid>
</prNames>
<prCount>
<name>Total Count</name>
<method>walk</method>
<source>value</source>
<direction>output</direction>
<oid>.1.3.6.1.4.1.2021.2.1.5</oid>
</prCount>
<prErrorFlag>
<name>Error Flag</name>
<method>walk</method>
<source>value</source>
<direction>output</direction>
<oid>.1.3.6.1.4.1.2021.2.1.100</oid>
</prErrorFlag>
46
<prErrMessage>
<name>Error Message</name>
<method>walk</method>
<source>value</source>
<direction>output</direction>
<oid>.1.3.6.1.4.1.2021.2.1.101</oid>
</prErrMessage>
</fields>
</interface>