cacti

네트워크 모니터링 소프트웨어 – cacti

  1. 공식 홈페이지(영문): http://www.cacti.net/
  2. 사용자 홈페이지(영문): http://www.cactiusers.org/
  3. 한글 자료도 소수 있지만 설치에서 몇가지 자료 등록 정도만 있다. 플러그인에 대해 언급된 것이 하나도 없음.

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 설치

  1. 관련 패키지를 설치한다. cacti를 패키지로 설치하고(설치 경로는 /usr/share/cacti) 그 위에 소스 덮어씌우는게 제일 편하다.; 패키지 설치시 log/ 디렉토리가 /var/cacti/ 로 링크가 걸려있으므로 편한데로 처리할 것(링크 삭제 후 덮어씌우던지, 그냥 덮어씌우던지..)
    1. 패키지로 설치시
      1. yum -y cacti rrdtool net-snmp-utils mysql-server mysql-client apache php php-snmp php-mysql
    2. 패키지를 소스로 덮어씌운 뒤 안 쓰이는 파일은 다음과 같다.
      • /etc/cacti/db.conf
  2. cacti 다운로드 http://www.cacti.net/downloads/cacti-0.8.7b.tar.gz
  3. 적당한 위치에 압축을 푼다. 웹에서 접근 가능하도록 설정
    1. /var/www/ 밑에 압축을 푸는 방법
    2. 적당한 위치에 풀고(예를 들면 /usr/share/cacti/ )
      1. 아파치 설정(패키지 설치를 했다면 /etc/httpd/conf.d/cacti 파일을 다음과 같이 수정)
        1. #
          # 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>

  4.  mysql 설정
    1. mysqladmin -u root ‘root mysql 패스워드
    2. mysqladmin -u root -p create cacti
    3. mysql -u root -p cacti < /usr/share/cacti/cacti.sql
    4. mysql -u root -p mysql
    5. GRANT ALL ON cacti.* TO cacti IDENTIFIED BY ‘패스워드‘;
    6. flush privileges;
  5. cacti mysql 설정
    1. include/config.php 에서
      1. $database_username과 $database_password를 적절히 수정
  6. OS cacti 계정 생성
    1. 패키지 설치시 자동 생성.
    2. icmp ping 을 보내려면 cacti를 root 권한으로 실행해야 하므로 mysql 접속만 제대로 되면 신경 안 써도 되는 부분.
  7. 한글 출력
    1. 한글 지원하는 트루타입 폰트(ttf)를 /usr/share/rrdtool/fonts/ 에 추가한다. cacti Settings – paths – RRDTool Default Font Path에 해당 폰트 경로를 적어놓아야 한다. (예 : /usr/share/rrdtool/fonts/gulim.ttf )
    2. include/config.php 에 다음과 같은 내용을 추가한다. 안 하면 그래프의 한글이 깨져 나온다.
      1. putenv(“LANG=ko_KR.UTF-8”);
    3. 그러나, 위 조치를 취해도 Management – Data Sources 등에서 한글이 깨지는 경우가 있다. config.php include를 하지 않는 것도 아닌데.. 원인 파악 후 수정 예정
  8. 스케쥴러 등록 : 패키지로 설치했을 경우 /etc/cron.d/cacti 파일이 생성되어있다.
    1. 주석처리 되어있으니
      1. service crond reload
    2. icmp ping을 쓰고 싶으면 root 권한으로 실행해야 한다.
      1. */5 * * * *     cacti    /usr/bin/php /usr/share/cacti/poller.php > /dev/null 2>&1
      1. */5 * * * *     root    /usr/bin/php /usr/share/cacti/poller.php > /dev/null 2>&1
      1. 로 변경할 것.
  9. 최종점검
    1. 소유자 설정 : 그냥 압축을 풀었으면 파일 소유자가 root:root가 되어있을 수 있다.
      1. 소유자를 cacti 계정 만들었으면
        1. chown -Rf cacti:apache ./
    2. 권한 설정 : rra 권한 설정을 하지 않으면 그래프가 자동으로 생성 안 됨. 606 이어도 될거 같은데 확실하게 동작하는 것을 확인한 것은 777 권한이었음.
      1. chmod -Rf 777 rra/

cacti 설정

  1. http://설치호스트주소/cacti 로 접속
    1. cacti01.jpg
  2. 새로 설치
    1. cacti02.jpg
  3. 경로 설정 : 기본으로 적힌 값으로 전부 FOUND가 떠 있으면 다음으로 넘어간다. NOT FOUND가 떠 있는 항목은 해당 파일 위치를 찾아 적어서 FOUND
    표시가 나오도록 할 것.
    1. cacti03.jpg
  4. 첫 로그인
    1. User Name : admin
    2. Password : admin
    3. 첫 로그인을 하면 비밀번호를 바꾸라고 나온다. 비밀번호로 사용할 문자를 두번 입력하면 cacti 메인 화면으로 들어감.

