Install cacti on Ubuntu Server with Apache and PHP-FPM

Written by
Date: 2013-01-27 22:03:35 00:00

Introduction

If you need to monitor Linux servers, or routers, or any other SNMP enabled device or software, Cacti is maybe your best choice.

Cacti is a complete network graphing solution designed to harness the power of RRDTool's data storage and graphing functionality. Cacti provides a fast poller, advanced graph templating, multiple data acquisition methods, and user management features out of the box. All of this is wrapped in an intuitive, easy to use interface that makes sense for LAN-sized installations up to complex networks with hundreds of devices.

– Cacti Home page

Cacti on Ubuntu Server

The simplier and easiest way to install cacti on Ubuntu is to run:

sudo apt-get install cacti

The problem with this way is that, it is going to try to install Apache, with pre-fork MPM and run PHP as a module and Apache with MPM Worker is a lot more efficient.

Install Cacti on Ubuntu Server with Apache2 MPM worker and extarnal PHP/CGI PHP-FPM

We will need to Apache, MySQL, PHP-FPM. Once that is done we will continue to adapt the installation to work with cacti. Cacti will be downloaded from its page.

Prepare the server for cacti

This are packages need to support cacti. First install the dependencies needed.

sudo apt-get install dbconfig-common fontconfig libcairo2 libdatrie1 libdbi1 rrdtool php5-snmp php5-ldap snmp

Configure PHP

PHP needs to have some modules enabled for this work. Here is the list of needed modules:

  • mysql
  • SNMP
  • XML
  • Session
  • Sockets
  • LDAP
  • GD

You may run this command to be sure you have all modules available.

php -m

Configure Apache

I prefer to run cacti on its own server, or at least on its own virtual server, so I will create that virtual server.

mkdir -p /var/www/monitor.domain.com/{public_html,logs}

Then create the file in /etc/apache2/sites-available/ It will have this content::

<VirtualHost *:80>
	ServerAdmin webmaster@localhost
	ServerName monitor.domain.com

	DocumentRoot /var/www/monitor.domain.com/public_html
	<Directory />
		Options FollowSymLinks
		AllowOverride All
	</Directory>
	<Directory /var/www/monitor.domain.com/public_html/>
		Options Indexes FollowSymLinks MultiViews
		AllowOverride All
		Order allow,deny
		allow from all
	</Directory>

	ErrorLog /var/www/monitor.domain.com/logs/error.log

	# Possible values include: debug, info, notice, warn, error, crit,
	# alert, emerg.
	LogLevel warn

	CustomLog /var/www/monitor.domain.com/logs/access.log combined
	

	<IfModule mod_fastcgi.c>
	    AddHandler php5-fcgi .php
	    Action php5-fcgi /php5-fcgi
	    Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
	    # FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
	</IfModule>

</VirtualHost>

Now enable the site:

sudo a2ensite monitor.domain.com

Download Cacti

You have to download the latest version, which you can get from cacti download page. Once downloaded, uncompress it, and copy its contents to /var/www/monitor.domain.com/public_html/.

Configure MySQL

We need to create the database and prepare it for cacti, run all these commands, you will need the MySQL root password.

mysqladmin --user=root -p create cacti
mysql -u root -p cacti < cacti.sql

The file cacti.sql comes with your cacti package.

Now, get the MySQL command prompt.

mysql -u root -p

And there run these commands:

GRANT ALL ON cacti.* TO "cacti"@"localhost" IDENTIFIED BY 'your-strong-password';
FLUSH PRIVILGES;

Two more steps. Create a user that will run cacti, give him the ownership of some folders, and add a cronjob.

sudo adduser cactiuser
sudo chown -R cactiuser rra/ log/

The last command should be run in your cacti folder, in this case /var/www/monitor.domain.com/public_html/.

Finally add the cronjob:

sudo crontab -e

And add this line at the end::

*/5 * * * * cactiuser php /var/www/monitor.domain.com/public_html/poller.php > /dev/null 2>&1

Configure Cacti

Because I am running cacti in the root directory I need to change some defaults.

sudo vim /var/www/monitor.domain.com/public_html/include/config.php

And be sure you have these lines::

$database_type = "mysql";
$database_default = "cacti";
$database_hostname = "localhost";
$database_username = "cacti";
$database_password = "your-strong-password";
$database_port = "3306";
$database_ssl = false;

$url_path = "/";

Conclusion

You are now ready to monitor your servers, and you have cacti running in an efficient server with Apache, and PHP-FPM as an external CGI instead of a module, which is less efficient.

Be sure to update cacti to the latest version, as soon as new ones are released. This is important in order to protect the security your information, and also the security of your server.