웹사이트 검색

Debian 9에 Cacti SNMP 모니터링 도구를 설치하는 방법


이 튜토리얼은 다음 OS 버전에 대해 존재합니다.

  • 데비안 10(버스터)
  • 데비안 9(스트레치)

이 페이지에서

  1. 초기 구성
  2. SNMP 서비스 구성
  3. Cacti-Spine 설치
  4. 선인장 설치

이 튜토리얼에서는 소스에서 Cacti 네트워크 모니터링 도구를 설치하고 구성하여 Debian 9 코드네임 Stretch에서 최신 버전을 얻는 방법을 보여줍니다.

Cacti는 RRDtool을 통해 네트워크 및 시스템 그래픽을 표시하도록 설계된 완전 오픈 소스인 웹 기반 네트워크 모니터링 도구입니다. SNMP(Simple Network Management Protocol) 프로토콜을 사용하여 스위치, 라우터, Linux, Unix 및 Windows 서버 또는 SNMP를 지원하는 다른 유형의 네트워크 기반 장치와 같은 네트워크 장치에서 네트워크 트래픽을 수집하고 모니터링합니다.

요구 사항

  • 베어 메탈 머신 또는 가상 사설 서버에 Debian 9 최소 설치.
  • 시스템 네트워크 인터페이스 카드 중 하나에 대해 구성된 고정 IP 주소입니다.\n
  • sudo를 통해 루트 계정 또는 루트 계정 권한이 있는 사용자에 대한 액세스.\n

초기 구성

소스에서 Cacti 설치를 시작하기 전에 먼저 시스템이 Cacti 컴파일 및 설치를 위한 모든 소프트웨어 요구 사항을 충족하는지 확인하십시오. 첫 번째 단계에서 루트 권한으로 편집할 데비안 소스 목록 파일을 열고 아래 발췌 파일에 표시된 대로 contrib 및 non-free 리포지토리를 추가합니다.

nano /etc/apt/sources.list

sources.list 파일 샘플:

deb http://ftp.ro.debian.org/debian/ stretch main contrib non-free
deb-src http://ftp.ro.debian.org/debian/ stretch main
 
deb http://security.debian.org/debian-security stretch/updates main contrib non-free
deb-src http://security.debian.org/debian-security stretch/updates main

파일 편집을 완료한 후 파일을 저장하고 닫은 다음 아래 명령을 실행하여 새 패키지를 통합하도록 시스템 리포지토리 및 소프트웨어 패키지를 업데이트합니다.

apt update
apt upgrade

다음으로 명령줄에서 시스템을 추가로 관리하는 데 사용할 필수 유틸리티를 설치하기 위해 새 명령을 실행합니다.

apt install wget patch unzip zip bash-completion

Cacti는 대부분 PHP 서버 측 프로그래밍 언어로 작성된 웹 기반 모니터링 도구입니다. Cacti php 파일 스크립트를 실행하려면 Apache HTTP 서버와 같은 웹 서버와 PHP 인터프리터가 시스템에 설치되어 작동해야 합니다. Cacti가 올바르게 실행하는 데 필요한 모든 필수 PHP 모듈과 함께 Apache 웹 서버 및 PHP 인터프리터를 설치하려면 서버 콘솔에서 다음 명령을 실행하십시오.

apt install apache2 libapache2-mod-php7.0 php7.0 php7.0-snmp php7.0-xml php7.0-mbstring php7.0-json php7.0-gd php7.0-gmp php7.0-zip php7.0-ldap php7.0-mcrypt

Apache 및 PHP를 설치한 후 루트 권한으로 다음 명령을 실행하여 웹 서버가 실행 중이고 포트 80에서 네트워크 연결을 수신하는지 테스트합니다.

netstat –tlpn

데비안 시스템에 netstat 네트워크 유틸리티가 기본적으로 설치되어 있지 않은 경우 아래 명령을 실행하여 설치하십시오.

apt install net-tools

netstat 명령 출력을 검사하면 Apache 데몬이 포트 80에서 들어오는 네트워크 연결을 수신 대기하고 있음을 알 수 있습니다.

