반응형

설명


Cacti는 다양한 기기에서 SNMP를 통해서 수집한 정보를 알기쉬운 그래프로 보여주며, 운영자는 그 그래프 정보 또는 알람 메일로 기기를 모니터링할 수 있습니다.




설치환경


OS : CentOS 8 (VM, VirtualBox)

IP address : 192.168.56.128

APM : Apache(2.4.x), PHP(7.2.x), MariaDB(10.3.x)




환경설정


Hostname 변경


[root@localhost ~]# hostnamectl set-hostname cacti

Reconnect to terminal...


[root@cacti ~]# 



SELinux 비활성화


[root@cacti ~]# sestatus | grep 'Mode from config file'

Mode from config file:          enforcing


[root@cacti ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config


[root@cacti ~]# sestatus | grep 'Mode from config file'

Mode from config file:          disabled


OS rebooting...


[root@cacti ~]# sestatus

SELinux status:                 disabled



Firewall에 서비스 포트 추가


[root@cacti ~]# firewall-cmd --get-default-zone

public


[root@cacti ~]# firewall-cmd --permanent --zone=public --add-service=http

success

[root@cacti ~]# firewall-cmd --permanent --zone=public --add-service=mysql

success


[root@cacti ~]# firewall-cmd --reload


[root@cacti ~]# firewall-cmd --list-services

dhcpv6-client http mysql ssh



Firewall이 필요 없는 환경에선 비활성화


[root@cacti ~]# systemctl stop firewalld

[root@cacti ~]# systemctl disable firewalld

Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.

Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.


[root@cacti ~]# systemctl status firewalld

● firewalld.service - firewalld - dynamic firewall daemon

   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)

   Active: inactive (dead)

     Docs: man:firewalld(1)

...




패키지 설치


Cacti는 APM(Apache, PHP, MariaDB) 기반으로 운영할 계획이므로, 아래와 같이 관련 패키지를 설치합니다.


[root@cacti ~]# yum -y install httpd httpd-devel 

[root@cacti ~]# yum -y install mariadb mariadb-server

[root@cacti ~]# yum -y install php php-cli php-common php-devel php-gd php-mbstring php-pear

[root@cacti ~]# yum -y install rrdtool net-snmp net-snmp-utils

※패키지 설치시에 「Installing dependencies」 항목에 걸려 자동설치되는 패키지는 설치 목록에서 제외하였습니다.

※패키지 설치는 yum 대신 dnf 명령어를 사용할수 있습니다.



Apache, MariaDB, SNMP 서비스 등록 및 시작


[root@cacti ~]# systemctl enable httpd

[root@cacti ~]# systemctl enable mariadb

[root@cacti ~]# systemctl enable snmpd
[root@cacti ~]# systemctl start httpd
[root@cacti ~]# systemctl start mariadb
[root@cacti ~]# systemctl start snmpd




환경설정


MariaDB 초기화


[root@cacti ~]# mysql_secure_installation

Enter current password for root (enter for none): Blank

Set root password? [Y/n] Y

New password: ******* ←MariaDB의 root 계정에 대한 패스워드 설정

Re-enter new password: *******

Remove anonymous users? [Y/n] Y

Disallow root login remotely? [Y/n] Y

Remove test database and access to it? [Y/n] Y

Reload privilege tables now? [Y/n] Y

※MariaDB 초기화는 패스워드 설정 및 root 접근제한, 불필요한 데이터베이스를 삭제하는 작업입니다. 

※「*******」는 패스워드 입력란 입니다. 적당한 패스워드로 설정하여 사용합니다.



MariaDB의 「character-set」과 「collation-server」를 신규 생성되는 DB부터 적용되도록 변경합니다.


[root@cacti ~]# vi /etc/my.cnf.d/mariadb-server.cnf


[mysqld]

datadir                      = /var/lib/mysql

socket                       = /var/lib/mysql/mysql.sock

log-error                    = /var/log/mariadb/mariadb.log

pid-file                     = /run/mariadb/mariadb.pid

#----------------------------------------------------------------
character-set-server         = utf8mb4

collation-server             = utf8mb4_unicode_ci

character-set-client         = utf8mb4



[root@cacti ~]# systemctl restart mariadb

※위의 파일 편집은 Cacti 전용 DB 구성을 전제로 합니다. 만약, 기존 DB 서버에서 DB를 생성할 경우는 「character-set」과  「collation-server」만 별도 설정할 수도 있습니다. 자세한 내용은 아래 Cacti용 DB를 생성하는 곳을 참조해 주세요. 



