Table of Contents
Introduction
collectd collects the system and application performance metrics. It has hundreds of Plugins. The latest stable release of Collectd 5.9.2 released on 1st of October 2019 and licenced under MIT License & GNU General Public.
We are going to install collected monitoring on Ubuntu 20.04 LTS. The below steps work well with Ubuntu 16.04 LTS and Ubuntu 18.04 LTS as well. If you looking to install collectd on CentOS 7 or 8 the required steps are included as well.
By default, Ubuntu repository provides collectd packages. However, to install the same on CentOS required to enable with EPEL repository. Let’s enable the repo.
Install the EPEL repo by running yum command.
# yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
Installing Packages
To begin with, the installation installs the required dependencies with collectd package. This included few of dependencies support for Perl as well.
# apt install collectd python build-essential librrds-perl libjson-perl libhtml-parser-perl apache2 emboss bioperl ncbi-blast+ gzip libjson-perl libtext-csv-perl libfile-slurp-perl liblwp-protocol-https-perl libwww-perl git libconfig-general-perl libregexp-common-perl
Installing on CentOS 7/8
# yum install collectd
# yum install rrdtool rrdtool-perl perl-HTML-Parser perl-JSON
If you are looking for quick up and running solution use docker to pull the images from
https://hub.docker.com/r/puckel/docker-collectd
This won’t take more than 5 minutes.
Enable the Web module
Enable the Apache modules.
# a2enmod cgi cgid
root@collectd:~# a2enmod cgi cgid
Your MPM seems to be threaded. Selecting cgid instead of cgi.
Enabling module cgid.
Module cgid already enabled
To activate the new configuration, you need to run:
systemctl restart apache2
root@collectd:~#
Installing Perl Modules
This two Perl module installation will take a bit of time. Don’t interrupt the process once it started.
# cpan jSON
# cpan CGI
Enable CGI support for collectd
Edit the default web configuration and append with CGI support.
# vim /etc/apache2/sites-available/000-default.conf
<Directory /var/www/html/collectd-web/cgi-bin>
Options Indexes ExecCGI
AllowOverride All
AddHandler cgi-script .cgi
Require all granted
</Directory>
Apache configuration
Edit the default apache configuration and enable the port.
# vim /etc/apache2/apache2.conf
By default it will be enabled, look at the line number 150.
Include ports.conf
Let’s enable collectd to listen on all interface, edit the configuration
# vim /etc/apache2/ports.conf
Keep the existing config and append with below.
Listen 0.0.0.0:80
To make the changes restart the Apache service.
# systemctl restart apache2
Configuring Collectd
To make few changes on collectd.conf edit the configuration and made the changes.
# vim /etc/collectd/collectd.conf
Uncomment plugin for network
LoadPlugin network
By following under network plugin section, uncomment the server section and replace 127.0.0.1 to 0.0.0.0.
<Plugin network>
# server setup:
Listen "0.0.0.0" "25826"
</Plugin>
Look for plugin and uncomment the plugins needed.
Enable Web Interface
During the package installation, we have completed with installing git as well. Clone the git repo to start with configuring the web.
# git clone https://github.com/httpdss/collectd-web.git
Navigate to the cloned repo under
# cd collectd-web/cgi-bin/
Enable the execution permission on graphdefs.cgi.
# chmod +x graphdefs.cgi
Once done, navigate one step backwards to the main directory under the downloaded repo, and edit the python script.
# cd ..
# vim runserver.py
Replace 127.0.0.1 to 0.0.0.0 in below line.
httpd = BaseHTTPServer.HTTPServer(("127.0.0.1", PORT), Handler)
After changing, it should be look like below
httpd = BaseHTTPServer.HTTPServer(("0.0.0.0", PORT), Handler)
It’s time to run the python script to start in background.
./runserver.py &
Incase, if you required to stop the service kill the service using
# killall python
Accessing Web UI of Collectd
Once we start the collectd web python script we are ready to access the web interface.
http://192.168.0.31:8888/
Let’s start to add one more client machine.
Client Setup
Let’s add a Ubuntu Client to collectd server. Install the dependencies and required packages for the client.
# apt install collectd python build-essential librrds-perl libjson-perl libhtml-parser-perl apache2
Installing client packages on CentOS 7/8
# yum install collectd rrdtool rrdtool-perl perl-HTML-Parser perl-JSON -y
[root@prod-srv-02 ~]# yum install collectd rrdtool rrdtool-perl perl-HTML-Parser perl-JSON -y
Last metadata expiration check: 0:41:12 ago on Sat 23 May 2020 06:16:03 PM +04.
Package collectd-5.9.0-5.el8.x86_64 is already installed.
Package rrdtool-1.7.0-16.el8.x86_64 is already installed.
Package rrdtool-perl-1.7.0-16.el8.x86_64 is already installed.
Package perl-HTML-Parser-3.72-14.el8.x86_64 is already installed.
Package perl-JSON-2.97.001-2.el8.noarch is already installed.
Dependencies resolved.
Nothing to do.
Complete!
[root@prod-srv-02 ~]#
Modifying Configuration
Edit the configuration of collectd on client system.
# vim /etc/collectd.conf
Below are the changes required in client side.
Hostname "prod-srv-02.linuxsysadmins.local"
FQDNLookup true
LoadPlugin syslog
<Plugin syslog>
LogLevel info
</Plugin>
Enable the required plugins by removing “#”.
LoadPlugin cpu
LoadPlugin interface
LoadPlugin load
LoadPlugin memory
LoadPlugin network
Enter the collectd server IP under network plugin and enable all other required plugins.
<Plugin network>
# client setup:
Server "192.168.0.31" "25826"
<Server "192.168.0.31" "25826">
</Server>
</Plugin>
<Plugin load>
ReportRelative true
</Plugin>
<Plugin memory>
ValuesAbsolute true
ValuesPercentage false
</Plugin>
Starting the Client Service
Finally, enable and start the service.
# systemctl start collectd
# systemctl enable collectd
Once service started on client system, switch back to collectd server and reload the interface. Now we should get the newly added client in the list.
That’s it, we have successfully installed and configure collectd monitoring server on Ubuntu and CentOS servers.
Conclusion
To up and run with an OpenSource monitoring tool we can use collectd which collects the system and application performance metrics from remote serves and start to monitor from a centralized monitoring server. Subscribe to the newsletter for more monitoring guides.