UFW 방화벽 애플리케이션과 같이 시스템에 방화벽이 활성화된 경우 다음 명령을 실행하여 HTTP 트래픽이 방화벽을 통과하도록 허용하는 새 규칙을 추가해야 합니다.

ufw allow WWW

또는

ufw allow 80/tcp

마지막으로 아래 이미지와 같이 HTTP 프로토콜을 통해 Debian 머신 IP 주소를 방문하여 Apache 웹 서버 기본 웹 페이지가 클라이언트 브라우저에 표시될 수 있는지 테스트합니다. 컴퓨터 IP 주소를 모르는 경우 ifconfig 또는 ip a 명령을 실행하십시오. 이 설정에서 내 IP는 http://192.168.1.14입니다.

다음 단계에서는 file_uploads 변수가 활성화되고 PHP 시간대 설정이 올바르게 구성되고 시스템 물리적 위치와 일치하도록 PHP 기본 구성 파일을 추가로 변경해야 합니다. 편집을 위해 /etc/php/7.0/apache2/php.ini 파일을 열고 다음 줄이 다음과 같이 설정되어 있는지 확인합니다.

file_uploads = On
date.timezone = Europe/London

http://php.net/manual/en/timezones.php 링크에서 PHP 문서가 제공하는 시간대 목록을 참조하여 물리적 시간대에 따라 시간대 변수를 교체하십시오.

필요한 변경 사항을 적용한 후 php info 파일을 생성하고 Apache 데몬을 다시 시작하여 다음 명령을 실행하여 변경 사항을 적용합니다.

echo '<?php phpinfo(); ?>'| tee /var/www/html/info.php
systemctl restart apache2

다음 URL의 브라우저에서 php info 스크립트를 방문하여 PHP 시간대가 올바르게 구성되었는지 확인하십시오(아래 이미지 참조). 날짜 설정까지 아래로 스크롤하여 PHP 시간대 설정을 확인하십시오.

Cacti 모니터링 도구는 구성 및 수집된 데이터를 RDBMS 데이터베이스에 저장합니다. 이 튜토리얼에서는 MariaDB 데이터베이스 백엔드로 Cacti를 구성합니다. 아래 명령을 실행하여 MariaDB 데이터베이스와 mysql 데이터베이스에 액세스하는 데 필요한 PHP 모듈을 설치합니다.

apt install mariadb-server php7.0-mysql

MariaDB를 설치한 후 데몬이 실행 중인지 확인하고 netstat 명령을 실행하여 localhost, 포트 3306에서 네트워크 연결을 수신 대기합니다.

netstat –tlpn | grep mysql

그런 다음 MySQL 콘솔에 로그인하고 다음 명령을 실행하여 MariaDB root 계정을 보호합니다.

mysql -h localhost
use mysql;
update user set plugin='' where user='root';
flush privileges;
exit

다음 단계에서는 Debian Stretch 저장소의 설치 패키지에서 제공하는 mysql_secure_installation 스크립트를 실행하여 MariaDB를 보호합니다. 실행하는 동안 스크립트는 MySQL 루트 암호 변경, 익명 사용자 제거, 원격 루트 로그인 비활성화 및 테스트 데이터베이스 삭제와 같은 MariaDB 데이터베이스 보안을 위한 일련의 질문을 합니다. 아래 명령을 실행하여 스크립트를 실행하고 MySQL 데몬을 완전히 보호하기 위해 묻는 모든 질문에 예를 입력했는지 확인하십시오. 가이드를 제외하고 아래 스크립트 출력을 사용하십시오.

sudo mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
 
In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
 
Enter current password for root (enter for none):
OK, successfully used password, moving on...
 
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
 
You already have a root password set, so you can safely answer 'n'.
 
Change the root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!
 
 
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.
 
Remove anonymous users? [Y/n] y
 ... Success!
 
Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.
 
Disallow root login remotely? [Y/n] y
 ... Success!
 