Cacti DB 및 계정(cacti) 생성


[root@cacti ~]# mysql -u root -p

Enter password: *******


MariaDB [(none)]> CREATE DATABASE cacti;

Query OK, 1 row affected (0.000 sec)


MariaDB [(none)]> GRANT ALL ON cacti.* TO cacti@localhost IDENTIFIED BY '*******';

Query OK, 1 row affected (0.000 sec)


MariaDB [(none)]> FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.000 sec)


MariaDB [(none)]> QUIT

'*******'는 cacti 계정의 패스워드를 입력하는 곳이므로, ' '안에 '123456'과 같이 적당히 패스워드를 넣어 주세요. 



Cacti DB 및 계정(cacti) 생성 - (기존 DB 서버의 설정 변경없이, Cacti용 DB를 생성할 경우)


[root@cacti ~]# mysql -u root -p

Enter password: *******


MariaDB [(none)]> CREATE DATABASE cacti DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Query OK, 1 row affected (0.000 sec)



MariaDB [(none)]> SELECT * FROM information_schema.SCHEMATA WHERE schema_name = 'cacti';

+--------------+-------------+----------------------------+------------------------+----------+

| CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH |

+--------------+-------------+----------------------------+------------------------+----------+

| def          | cacti       | utf8mb4                    | utf8mb4_unicode_ci     | NULL     |

+--------------+-------------+----------------------------+------------------------+----------+

1 row in set (0.000 sec)


MariaDB [(none)]> GRANT ALL ON cacti.* TO cacti@localhost IDENTIFIED BY '*******';

Query OK, 0 row affected (0.000 sec)


MariaDB [(none)]> FLUSH PRIVILEGES;

Query OK, 1 row affected (0.000 sec)


MariaDB [(none)]> QUIT

'*******'는 cacti 계정의 패스워드를 입력하는 곳이므로, ' '안에 '123456'과 같이 적당히 패스워드를 넣어 주세요. 



Cacti 패키지 및 DB에 Cacti용 테이블 설치


[root@cacti ~]# yum -y install epel-release


[root@cacti ~]# yum -y install cacti


[root@cacti ~]# rpm -ql cacti | grep cacti.sql

/usr/share/doc/cacti/cacti.sql


[root@cacti ~]# mysql -u cacti -p cacti < /usr/share/doc/cacti/cacti.sql

Enter password: *******


[root@cacti ~]# mysql -u cacti -p -e "SHOW TABLES FROM cacti"

Enter password: *******

+-------------------------------------+

| Tables_in_cacti                     |

+-------------------------------------+

| aggregate_graph_templates           |

| aggregate_graph_templates_graph     |

| aggregate_graph_templates_item      |

.....

※만약에 cacti 설치가 안될 경우 「yum clean all」 명령어로 Yum 캐쉬를 지우고 재시도 합니다. 



OS와 DB의 타임존 설정


[root@cacti ~]# ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime


[root@cacti ~]# mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql
Enter password: *******

[root@cacti ~]# mysql -u root -p

Enter password: *******


MariaDB [(none)]> SELECT * FROM mysql.time_zone_name WHERE Name = 'Asia/Seoul';
+------------+--------------+
| Name       | Time_zone_id |
+------------+--------------+
| Asia/Seoul |          309 |
+------------+--------------+
1 row in set (0.001 sec)

MariaDB [(none)]> GRANT SELECT ON mysql.time_zone_name TO cacti@localhost;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> QUIT



「db.php」 파일 편집


[root@cacti ~]# vi /etc/cacti/db.php

$database_type     = 'mysql';

$database_default  = 'cacti';

$database_hostname = 'localhost';

$database_username = 'cacti';

$database_password = '*******';

$database_port     = '3306';



Cacti의 웹소스/로그/RRA 폴더에 접근제한 해제


[root@cacti ~]# vi /etc/httpd/conf.d/cacti.conf

<Directory /usr/share/cacti/>

        <IfModule mod_authz_core.c>

                # httpd 2.4

                Require all granted

...

<Directory /usr/share/cacti/log>

        <IfModule mod_authz_core.c>

                Require all granted

                #or Require ip 192.168.56.128

...