플러그인 사용

  1. 모니터링 값이 특정 임계값 이상/이하로 변화시 메일을 전송하거나, 소리를 내주는 각종 유용한 플러그인이 있음.
  2. 이 문서에서 PIA의 설치는
    1. http://cactiusers.org/wiki/PluginArchitectureInstall
    2. http://cactiusers.org/forums/viewtopic.php?t=1355&highlight=install+steps 를 참조했다.
  3. PIA down http://cactiusers.org/downloads/cacti-plugin-arch.tar.gz
  4. 위 파일을 받아 압축을 풀면 cacti-plugin-arch 디렉토리에 cacti-plugin-0.8.7b-PA-v2.0.diff 가 있음. cacti 디렉토리로 옮긴 후 다음의 패치를 실행.
    1. patch -p1 -N < cacti-plugin-0.8.7b-PA-v2.0.diff
  5. 2008/03/13 11:10:50 현재, cacti 0.87b에 PIA 2.0 적용 후 include/plugins.php를 수정해야함. 안 그러면 기본 경로에 cti/ 가 들어가 이미지가 깨지고 정상적인 동작을 하지 않음.
    1. — include/plugins.php.orig 2008-02-25 09:47:35.000000000 -0800
    2. +++ include/plugins.php 2008-02-25 09:48:12.000000000 -0800
    3. @@ -32,13 +32,7 @@
    4. }
    5. }
    6.  
    7. -if (isset($_SERVER[‘DOCUMENT_ROOT’]) && isset($_SERVER[‘REMOTE_ADDR’])) {
    8. – $config[‘url_path’] = substr(__FILE__, strlen($_SERVER[‘DOCUMENT_ROOT’]), strlen(__FILE__) – strlen($_SERVER[‘DOCUMENT_ROOT’]) – strlen(‘include/plugins.php’));
    9. – db_execute(“REPLACE INTO settings (name, value) VALUES (‘url_path’, ‘” . $config[‘url_path’] . “‘)”);
    10. -} else {
    11. – $config[‘url_path’] = db_fetch_cell(“SELECT value FROM settings WHERE name = ‘url_path’”);
    12. -}
    13. +$config[‘url_path’] = ‘/cacti/’;
    14. define(‘URL_PATH’, $config[‘url_path’]);
    1. ‘표시는 지우고 ‘+‘표시된 줄은 추가하면 된다. if 문 블럭 삭제하고 $config[‘url_path’] = ‘/cacti/’; 추가하라는 소리임.
  6. 사용하고자 하는 플러그인을 plugins 디렉토리에 풀어놓는다. 이 때, 플러그인 디렉토리명을 만들고 그 안에 해당 플러그인의 파일을 넣어두면 된다. 예를 들어 manage 플러그인을 사용할 경우,
    • plugins/manage/
    • 디렉토리에 풀어놓으면 된다. tar.gz 형식 플러그인 파일이면 그냥 압축풀면 된다.
  7. include/config.php 에 다음의 내용을 추가한다.
    1. $plugins = array();
    2. $plugins[] = ‘settings’;
      $plugins[] = ‘thold’;
      $plugins[] = ‘update’;
    1. plugins/ 디렉토리 밑에 있는 플러그인들의 디렉토리명을 적어놓으면 됨. 위의 예는 settings, thold, update 등의 플러그인을 설치했다는 의미이다.
  8. 7번까지 한 후 cacti를 웹 브라우져에서 열어보면 별다른 변화가 없다. User Management 에서 아무 사용자를 선택해(여기서는 admin) Realm Permissions 항목을 보자.
    1. 플러그인 설치 후 User ManagementRealm Permissions

      cacti05.jpg

    2. 새로 설치한 플러그인에 대해 권한을 줘야 한다. 권한을 주고 나면 제일 위 탭 표시 부분에 console, graphs 이외에 각 플러그인의 탭이 보일 것이다.

주요 플러그인 설치

  1. thold : 모니터링 값에 이상이 있을 때 메일로 알림. settings 플러그인을 먼저 설치해야 쓸 수 있다.
    1. cacti 플러그인 thold 실행화면

      cacti07.jpg

  2. manage : 모니터링 디바이스를 아이콘으로 표시해 준다. 이상이 있으면 소리를 내어 알려줌(웹 브라우저에 미디어 플레이어 등의 설정이 되어있어야 하지만. 윈도에서 IE는 그냥 된다. FireFox 등은 퀵타임플레이어를 설치하라는 등의 안내가 나옴).
    1. cacti 플러그인 monitor 실행 화면.

      cacti06.jpg

thold 설치

  • 소스가 잘못되어 있는건지, 다른 이유가 있는지 모르겠으나 2008/03/17  현재 plugins/thold/check-thold.php 수정이 필요함.
  1. plugins/thold/check-thold.php 에서 함수 선언부분 function logger(… 을 전부 지운다. plugins/thold/thold-functions.php 에 해당 함수를 선언해두었기 때문에 그대로 두면 충돌이 나서 실행 안됨.
  2. plugins/thold/check-thold.php 에서 <?php 이후 주석이 끝나고 바로 exit; 가 나온다. 이러면 이 스크립트는 실행이 안되는 것과 마찬가지.  ?> 앞으로 옮겨놓자.
    1.                                         fwrite($handle, $logout);
                                             fclose($handle);
                                     }
                             }
                     }
             }
      }
    2. exit;
    3. ?>