By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
 
Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
 
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
 
Reload privilege tables now? [Y/n] y
 ... Success!
Cleaning up...
 
All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.
 
Thanks for using MariaDB!

MariaDB 보안을 테스트하려면 루트 암호 없이 콘솔에서 데이터베이스에 로그인을 시도하십시오. 루트 계정에 암호가 제공되지 않으면 데이터베이스에 대한 액세스가 거부되어야 합니다. 암호가 제공되면 아래 스크린샷과 같이 로그인 프로세스가 MySQL 콘솔에 부여되어야 합니다.

mysql -h localhost -u root
mysql -h localhost -u root –p

MariaDB 데이터베이스에 로그인한 상태에서 Cacti 설치를 위한 데이터베이스를 생성하고 다음 명령을 실행하여 cacti 데이터베이스를 관리하는 데 사용할 사용자를 생성합니다. 그에 따라 cacti 데이터베이스 사용자와 비밀번호를 바꾸십시오.

create database cacti;
grant all on cacti.* to 'cacti_user'@'localhost' identified by 'cacti_pass';
flush privileges;
exit

또한 아래 명령을 실행하여 cacti 데이터베이스 사용자에게 MySQL 시간대에 대한 선택 권한을 부여합니다. 이것은 Cacti의 최신 릴리스를 설치하고 실행하기 위한 새로운 요구 사항입니다.

mysql -u root -p mysql < /usr/share/mysql/mysql_test_data_timezone.sql
mysql -u root -p -e 'grant select on mysql.time_zone_name to '

다음 단계에서 MySQL 서버 기본 구성 파일을 열고 아래 샘플과 같이 다음 줄을 추가합니다.

nano /etc/mysql/mariadb.conf.d/50-server.cnf

50-server.cnf 파일의 맨 아래에 다음 행을 추가하십시오.

max_heap_table_size              = 98M
tmp_table_size               = 64M
join_buffer_size             = 64M
innodb_buffer_pool_size   = 485M
innodb_doublewrite           = off
innodb_additional_mem_pool_size  = 80M
innodb_flush_log_at_timeout  = 3
innodb_read_io_threads    = 32
innodb_write_io_threads   = 16

지금까지 변경한 모든 내용을 적용하려면 MySQL 및 Apache 데몬을 다시 시작하고 다음 명령을 실행하여 데몬이 실행 중인지 확인합니다.

systemctl restart mysql apache2
systemctl status mysql apache2

SNMP 서비스 구성

Cacti 웹 모니터링 서비스는 장치 데이터 및 통계를 수집하기 위해 SNMP 프로토콜을 사용합니다. SNMP 프로그램, SNMP 데몬 서비스 및 SNMP MIBS를 로컬 Debian 9 시스템에 설치하려면 루트 권한으로 다음 명령을 실행하십시오.

apt install snmp snmpd snmp-mibs-downloader

또한 Cacti에서 그래프 기능을 표시하는 데 사용하는 산업 표준 데이터 로깅 도구 RRDtool을 설치하십시오.

apt install rrdtool