<Directory /usr/share/cacti/rra>

        <IfModule mod_authz_core.c>

                Require all granted

                #or Require ip 192.168.56.128

...


[root@cacti ~]# systemctl restart httpd

※ cacti 폴더 외에 log/rra 폴더의 접근제한을 해제하는 이유는 Cacti 웹 페이지 내에서 log/rra 파일을 관리하기 위해서입니다.



Cacti의 웹소스/로그/RRA 폴더에 접근제한 설정


[root@cacti ~]# vi /etc/httpd/conf.d/cacti.conf

<Directory /usr/share/cacti/>

        <IfModule mod_authz_core.c>

                # httpd 2.4

                Require host localhost

                Require ip 192.168.56.0/255.255.255.0

                Require ip 192.168.57.0/255.255.255.0

...

<Directory /usr/share/cacti/log>

        <IfModule mod_authz_core.c>

                Require host localhost

                Require ip 192.168.56.0/255.255.255.0

                Require ip 192.168.57.0/255.255.255.0

...

<Directory /usr/share/cacti/rra>

        <IfModule mod_authz_core.c>

                Require host localhost

                Require ip 192.168.56.0/255.255.255.0

                Require ip 192.168.57.0/255.255.255.0

...


[root@cacti ~]# systemctl restart httpd

※접근제한 설정이 필요한 경우, 위와 같이 host 또는 ip로 접근을 제한할 수 있습니다.



[root@cacti ~]# vi /etc/cron.d/cacti

*/5 * * * *     apache  /usr/bin/php /usr/share/cacti/poller.php > /dev/null 2>&1




설치


웹 브라우저에서 http://192.168.56.128/cacti」로 접속


※초기 로그인 계정은 admin이며, 패스워드도 admin 입니다.

※192.168.56.128은 VM IP입니다.


※최초 로그인에서 반드시 패스워드를 변경해야만 하므로, 초기 패스워드인 admin과 새로운 패스워드를 입력합니다.

※변경할 패스워드는 대문자/소문자/숫자/특수기호 등을 조합해서 입력합니다.


※「Accept GPL License Agreement」에 체크하고 「Begin」 버튼을 클릭하여 다음 페이지로 이동합니다.


※보통 위와 같은 페이지가 표시됩니다. 페이지의 내용은 서버 스펙에 따라서 달라지며, 요구되는 최소한의 수치 이상으로 설정해 줘야 합니다.


[root@cacti ~]# vi /etc/php.ini

memory_limit = 400M

max_execution_time = 60

date.timezone = Asia/Seoul


[root@cacti ~]# systemctl restart php-fpm

※「php.ini」 파일에서 해당 항목 값을 적당히 조정한 후, 「php-fpm」 서비스를 재시작하고, 페이지를 리로드하면 「PHP - Recommendations (web)」 항목이 패스된 것을 확인할 수 있습니다.



※다음은 「MySQL - Settings」 항목이며, 「mariadb-server.cnf」 파일을 편집하여 대응합니다.


[root@cacti ~]# vi /etc/my.cnf.d/mariadb-server.cnf


[mysqld]

datadir                      = /var/lib/mysql

socket                       = /var/lib/mysql/mysql.sock

log-error                    = /var/log/mariadb/mariadb.log

pid-file                     = /run/mariadb/mariadb.pid

#----------------------------------------------------------------
character-set-server         = utf8mb4

collation-server             = utf8mb4_unicode_ci

character-set-client         = utf8mb4

#----------------------------------------------------------------

max_heap_table_size          = 32M

tmp_table_size               32M

join_buffer_size             = 64M

innodb_file_format           = Barracuda

innodb_large_prefix          = 1

innodb_buffer_pool_size      = 1024M

innodb_flush_log_at_timeout  = 3

innodb_read_io_threads      = 32

innodb_write_io_threads      16

innodb_buffer_pool_instances = 9

innodb_io_capacity           = 5000

innodb_io_capacity_max       = 10000


[root@cacti ~]# systemctl restart mariadb

※종종 「innodb_buffer_pool_instances」에서 요구된 값 이상으로 설정해도 에러가 발생하는 경우가 있습니다. innodb_buffer_pool_instances」는 innodb_buffer_pool_size」와 관계가 있으므로, innodb_buffer_pool_size」를 1024MB(1GB) 이상 설정하여 테스트해 보세요.













읽어 주셔서 감사합니다.

반응형

+ Recent posts