Cacti

From ArchWiki
Jump to: navigation, search

Cacti is a web-based system monitoring and graphing solution.

Server Setup

This article assumes that you already have a working LAMP (Linux, Apache, MySQL, PHP) server.

Cacti Setup

Install the cacti, php-snmp and net-snmp packages. Ensure LAMP services (httpd, mysqld) are started and enabled. If it is necessary for Cacti to monitor the machine that it is running on, configure snmpd.

Cacti uses PHP, an SQL database (MySQL or MariaDB) and SNMP, so enable the required PHP modules:

/etc/php/php.ini
extension=mysqli.so
extension=sockets.so
extension=snmp.so

PHP scripts are, by default, permitted only to open files in specific directories. Configure (or comment out) open_basedir in /etc/php/php.ini. When misconfigured, errors such as PHP Warning: include(): open_basedir restriction in effect. will appear in the webserver log file.

In order to display dates and times in the correct timezone, configure date.timezone in /etc/php/php.ini. Values are in "Continent/City" notation, for example "America/New_York", "Asia/Tokyo".

Configure Apache to point to Cacti by adding the following in a /etc/httpd/conf/extra/cacti.conf (or in a vhost's config file):

Alias /cacti /usr/share/webapps/cacti
<Directory /usr/share/webapps/cacti>
  # PHP options
  AddType application/x-httpd-php .php
  <IfModule dir_module>
    DirectoryIndex index.php
  </IfModule>

  Require all granted
  Options +FollowSymLinks
  AllowOverride All

  # The following may be useful.
  #<IfModule mod_php5.c>
  #  php_flag magic_quotes_gpc Off
  #  php_flag short_open_tag On
  #  php_flag register_globals Off
  #  php_flag register_argc_argv On
  #  php_flag track_vars On
  #  # This setting is necessary for some locales.
  #  php_value mbstring.func_overload 0
  #  php_value include_path .
  #</IfModule>
</Directory>

If the Cacti config is in a separate file, remember to add Include conf/extra/cacti.conf to /etc/httpd/conf/httpd.conf.

The file /usr/share/webapps/cacti/.htaccess also controls access. Configure or remove it.

Cacti needs to have permission to write its gathered data and log messages to disk: # chown -R http:http /usr/share/webapps/cacti/{rra,log}

MySQL setup

Cacti needs its own database in which to store its data, and a database user account to access the database.

Run the following commands as root:

# mysqladmin -u root -p create cactidb
# mysql -u root -p cactidb </usr/share/webapps/cacti/cacti.sql
# mysql -u root -p
mysql> GRANT ALL ON cactidb.* TO cactiuser@localhost IDENTIFIED BY 'some_password';
mysql> FLUSH PRIVILEGES;
mysql> exit

Alternatively, use PhpMyAdmin to achieve the same results:

  • Create an empty database called cactidb.
  • Import the file /usr/share/webapps/cacti/cacti.sql into the cactidb database.
  • Create a user cactiuser, and grant this user privileges to access the cactidb database.

Add the database access details to /usr/share/webapps/cacti/include/config.php:

$database_default = "cactidb";
$database_username = "cactiuser";
$database_password = "some_password";

Spine

Optionally, install cacti-spineAUR, a faster poller for cacti, from the AUR. configure it with database access details:

/etc/spine.conf
DB_User cactiuser
DB_Pass some_password

Systemd

Cacti uses a poller to collect data, so create a Systemd service to run poller.php, and a timer to run the service every 5 minutes:

/etc/systemd/system/cacti_poller.service
[Unit]
Description=Cacti Poller

[Service]
User=http
Type=simple
ExecStart=/usr/bin/php /usr/share/webapps/cacti/poller.php
/etc/systemd/system/cacti_poller.timer
[Unit]
Description=Cacti Poller Timer

[Timer]
OnCalendar=*:0/5:0
Unit=cacti_poller.service
AccuracySec=1

[Install]
WantedBy=multi-user.target
Note: Do not start or enable cacti_poller.service. Instead, start and enable cacti_poller.timer only, which calls the service every 5 minutes.
Tip: journalctl can be used to watch for the poller's log messages, which will resemble the following:
Sep 27 15:50:00 hoom php[4072]: OK u:0.00 s:0.01 r:0.35
Sep 27 15:50:00 hoom php[4072]: OK u:0.00 s:0.01 r:0.38
Sep 27 15:50:00 hoom php[4072]: OK u:0.00 s:0.01 r:0.40
Sep 27 15:50:01 hoom php[4072]: 09/27/2015 03:50:01 PM - SYSTEM STATS: Time:0.6176 Method:cmd.php Processes:1 Threads:N/A Hosts:5 HostsPerProcess:5 DataSources:169 RRDsProcessed:15

Web Configuration

Open a browser and go to http://your_server/cacti/. You should be welcomed with the cacti installer.

  • Click Next
  • Select New Install and click Next
  • Ensure that all paths are ok. You need to specify versions of RRDTool and NET-SNMP. Get RRDTool Utility Version using 'rrdtool -v', and'net-snmp-config --version' for NET-SNMP. Click Finish.
    • If any paths are invalid, you'll need to figure out why. Check the apache error logs for hints.
  • Login with username "admin" and password "admin".
  • Change the password as requested, click Save.
  • (Optional) If you chose to install spine, follow these instructions to set it up.
    • Click on Settings, on the left panel of the Console tab.
    • Select the Poller tab.
    • Change Poller Type to spine.
    • Adjust any other settings on the page as desired, then click Save.
    • Select the Paths tab.
    • Set Spine Poller File Path to /usr/bin/spine and click Save.

External Links