관리 대상 등록하기

요구사항

  • 관리 대상에서 snmpd를 지원해야 하며, 정보 공개 설정을 해두어야 한다. 이건 snmpd 문서를 참조. 이 문서는 snmp 클라이언트에서 모든 정보를 받아올 수 있다고 가정한다.

장치 추가하기

  1. console – Management – Devices – Add
    1. add 위치

      cacti08.jpg

  2. Devices [new]
    1. Description : 장치에 대한 설명. 예) ‘스위치’, ‘라우터’, ‘내 컴퓨터’
    2. Hostname : 장치 주소. hostname 혹은 IP 주소를 적는다.
    3. Host Template : 장치에 근접한 템플릿을 선택. 잘 모르겠으면 ‘Generic SNMP-enabled Host’ 등을 선택
    4. Notes : 장치에 대한 설명을 길게 적을 수 있음.
    5. Disable Host : 해당 장치에 대한 모니터링을 끈다.
    6. Monitor Host : monitor 플러그인을 설치하면 나타나는 항목. 체크하면 monitor 탭에서 해당 장치를 볼 수 있다.
    7. Down Host Message : ..이게 무슨 플러그인을 설치해야 나오는거더라(thold로 추정).. 여하간 기본으로는 없음.
    8. Downed Device Detection : NONE, Ping and SNMP, SNMP, PING 중에 선택.
    9. Ping Method : 핑 종류를 선택. icmp, tcp, udp 핑이 있다.
      1. 경험상 udp 핑은 방화벽에 막히는 경우가 있었다.
      2. icmp 핑은 cacti poller를 root 권한으로 실행해야 한다.
    10. Ping Port : 기본값은 23
    11. Ping Timeout Value : 응답을 언제까지 기다리나. 기본값은 400ms
    12. Ping Retry Count : Timeout 되었을 때 몇 번 더 시도하나. 기본값은 1
    13. SNMP Version : Version 1/2/3 중에 선택. 보안상 1은 안 쓰는게 좋고, 2가 일반적으로 널리 쓰인다. 3은 보다 더 보안 강화된..거 같음. SNMP 부분은 잘 모르니 패스.
    14. SNMP Community : 대상 서버 snmpd 커뮤니티값과 일치해야 정보를 긁어올 수 있다.
    15. SNMP Port : 대상 호스트의 SNMP 포트값. 기본은 161.
    16. Maximum OID’s Per Get Request : spine(바이너리 poller) 사용시 적용되는 값이라는 것 같다.
  3. 정상적으로 등록되었으면 Devices 화면에서 볼 수 있다. Status에 Up/Down/Unknown 등으로 표시되는데 이 표시는 갱신이 늦을 수 있으니 좀 기다리자.
    1. 성미급한 사람이라면 장치 이름을 클릭해 에디트 모드로 들어간다.
    2. 가장 밑에 Associated Data Queries 테이블을 보면 SNMP -Interface Statistics 가 있다(없을 수도 있고).
      1. Verbose Query 클릭
    3. 페이지가 리로딩 되는데 Data Query Debug Information 테이블이 생겼을 것이다. 내용을 확인해보자.
      1. 정상적으로 가동하는 장비의 경우 가장 윗쪽 장비명 아래에 다음과 같이 갱신되니 이걸로 확인하는게 더 빠를 수도.
        1. SNMP 쿼리에 대한 응답을 정상적으로 받았을 경우.

          cacti09.jpg

      2. 위 스샷에서 오른쪽에 보이는 Create Graphs for this Host 를 클릭하면 쉽게 그래프를 추가할 수 있다. 그건 다음 절에서 설명하겠다.

그래프 등록

  1. 그래프를 추가하고 싶으면 Devices 등록을 먼저 한 후 장치 이름을 클릭해 Edit 화면으로 들어간다.
  2. Create Graphs for this Host 클릭
  3. Graph Templates와 Data Query 테이블이 있는데, SNMP 지원하는 장비는 Date Query 쪽에 여러 항목이 보인다. 항목을 클릭 후 페이지 하단의 Select a graph type 중에서 적절한 타입을 선택 후 create.
  4. 페이지 좌측 메뉴에서 Graph Management를 클릭해 좀 전에 생성한 그래프 Name 을 클릭.
    1. 화면 오른쪽 위 Turn Off Graph Debug Mode. 를 클릭.
    2. 다음은 등록한지 좀 된(..) 그래프인데, 아래와 같은 그래프가 나오면 된다. 오른쪽 하단에 RRDTool Says: Ok 가 뜨면 된다.

      cacti10.jpg

    3. 만일 안 된다면 rra/ 디렉토리 소유자/권한 문제인 경우가 있으니 확인 할 것.
    4. 그래프는 15분 정도(poller 세 번 정도 실행되는 시간) 기다려야 그려지니 기다릴 것.

이 글은 스프링노트에서 작성되었습니다.


게시됨

카테고리

작성자

태그:

댓글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.