다음으로 SNMP 구성 파일 /etc/snmp/snmp.conf를 편집하고 아래 이미지에 설명된 대로 줄 앞에 해시태그(#)를 추가하여 "mibs\ 줄에 주석을 추가합니다.

또한 편집을 위해 snmpd.conf 파일을 열어서 SNMP 데몬 원격 및 localhost 액세스를 구성하고 다음과 같이 아래 행을 검색하고 업데이트합니다.

nano /etc/snmp/snmpd.conf

모든 인터페이스에서 연결을 수신하려면 줄의 주석을 제거하십시오.

agentAddress udp:161,udp6:[::1]:161

snmp_string 암호를 통해 로컬 네트워크에 대한 SNMP 쿼리를 허용하려면 다음 행을 추가하십시오. snmp 커뮤니티 문자열 snmp_string 비밀번호와 네트워크 CIDR 주소를 적절히 교체합니다.

rocommunity snmp_string localhost
rocommunity snmp_string 192.168.1.0/25

선택적으로 서버에 대한 정보를 제공하기 위해 연락처 및 위치 변수를 수정할 수도 있습니다. 이 정보는 서버 세부 정보를 확인할 때 Cacti 알림 영역에 표시됩니다. 또한 시스템 호스트 이름, 커널 버전 및 시스템 가동 시간이 Cacti 알림 영역에 표시됩니다.

이 정보를 수정하려면 시스템 정보 섹션 아래의 sysLocation 및 sysContact 행을 편집하고 고유한 값을 추가하십시오. 기본적으로 sysLocation 및 sysContact에 대해 다음 값이 구성됩니다.

sysLocation Sitting on the Dock of the Bay
sysContact Me <>

snmpd.conf 파일을 적절하게 변경한 후 파일을 저장하고 닫은 다음 snmp 데몬을 다시 시작하여 아래 명령을 실행하여 변경 사항을 반영합니다. 그런 다음 snmpd 데몬 상태와 소유 포트가 수신 대기 상태인지 확인하십시오.

systemctl restart snmpd.service
systemctl status snmpd.service
netstat -tulpn| grep snmp

SNMP용 방화벽 포트 열기:

ufw allow 161/udp

SNMP 데몬이 예상대로 작동하는지 확인하고 localhost에 대한 메모리 트리 아래의 모든 SNMP 값을 검색하려면 아래 명령을 실행합니다.

snmpwalk -v 2c -c snmp_string localhost memory

선인장 척추 설치

Cacti-Spine은 더 빠른 실행 시간을 위해 C로 작성된 기본 cmd.php 폴러를 대체합니다. Debian 9의 소스에서 Cacti-Spine 풀러를 컴파일하고 설치하려면 먼저 다음 명령을 실행하여 필요한 모든 종속성을 시스템에 설치합니다.

apt install build-essential dos2unix dh-autoreconf help2man libssl-dev libmysql++-dev libmariadb-dev libmariadbclient-dev librrds-perl libsnmp-dev

다음으로 wget 유틸리티를 사용하여 최신 버전의 Cacti-Spine tar 압축 아카이브를 다운로드하고 tarball 아카이브를 추출한 다음 다음 명령을 실행하여 cacti-spine 추출 디렉토리로 들어갑니다.

wget https://www.cacti.net/downloads/spine/cacti-spine-latest.tar.gz
tar xfz cacti-spine-latest.tar.gz
cd cacti-spine-1.1.24/

이제 아래 명령을 실행하여 소스에서 Cacti-Spine 유틸리티를 컴파일하고 설치합니다.

./bootstrap
./configure
make
make install

Cacti-Spine은 /usr/local/spine/ 시스템 경로에 설치됩니다. Spine은 ICMP ping 요청을 지원하기 위해 spine 바이너리에 SUID 비트를 설정할 것을 권장합니다.

chown root:root /usr/local/spine/bin/spine
chmod +s /usr/local/spine/bin/spine

또한 아래 발췌 파일과 같이 구성 파일을 편집하여 Spine을 cacti 데이터베이스에 연결해야 합니다.

nano /usr/local/spine/etc/spine.conf

spine.conf 파일 샘플. 그에 따라 자격 증명을 바꿉니다. Cacti에 대해 구성된 것과 동일한 데이터베이스 자격 증명을 사용합니다.

DB_Host localhost
DB_Database cacti
DB_User user_cacti
DB_Pass pass_cacti
DB_Port 3306
DB_PreG 0

선인장 설치

Debian 9의 소스에서 Cacti를 설치하려면 먼저 최신 버전의 Cacti tarball 압축 아카이브를 다운로드하고 압축을 푼 다음, 다음 명령을 실행하여 추출된 모든 파일을 apache 웹 루트 경로에 복사합니다.

wget https://www.cacti.net/downloads/cacti-latest.tar.gz
tar xfz cacti-latest.tar.gz
cp -rf cacti-1.1.24/* /var/www/html/

다음 단계에서 cacti 구성 파일을 열고 아래 예제와 같이 MySQL cacti 데이터베이스 사용자 이름, 암호, 호스트 및 URL 경로를 적절히 반영하도록 다음 줄을 업데이트합니다.

nano /var/www/html/include/config.php

Cacti config.php 파일 샘플:

$database_type     = 'mysql';
$database_default  = 'cacti';
$database_hostname = 'localhost';
$database_username = 'cacti_user';
$database_password = 'cacti_pass';
$database_port     = '3306';
$database_ssl      = false;

아래로 스크롤하여 경로 변수를 "/cacti”에서 "/”로 변경합니다.

$url_path = '/';

다음으로 웹 서버 문서 루트 위치에 있는 cacti.sql 스크립트를 로드하여 cacti 데이터베이스를 채우고 아래 명령을 실행하여 cacti mysql 테이블을 확인해야 합니다.

mysql -u cacti_user cacti -p < /var/www/html/cacti.sql 
mysql -u cacti_user cacti -p -e 'show tables'

마지막으로, 웹 인터페이스에서 Cacti 설치를 시작하기 전에 아래 명령을 실행하여 Apache 웹 서버에 의해 설치된 기본 index.html 파일을 제거하고 Cacti용 로그 파일을 생성하고 Apache 런타임 사용자에게 cacti 설치 경로에 대한 전체 쓰기 권한을 허용합니다. .

rm /var/www/html/index.html
touch /var/www/html/log/cacti.log
chown -R www-data:www-data /var/www/html/

브라우저에서 시스템 IP 주소 또는 도메인 이름을 방문하고 다음 URL을 열어 웹 인터페이스를 통해 Cacti 설치를 시작하십시오.

첫 번째 화면에서 Accept GPL License Agreement를 체크하고 다음 버튼을 눌러 아래 스크린샷과 같이 계속 진행합니다.

다음 화면에서 아래로 스크롤하여 설치 프로그램이 모든 시스템 요구 사항을 통과했는지 확인하고 다음 버튼을 눌러 설치 프로세스를 진행합니다.

그런 다음 설치 유형으로 새 주 서버를 선택하고 다음 버튼을 클릭하여 계속합니다.

이제 cacti 설치 프로그램이 모든 중요한 바이너리 위치와 버전을 올바르게 감지하는지 확인하십시오. 또한 Spine 바이너리 경로를 /usr/local/spine/bin/spine으로 업데이트해야 합니다. 클래식 테마를 선택하고 다음 버튼을 눌러 계속할 수 있습니다.

다음 화면에서 설치 프로그램은 웹 서버가 cacti 설치 경로에 쓰기를 수행할 수 있는지 확인하기 위해 Apache 웹 루트 디렉토리 권한을 확인합니다. 필요한 모든 경로가 쓰기 가능하면 다음 버튼을 눌러 계속하십시오.

제공된 목록에서 모든 템플릿을 선택하고 마침 버튼을 누르면 설치가 완료됩니다.

설치 프로세스를 완료한 후 다음 기본 자격 증명을 사용하여 Cacti 웹 인터페이스에 로그인하고 다음 스크린샷과 같이 관리자 기본 암호를 강력한 새 암호로 바꿉니다.

사용자 이름: admin
비밀번호: admin

Cacti 웹 인터페이스에 로그인한 후 Console -> Configuration -> Settings -> Poller로 이동하여 아래 이미지와 같이 폴러 유형을 cmd.php에서 spine 바이너리로 변경합니다. 아래로 스크롤하고 저장 버튼을 눌러 변경 사항을 적용합니다.

그런 다음 콘솔 -> 구성 -> 설정 -> 경로로 이동하여 Cacti-Spine을 업데이트하고 구성 파일 경로를 /usr/local/spine/etc/spine.conf 경로로 설정하고 저장 버튼을 눌러 다음과 같이 구성을 적용합니다. 아래 이미지에 설명되어 있습니다.

SNMP를 통해 모니터링할 새 장치를 추가하려면 콘솔 -> 관리 -> 장치로 이동하여 아래 이미지와 같이 + 아이콘을 누르십시오. 시연을 위해 SNMP 프로토콜을 통해 Cacti에서 모니터링할 localhost 시스템을 추가합니다.

SNMP를 통해 모니터링할 새로 추가된 Linux 장치의 경우 장치에 대한 설명, 호스트 이름, FQDN 또는 모니터링되는 장치의 IP 주소를 추가하고 Local Linux Machine을 장치 템플릿으로 선택합니다. SNMP 옵션에서 적절한 SNMP 버전(이 경우 버전 2 사용)을 선택하고 아래 이미지에 설명된 대로 장치 SNMP 커뮤니티 문자열을 작성합니다. SNMP 포트가 변경되지 않은 경우 포트 값을 기본값으로 두고 완료되면 아래로 스크롤하여 만들기 버튼을 눌러 Cacti 데이터베이스에 장치를 추가하여 모니터링합니다.

장치가 Cacti 데이터베이스에 추가된 후 장치가 제대로 감지되고 쿼리된 경우 장치 페이지 상단에 SNMP 요약이 표시됩니다. 이 장치에 대한 RRDTool SNMP 그래프를 생성하려면 이 장치 링크에 대한 그래프 생성을 클릭하고 추가로 검사할 그래프 템플릿을 확인하고 생성 버튼을 눌러 다음 화면으로 이동한 다음 생성 버튼을 다시 눌러 완료합니다. , 다음 이미지와 같이.

그래프를 시각화하려면 Console -> Management -> Devices로 이동하여 추가 작업을 수행할 장치를 확인하고 작업 메뉴에서 Place on a Tree(Default Tree)를 선택합니다.

새 화면에서 대상 분기를 기본값으로 두고 계속 버튼을 눌러 아래 이미지에 설명된 대로 프로세스를 완료합니다.

마지막으로 Cacti 폴러가 모니터링되는 장치에 대한 데이터 수집을 시작하려면 5분마다 SNMP를 통해 장치를 쿼리하는 새로운 cron 작업을 추가해야 합니다. 아래 명령을 실행하여 Apache 런타임 사용자가 소유하고 실행할 예약된 작업을 추가합니다.

crontab –u www-data –e

Crontab 작업 라인:

*/5 * * * * /usr/bin/php /var/www/html/poller.php > /var/www/html/log/cron.log 2>&1

풀러 cronjob을 추가한 후 Cacti가 데이터를 수집할 수 있도록 약 30분 정도 기다린 다음 Cacti 웹 인터페이스의 그래프 탭으로 이동합니다. 기본 트리를 확장하면 모니터링되는 컴퓨터에서 수집된 그래프가 아래 스크린샷과 같이 표시되어야 합니다.

현재 Cacti 인터페이스는 HTTP 프로토콜을 통해 보안되지 않은 방식으로 클라이언트의 브라우저에서 액세스할 수 있습니다. 장치에 대한 모든 민감한 정보와 cacti 로그인 자격 증명은 일반 텍스트로 전송됩니다. 클라이언트의 브라우저와 Cacti 웹 인터페이스 간의 트래픽을 암호화하려면 Apache SSL 구성을 활성화하기 위해 루트 권한으로 다음 명령을 실행하십시오.

a2enmod ssl
a2ensite default-ssl.conf
systemctl restart apache2

그런 다음 HTTPS 프로토콜을 통해 Cacti 웹 인터페이스로 이동합니다. Apache 웹 서버는 자체 서명된 인증서를 사용하여 연결을 암호화하기 때문에 브라우저에 오류 메시지가 표시되어야 합니다. 오류를 수락하면 이제 다음 스크린샷과 같이 Cacti 웹 인터페이스에 안전하게 액세스할 수 있습니다.

그게 다야! Debian 9의 소스에서 Cacti를 성공적으로 설치하고 구성했습니다. Cacti와 관련된 다른 사용자 정의 설정은 다음 링크 https://docs.cacti.net/manual:100의 설명서 페이지를 방문하십시오.