네트워크 모니터링 소프트웨어 – cacti
- 공식 홈페이지(영문): http://www.cacti.net/
- 사용자 홈페이지(영문): http://www.cactiusers.org/
- 한글 자료도 소수 있지만 설치에서 몇가지 자료 등록 정도만 있다. 플러그인에 대해 언급된 것이 하나도 없음.
cacti 소개
- ping, snmp를 이용한 모니터링
- 쉬운 인터페이스 : MRTG, nagios가 설정파일을 이리저리 만져야 하는데 반해 웹 인터페이스에서 몇 번 만져주는 것으로 모니터링 설정 가능.
- 플러그인 확장 : 기본 cacti는 그다지 기능이 많지 않으나 PIA(Plugin Architecture) 패치를 하면 플러그인을 사용할 수 있 각 플러그인을 사용하면 nagios에 버금가는 기능을 사용할 수 있음.
- 동작 원리는 운영체제의 스케쥴러에서 일정 시간마다(기본값은 5분) poller 스크립트를 실행해 각 서버의 정보를 가져와 DB에 저장, 그 값을 참조해 rrd 그래프를 그리는 것 같음.
- 모니터할 호스트가 많을 경우 poller 스크립트를 바이너리로 대체 가능. 성능은 기존 스크립트 사용에 비해 바이너리로 실행할 경우가 4배 정도 빠르다(기본으로 제공하지 않으며, 소스 받아와 컴파일을 해야함).
- 단점으로, PIA을 비롯한 플러그인들은 정식 배포 버전을 가져다 사용해도 소스 수정을 하지 않으면 바로 사용하기 어려운 점이 있다.
설치
요구사항
- APM 환경 + 스케쥴러(cron 등) + ping + net-snmpd + net-snmpd-devel
- 리눅스, 윈도든 상관없이 돌아감.
- 똑같이 돌아간다는 이야기는 아님, 핑 바이너리 실행권한 등이 차이점이 많음.
- 이 문서는 리눅스 Fedora에서 cacti 패키지 설치 후 그 위에 소스를 덮어 씌우는 것으로 설명한다
- 그 이유는 cacti 계정 생성, 아파치 설정 등록, 관련 패키지 설치가 편리하기 때문임.
- Fedora 패키지를 그대로 쓰면 ping 기능이 빠져있고, 버전이 0.86c로 낮다.
- 설치위치는 /usr/share/cacti 로 가정한다. 별다른 언급 없이 경로명이 나오면 이 디렉토리가 홈 디렉토리임
- 예) rra/ : /usr/share/cacti/rra/ 를 뜻함
패키지 설치
- fedora, debian 등에 패키지가 있음
- 패키지 설치 시 보안문제로 ping 기능 등이 빠져있음. 설정 파일 위치도 배포본 규칙을 따름.
- 페도라 패키지로 운영시 모든 기능을 쓸 수 없으므로 따라서 여기에서 다루지 않는다.
소스설치
cacti 설치
- 관련 패키지를 설치한다. cacti를 패키지로 설치하고(설치 경로는 /usr/share/cacti) 그 위에 소스 덮어씌우는게 제일 편하다.; 패키지 설치시 log/ 디렉토리가 /var/cacti/ 로 링크가 걸려있으므로 편한데로 처리할 것(링크 삭제 후 덮어씌우던지, 그냥 덮어씌우던지..)
- 패키지로 설치시
- yum -y cacti rrdtool net-snmp-utils mysql-server mysql-client apache php php-snmp php-mysql
- 패키지를 소스로 덮어씌운 뒤 안 쓰이는 파일은 다음과 같다.
- /etc/cacti/db.conf
- 패키지로 설치시
- cacti 다운로드 http://www.cacti.net/downloads/cacti-0.8.7b.tar.gz
- 적당한 위치에 압축을 푼다. 웹에서 접근 가능하도록 설정
- /var/www/ 밑에 압축을 푸는 방법
- 적당한 위치에 풀고(예를 들면 /usr/share/cacti/ )
- 아파치 설정(패키지 설치를 했다면 /etc/httpd/conf.d/cacti 파일을 다음과 같이 수정)
- #
# Cacti: An rrd based graphing tool
#
Alias /cacti /usr/share/cacti<Directory /usr/share/cacti/>
Order Deny,Allow
# Deny from all
# Allow from 127.0.0.1
Allow from all # 외부에서 접근 가능하도록 설정
</Directory>
- #
- 아파치 설정(패키지 설치를 했다면 /etc/httpd/conf.d/cacti 파일을 다음과 같이 수정)
- mysql 설정
- mysqladmin -u root ‘root mysql 패스워드‘
- mysqladmin -u root -p create cacti
- mysql -u root -p cacti < /usr/share/cacti/cacti.sql
- mysql -u root -p mysql
- GRANT ALL ON cacti.* TO cacti IDENTIFIED BY ‘패스워드‘;
- flush privileges;
- cacti mysql 설정
- include/config.php 에서
- $database_username과 $database_password를 적절히 수정
- include/config.php 에서
- OS cacti 계정 생성
- 패키지 설치시 자동 생성.
- icmp ping 을 보내려면 cacti를 root 권한으로 실행해야 하므로 mysql 접속만 제대로 되면 신경 안 써도 되는 부분.
- 한글 출력
- 한글 지원하는 트루타입 폰트(ttf)를 /usr/share/rrdtool/fonts/ 에 추가한다. cacti Settings – paths – RRDTool Default Font Path에 해당 폰트 경로를 적어놓아야 한다. (예 : /usr/share/rrdtool/fonts/gulim.ttf )
- include/config.php 에 다음과 같은 내용을 추가한다. 안 하면 그래프의 한글이 깨져 나온다.
- putenv(“LANG=ko_KR.UTF-8”);
- 그러나, 위 조치를 취해도 Management – Data Sources 등에서 한글이 깨지는 경우가 있다. config.php include를 하지 않는 것도 아닌데.. 원인 파악 후 수정 예정
- 스케쥴러 등록 : 패키지로 설치했을 경우 /etc/cron.d/cacti 파일이 생성되어있다.
- 주석처리 되어있으니
- service crond reload
- icmp ping을 쓰고 싶으면 root 권한으로 실행해야 한다.
- */5 * * * * cacti /usr/bin/php /usr/share/cacti/poller.php > /dev/null 2>&1
- 를
- */5 * * * * root /usr/bin/php /usr/share/cacti/poller.php > /dev/null 2>&1
- 로 변경할 것.
- 주석처리 되어있으니
- 최종점검
- 소유자 설정 : 그냥 압축을 풀었으면 파일 소유자가 root:root가 되어있을 수 있다.
- 소유자를 cacti 계정 만들었으면
- chown -Rf cacti:apache ./
- 소유자를 cacti 계정 만들었으면
- 권한 설정 : rra 권한 설정을 하지 않으면 그래프가 자동으로 생성 안 됨. 606 이어도 될거 같은데 확실하게 동작하는 것을 확인한 것은 777 권한이었음.
- chmod -Rf 777 rra/
- 소유자 설정 : 그냥 압축을 풀었으면 파일 소유자가 root:root가 되어있을 수 있다.
cacti 설정
- http://설치호스트주소/cacti 로 접속
- 새로 설치
- 경로 설정 : 기본으로 적힌 값으로 전부 FOUND가 떠 있으면 다음으로 넘어간다. NOT FOUND가 떠 있는 항목은 해당 파일 위치를 찾아 적어서 FOUND
표시가 나오도록 할 것.
- 첫 로그인
- User Name : admin
- Password : admin
- 첫 로그인을 하면 비밀번호를 바꾸라고 나온다. 비밀번호로 사용할 문자를 두번 입력하면 cacti 메인 화면으로 들어감.
플러그인 사용
- 모니터링 값이 특정 임계값 이상/이하로 변화시 메일을 전송하거나, 소리를 내주는 각종 유용한 플러그인이 있음.
- 이 문서에서 PIA의 설치는
- PIA down http://cactiusers.org/downloads/cacti-plugin-arch.tar.gz
- 위 파일을 받아 압축을 풀면 cacti-plugin-arch 디렉토리에 cacti-plugin-0.8.7b-PA-v2.0.diff 가 있음. cacti 디렉토리로 옮긴 후 다음의 패치를 실행.
- patch -p1 -N < cacti-plugin-0.8.7b-PA-v2.0.diff
- 2008/03/13 11:10:50 현재, cacti 0.87b에 PIA 2.0 적용 후 include/plugins.php를 수정해야함. 안 그러면 기본 경로에 cti/ 가 들어가 이미지가 깨지고 정상적인 동작을 하지 않음.
- — include/plugins.php.orig 2008-02-25 09:47:35.000000000 -0800
- +++ include/plugins.php 2008-02-25 09:48:12.000000000 -0800
- @@ -32,13 +32,7 @@
- }
- }
- -if (isset($_SERVER[‘DOCUMENT_ROOT’]) && isset($_SERVER[‘REMOTE_ADDR’])) {
- – $config[‘url_path’] = substr(__FILE__, strlen($_SERVER[‘DOCUMENT_ROOT’]), strlen(__FILE__) – strlen($_SERVER[‘DOCUMENT_ROOT’]) – strlen(‘include/plugins.php’));
- – db_execute(“REPLACE INTO settings (name, value) VALUES (‘url_path’, ‘” . $config[‘url_path’] . “‘)”);
- -} else {
- – $config[‘url_path’] = db_fetch_cell(“SELECT value FROM settings WHERE name = ‘url_path’”);
- -}
- –
- +$config[‘url_path’] = ‘/cacti/’;
- define(‘URL_PATH’, $config[‘url_path’]);
- ‘–‘표시는 지우고 ‘+‘표시된 줄은 추가하면 된다. if 문 블럭 삭제하고 $config[‘url_path’] = ‘/cacti/’; 추가하라는 소리임.
- 사용하고자 하는 플러그인을 plugins 디렉토리에 풀어놓는다. 이 때, 플러그인 디렉토리명을 만들고 그 안에 해당 플러그인의 파일을 넣어두면 된다. 예를 들어 manage 플러그인을 사용할 경우,
- plugins/manage/
- 디렉토리에 풀어놓으면 된다. tar.gz 형식 플러그인 파일이면 그냥 압축풀면 된다.
- include/config.php 에 다음의 내용을 추가한다.
- $plugins = array();
- $plugins[] = ‘settings’;
$plugins[] = ‘thold’;
$plugins[] = ‘update’; - …
- plugins/ 디렉토리 밑에 있는 플러그인들의 디렉토리명을 적어놓으면 됨. 위의 예는 settings, thold, update 등의 플러그인을 설치했다는 의미이다.
- 7번까지 한 후 cacti를 웹 브라우져에서 열어보면 별다른 변화가 없다. User Management 에서 아무 사용자를 선택해(여기서는 admin) Realm Permissions 항목을 보자.
- 플러그인 설치 후 User Management – Realm Permissions
- 새로 설치한 플러그인에 대해 권한을 줘야 한다. 권한을 주고 나면 제일 위 탭 표시 부분에 console, graphs 이외에 각 플러그인의 탭이 보일 것이다.
- 플러그인 설치 후 User Management – Realm Permissions
주요 플러그인 설치
- thold : 모니터링 값에 이상이 있을 때 메일로 알림. settings 플러그인을 먼저 설치해야 쓸 수 있다.
- cacti 플러그인 thold 실행화면
- cacti 플러그인 thold 실행화면
- manage : 모니터링 디바이스를 아이콘으로 표시해 준다. 이상이 있으면 소리를 내어 알려줌(웹 브라우저에 미디어 플레이어 등의 설정이 되어있어야 하지만. 윈도에서 IE는 그냥 된다. FireFox 등은 퀵타임플레이어를 설치하라는 등의 안내가 나옴).
- cacti 플러그인 monitor 실행 화면.
- cacti 플러그인 monitor 실행 화면.
thold 설치
- 소스가 잘못되어 있는건지, 다른 이유가 있는지 모르겠으나 2008/03/17 현재 plugins/thold/check-thold.php 수정이 필요함.
- plugins/thold/check-thold.php 에서 함수 선언부분 function logger(… 을 전부 지운다. plugins/thold/thold-functions.php 에 해당 함수를 선언해두었기 때문에 그대로 두면 충돌이 나서 실행 안됨.
- plugins/thold/check-thold.php 에서 <?php 이후 주석이 끝나고 바로 exit; 가 나온다. 이러면 이 스크립트는 실행이 안되는 것과 마찬가지. ?> 앞으로 옮겨놓자.
- fwrite($handle, $logout);
fclose($handle);
}
}
}
}
} - exit;
- ?>
- fwrite($handle, $logout);
관리 대상 등록하기
요구사항
- 관리 대상에서 snmpd를 지원해야 하며, 정보 공개 설정을 해두어야 한다. 이건 snmpd 문서를 참조. 이 문서는 snmp 클라이언트에서 모든 정보를 받아올 수 있다고 가정한다.
장치 추가하기
- console – Management – Devices – Add
- add 위치
- add 위치
- Devices [new]
- Description : 장치에 대한 설명. 예) ‘스위치’, ‘라우터’, ‘내 컴퓨터’
- Hostname : 장치 주소. hostname 혹은 IP 주소를 적는다.
- Host Template : 장치에 근접한 템플릿을 선택. 잘 모르겠으면 ‘Generic SNMP-enabled Host’ 등을 선택
- Notes : 장치에 대한 설명을 길게 적을 수 있음.
- Disable Host : 해당 장치에 대한 모니터링을 끈다.
- Monitor Host : monitor 플러그인을 설치하면 나타나는 항목. 체크하면 monitor 탭에서 해당 장치를 볼 수 있다.
- Down Host Message : ..이게 무슨 플러그인을 설치해야 나오는거더라(thold로 추정).. 여하간 기본으로는 없음.
- Downed Device Detection : NONE, Ping and SNMP, SNMP, PING 중에 선택.
- Ping Method : 핑 종류를 선택. icmp, tcp, udp 핑이 있다.
- 경험상 udp 핑은 방화벽에 막히는 경우가 있었다.
- icmp 핑은 cacti poller를 root 권한으로 실행해야 한다.
- Ping Port : 기본값은 23
- Ping Timeout Value : 응답을 언제까지 기다리나. 기본값은 400ms
- Ping Retry Count : Timeout 되었을 때 몇 번 더 시도하나. 기본값은 1
- SNMP Version : Version 1/2/3 중에 선택. 보안상 1은 안 쓰는게 좋고, 2가 일반적으로 널리 쓰인다. 3은 보다 더 보안 강화된..거 같음. SNMP 부분은 잘 모르니 패스.
- SNMP Community : 대상 서버 snmpd 커뮤니티값과 일치해야 정보를 긁어올 수 있다.
- SNMP Port : 대상 호스트의 SNMP 포트값. 기본은 161.
- Maximum OID’s Per Get Request : spine(바이너리 poller) 사용시 적용되는 값이라는 것 같다.
- 정상적으로 등록되었으면 Devices 화면에서 볼 수 있다. Status에 Up/Down/Unknown 등으로 표시되는데 이 표시는 갱신이 늦을 수 있으니 좀 기다리자.
- 성미급한 사람이라면 장치 이름을 클릭해 에디트 모드로 들어간다.
- 가장 밑에 Associated Data Queries 테이블을 보면 SNMP -Interface Statistics 가 있다(없을 수도 있고).
- Verbose Query 클릭
- 페이지가 리로딩 되는데 Data Query Debug Information 테이블이 생겼을 것이다. 내용을 확인해보자.
- 정상적으로 가동하는 장비의 경우 가장 윗쪽 장비명 아래에 다음과 같이 갱신되니 이걸로 확인하는게 더 빠를 수도.
- SNMP 쿼리에 대한 응답을 정상적으로 받았을 경우.
- SNMP 쿼리에 대한 응답을 정상적으로 받았을 경우.
- 위 스샷에서 오른쪽에 보이는 Create Graphs for this Host 를 클릭하면 쉽게 그래프를 추가할 수 있다. 그건 다음 절에서 설명하겠다.
- 정상적으로 가동하는 장비의 경우 가장 윗쪽 장비명 아래에 다음과 같이 갱신되니 이걸로 확인하는게 더 빠를 수도.
그래프 등록
- 그래프를 추가하고 싶으면 Devices 등록을 먼저 한 후 장치 이름을 클릭해 Edit 화면으로 들어간다.
- Create Graphs for this Host 클릭
- Graph Templates와 Data Query 테이블이 있는데, SNMP 지원하는 장비는 Date Query 쪽에 여러 항목이 보인다. 항목을 클릭 후 페이지 하단의 Select a graph type 중에서 적절한 타입을 선택 후 create.
- 페이지 좌측 메뉴에서 Graph Management를 클릭해 좀 전에 생성한 그래프 Name 을 클릭.
- 화면 오른쪽 위 Turn Off Graph Debug Mode. 를 클릭.
- 다음은 등록한지 좀 된(..) 그래프인데, 아래와 같은 그래프가 나오면 된다. 오른쪽 하단에 RRDTool Says: Ok 가 뜨면 된다.
- 만일 안 된다면 rra/ 디렉토리 소유자/권한 문제인 경우가 있으니 확인 할 것.
- 그래프는 15분 정도(poller 세 번 정도 실행되는 시간) 기다려야 그려지니 기다릴 것.
이 글은 스프링노트에서 작성되었습니다.
답글 남기기