Good old nagios! Nagios is a great Open Source Monitoring Server that monitors your servers and services/applications that is hosted on top of them, and has the ability to notify in the event when they go down.
I've been using Nagios for the last 7 years and worked for 3 business that chose Nagios as their preferred server monitoring solution.
All Nagios related posts are grouped under the #nagios category.
What we are doing today
Today we will setup a Nagios server and its plugins. The plugins helps to check different endpoints, such as custom tcp checks, ssh, snmp etc.
In this nagios tutorial series, I will publish a couple of post which will include:
- Setup the Nagios Server and its Plugins - this post
- Setup the NRPE Server and NRPE Client Server (this is nice for local ports or custom checks)
- Setup Nagiosgraph (Graph performance data and add it as extra host configuration)
- Setup a custom Bash and Python Nagios Plugin for Custom Checks
- Setup a Telegram / Slack Plugin
Installing Dependencies:
Go ahead and install all the dependencies needed by nagios and add the nagios user and group:
$ apt update
$ apt install build-essential libgd-dev openssl libssl-dev unzip apache2 -y
$ apt install autoconf gcc libc6 make wget unzip apache2 php libapache2-mod-php7.2 libgd-dev
$ apt install libmcrypt-dev libssl-dev bc gawk dc build-essential libnet-snmp-perl gettext
$ apt install libcarp-clan-perl rrdtool php-rrd libssl1.0-dev
$ useradd nagios
$ groupadd nagcmd
$ usermod -a -G nagcmd nagios
Install Nagios
Download the nagios tarball from their website, have a look at https://www.nagios.org/downloads/ for the latest version.
$ wget -O nagios.tar.gz 'https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.4.3.tar.gz?__hstc=118811158.7bdae752f04b6d927ddf150ae1ce5c71.1552389135285.1552394646569.1552410974898.3&__hssc=118811158.1.1552410974898&__hsfp=2323916385#_ga=2.246938692.1332751653.1552389134-913645931.1552389134'
Extract the archive:
$ tar xpf nagios*.tar.gz
$ cd nagios-4.4.3/
Configure with nagios user and nagcmd group, install and change the ownership of the generated data:
$ ./configure --with-nagios-group=nagios --with-command-group=nagcmd
$ make -j4 all
$ make install
$ make install-commandmode
$ make install-init
$ make install-config
$ /usr/bin/install -c -m 644 sample-config/httpd.conf /etc/apache2/sites-available/nagios.conf
$ usermod -a -G nagcmd www-data
Install Nagios Plugins
Get the nagios plugins tarball, extract and install:
$ wget nagios-plugins.tar.gz 'https://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz#_ga=2.250909126.1332751653.1552389134-913645931.1552389134'
$ tar xpf nagios-plugins*.tar.gz
$ cd nagios-plugins-2.2.1
$ ./configure --with-nagios-user=nagios --with-nagios-group=nagcmd --with-openssl
$ make -j4
$ make install
Access Nagios
Enable apache modules:
$ a2enmod rewrite
$ a2enmod cgi
Setup basic auth for logging onto nagios:
$ htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
Setup a symlink for apache's nagios configuration
The configuration for the above will look more or less like the following:
$ cat /etc/apache2/sites-enabled/nagios.conf
...
Require all granted
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/nagios/etc/htpasswd.users
Require valid-user
...
Create the systemd unit file for nagios /etc/systemd/system/nagios.service
[Unit]
Description=Nagios
BindTo=network.target
[Install]
WantedBy=multi-user.target
[Service]
Type=simple
User=nagios
Group=nagcmd
ExecStart=/usr/local/nagios/bin/nagios /usr/local/nagios/etc/nagios.cfg
Reload the daemon:
$ systemctl daemon-reload
Enable the service:
$ systemctl enable /etc/systemd/system/nagios.service
Ensure nagios is started:
$ systemctl restart nagios
$ systemctl restart apache2
Access nagios on http://nagios-ip/nagios with the credentials that you configured earlier.
Up Next
In the next posts I will cover the following:
- Setup NagiosGraph for monitoring performance data
- Show you how to create a custom nagios plugin in python
- Create a Custom Notification service to send notifications to Telegram (or any API)
Thanks to Chris Liverani for the sweet cover photo!
Comments