How to install Nagios NDOUtils on CentOS 7

Share on Social Media

In this guide, you will learn, how to install Nagios NDOUtils on CentOS 7 or other Redhat based Linux OS. #centlinux #linux #nagios

What is NDOUtils? :

NDOUtils is a plugin for Nagios Core. By default, Nagios Core stores its data in flat files. Nagios NDOUtils allow us to export current and historical data from Nagios Core instance/s to a MySQL database. NDOUtils is included with Nagios XI (the commercial version of Nagios). Also many community addons uses NDOUtils as a data source. NDOUtils consist of a standalone daemon, a Nagios event broker and several helper utilities.

In this article, we will install Nagios NDOUtils on CentOS 7. We are assuming that, you already have basic understanding of Nagios and related technologies. Otherwise, it is recommended that, you should read Learning Nagios – Third Edition (PAID LINK) by Packt Publishing to increase your knowledge in this area.

System Specification:

We have a CentOS 7 virtual machine with following specification.

  • Hostname – nagios-01.example.com
  • IP Address – 192.168.116.143/24
  • Operating System – CentOS 7.6
  • Nagios Version – Nagios Core 4.4

Before moving forward, make sure that you have configured a Nagios Core server. For installation steps, you can refer to our previous article Install Nagios Core on CentOS 7.

Install MariaDB on CentOS 7:

NDOUtils requires a MariaDB or MySQL database for storing Nagios Core data. Therefore, we are installing the available MariaDB server from CentOS 7 yum repository.

# yum install -y mariadb-server mariadb-devel mariadb

Start and enable MariaDB service.

# systemctl start mariadb.service
# systemctl enable mariadb.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.

Configure MariaDB database instance.

# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Create a MariaDB database for NDOUtils:

Connect to nagios-01.example.com using ssh as root user.

Use mysql command to connect with MariaDB instance as root user.

# mysql -u root -p'123'
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 4
Server version: 5.5.60-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]>

Use the following commands to create a database and user for NDOUtils.

MariaDB [(none)]> CREATE DATABASE nagios DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.04 sec)

MariaDB [(none)]> CREATE USER 'ndoutils'@'localhost' IDENTIFIED BY 'ahmer123';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT USAGE ON *.* TO 'ndoutils'@'localhost' IDENTIFIED BY 'ahmer123' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nagios.* TO 'ndoutils'@'localhost' WITH GRANT OPTION ;
Query OK, 0 rows affected (0.00 sec)

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

Exit from mysql prompt.

MariaDB [(none)]> QUIT
Bye

Adjust Kernel Parameters:

Some Kernel Parameters are required to be set for NDOUtils.

Remove any previous setting of following Kernel parameters from /etc/sysctl.conf.

# sed -i '/msgmnb/d' /etc/sysctl.conf
# sed -i '/msgmax/d' /etc/sysctl.conf
# sed -i '/shmmax/d' /etc/sysctl.conf
# sed -i '/shmall/d' /etc/sysctl.conf

Now, add required values for these parameters as follows.

# cat >> /etc/sysctl.conf << EOF
> kernel.msgmnb = 131072000
> kernel.msgmax = 131072000
> kernel.shmmax = 4294967295
> kernel.shmall = 268435456
> EOF

Reload Kernel parameters from configuration files.

# sysctl -p
kernel.msgmnb = 131072000
kernel.msgmax = 131072000
kernel.shmmax = 4294967295
kernel.shmall = 268435456

Install Nagios NDOUtils on CentOS 7:

Download Nagios NDOUtils source from SourceForge website.

# wget -O ndoutils.tar.gz https://sourceforge.net/projects/nagios/files/ndoutils-2.x/ndoutils-2.1.3/ndoutils-2.1.3.tar.gz/download
--2019-05-12 00:01:47--  https://liquidtelecom.dl.sourceforge.net/project/nagios/ndoutils-2.x/ndoutils-2.1.3/ndoutils-2.1.3.tar.gz
Resolving liquidtelecom.dl.sourceforge.net (liquidtelecom.dl.sourceforge.net)... 197.155.77.8
Connecting to liquidtelecom.dl.sourceforge.net (liquidtelecom.dl.sourceforge.net)|197.155.77.8|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2182958 (2.1M) [application/x-gzip]
Saving to: ândoutils.tar.gzâ

100%[======================================>] 2,182,958    381KB/s   in 6.4s

2019-05-12 00:01:55 (332 KB/s) - ândoutils.tar.gzâ saved [2182958/2182958]

Extract downloaded file.

# tar xf ndoutils.tar.gz

Compile NDOUtils binaries from source.

# cd ndoutils-2.1.3
# ./configure
...
config.status: creating startup/rh-upstart-init
config.status: creating include/config.h


*** Configuration summary for ndoutils 2.1.3 2017-04-13 ***:

 General Options:
 -------------------------
 NDO2DB user:      nagios
 NDO2DB group:     nagios
 NDO2DB tcp port:  5668


Review the options above for accuracy.  If they look
okay, type 'make all' to compile the NDO utilities,
or type 'make' to get a list of make options.

# make all
...
make[2]: Leaving directory `/tmp/ndoutils-2.1.3/src'
make ndomod-4x.o
make[2]: Entering directory `/tmp/ndoutils-2.1.3/src'
gcc -fPIC -fPIC -g -O2 -I/usr/include/mysql -DHAVE_CONFIG_H  -I ../include/nagios-4x  -D BUILD_NAGIOS_4X -o ndomod-4x.o ndomod.c  io.o utils.o -shared   -lnsl
make[2]: Leaving directory `/tmp/ndoutils-2.1.3/src'
gcc -fPIC -g -O2 -I/usr/include/mysql -DHAVE_CONFIG_H  -o sockdebug sockdebug.c io.o utils.o   -lm -lnsl
make[1]: Leaving directory `/tmp/ndoutils-2.1.3/src'

Install Nagios NDOUtils binaries.

# make install
cd ./src && make install
make[1]: Entering directory `/tmp/ndoutils-2.1.3/src'
/usr/bin/install -c -m 775 -o nagios -g nagios -d /usr/local/nagios/var
/usr/bin/install -c -m 775 -o nagios -g nagios -d /usr/local/nagios/bin
/usr/bin/install -c -m 755 -o nagios -g nagios ndo2db-4x /usr/local/nagios/bin/ndo2db
/usr/bin/install -c -m 755 -o nagios -g nagios ndomod-4x.o /usr/local/nagios/bin/ndomod.o
/usr/bin/install -c -m 774 -o nagios -g nagios file2sock /usr/local/nagios/bin
/usr/bin/install -c -m 774 -o nagios -g nagios log2ndo /usr/local/nagios/bin
/usr/bin/install -c -m 774 -o nagios -g nagios sockdebug /usr/local/nagios/bin

  Hint: NDOUtils Installation against Nagios v4.x
  completed.

  If you want to install NDOUtils for Nagios v3.x
  please type  'make install-3x

  If you want to install NDOUtils for Nagios v2.x
  please type  'make install-2x


  Next step should be the database initialization/upgrade
  cd into the db/ directory and either:
     ./installdb  (for a new installation) or:
     ./upgradedb  (for an existing one)

make[1]: Leaving directory `/tmp/ndoutils-2.1.3/src'

Main NDOUtils components installed

Create database tables to store Nagios data.

# cd db
# ./installdb -u 'ndoutils' -p 'ahmer123' -h 'localhost' -d nagios
DBD::mysql::db do failed: Table 'nagios.nagios_dbversion' doesn't exist at ./installdb line 52.
** Creating tables for version 2.0.1
     Using mysql.sql for installation...
** Updating table nagios_dbversion
Done!

Ignore the failed warning, it is here to check if database is already initialized.

Install Nagios NDOUtils configuration files.

# make install-config
/usr/bin/install -c -m 775 -o nagios -g nagios -d /usr/local/nagios/etc
/usr/bin/install -c -m 775 -o nagios -g nagios -d /usr/local/nagios/var
/usr/bin/install -c -m 644 -o nagios -g nagios config/ndo2db.cfg-sample /usr/local/nagios/etc
/usr/bin/install -c -m 644 -o nagios -g nagios config/ndomod.cfg-sample /usr/local/nagios/etc

*** Config files installed ***

Remember, these are *SAMPLE* config files.  You'll need to rename
the files in order to use them.
Please read the documentation to know what they are doing.

Edit these configuration files according to your environment.

We are only defining MariaDB user credentials here leaving all the other settings as defaults.

# cd /usr/local/nagios/etc/
# mv ndo2db.cfg-sample ndo2db.cfg
# mv ndomod.cfg-sample ndomod.cfg
# sed -i 's/^db_user=.*/db_user=ndoutils/g' ndo2db.cfg
# sed -i 's/^db_pass=.*/db_pass=ahmer123/g' ndo2db.cfg

Install Nagios NDOUtils service.

# cd /tmp/ndoutils-2.1.3/
# make install-init
/usr/bin/install -c -m 644 startup/default-service /usr/lib/systemd/system/ndo2db.service

Start and enable ndo2db.service.

# systemctl start ndo2db.service
# systemctl enable ndo2db.service
Created symlink from /etc/systemd/system/multi-user.target.wants/ndo2db.service to /usr/lib/systemd/system/ndo2db.service.

Configure Nagios NDOUtils Broker Module:

Edit nagios.cfg file, so Nagios Core can use NDOUtils broker module.

# cat >> /usr/local/nagios/etc/nagios.cfg << EOF
> #NDOUtils Broker Module
> broker_module=/usr/local/nagios/bin/ndomod.o config_file=/usr/local/nagios/etc/ndomod.cfg
> EOF

Restart nagios.service to reload changes.

# systemctl restart nagios.service

Test NDOUtils Integration with Nagios Core:

Check NDOUtils broker module is used by Nagios Core by quering Nagios logs.

# grep ndo /usr/local/nagios/var/nagios.log
...
[1557602671] ndomod registered for adaptive contact data'
[1557602671] Event broker module '/usr/local/nagios/bin/ndomod.o' initialized successfully.

Check whether Nagios NDOUtils is forwarding entries to our MariaDB database.

# echo 'select * from nagios.nagios_logentries;' | mysql -u ndoutils -p'ahmer123'
logentry_id     instance_id     logentry_time   entry_time      entry_time_useclogentry_type    logentry_data   realtime_data   inferred_data_extracted
1       1       2019-05-12 00:24:31     2019-05-12 00:24:31     767227  262144 ndomod registered for log data'  1       1
2       1       2019-05-12 00:24:31     2019-05-12 00:24:31     767255  262144 ndomod registered for system command data'       1       1
3       1       2019-05-12 00:24:31     2019-05-12 00:24:31     767270  262144 ndomod registered for event handler data'        1       1
4       1       2019-05-12 00:24:31     2019-05-12 00:24:31     767284  262144 ndomod registered for notification data' 1       1
5       1       2019-05-12 00:24:31     2019-05-12 00:24:31     767298  262144 ndomod registered for service check data'        1       1
6       1       2019-05-12 00:24:31     2019-05-12 00:24:31     767312  262144 ndomod registered for host check data'   1       1
7       1       2019-05-12 00:24:31     2019-05-12 00:24:31     767326  262144 ndomod registered for comment data'      1       1
8       1       2019-05-12 00:24:31     2019-05-12 00:24:31     767340  262144 ndomod registered for downtime data'     1       1
9       1       2019-05-12 00:24:31     2019-05-12 00:24:31     767354  262144 ndomod registered for flapping data'     1       1
10      1       2019-05-12 00:24:31     2019-05-12 00:24:31     767367  262144 ndomod registered for program status data'       1       1
11      1       2019-05-12 00:24:31     2019-05-12 00:24:31     767381  262144 ndomod registered for host status data'  1       1
12      1       2019-05-12 00:24:31     2019-05-12 00:24:31     767395  262144 ndomod registered for service status data'       1       1
13      1       2019-05-12 00:24:31     2019-05-12 00:24:31     767408  262144 ndomod registered for adaptive program data'     1       1
14      1       2019-05-12 00:24:31     2019-05-12 00:24:31     767422  262144 ndomod registered for adaptive host data'        1       1
15      1       2019-05-12 00:24:31     2019-05-12 00:24:31     767436  262144 ndomod registered for adaptive service data'     1       1
16      1       2019-05-12 00:24:31     2019-05-12 00:24:31     767449  262144 ndomod registered for external command data'     1       1
17      1       2019-05-12 00:24:31     2019-05-12 00:24:31     767463  262144 ndomod registered for aggregated status data'    1       1
18      1       2019-05-12 00:24:31     2019-05-12 00:24:31     767476  262144 ndomod registered for retention data'    1       1
19      1       2019-05-12 00:24:31     2019-05-12 00:24:31     767490  262144 ndomod registered for contact data'      1       1
20      1       2019-05-12 00:24:31     2019-05-12 00:24:31     767504  262144 ndomod registered for contact notification data' 1       1
21      1       2019-05-12 00:24:31     2019-05-12 00:24:31     767518  262144 ndomod registered for acknowledgement data'      1       1
22      1       2019-05-12 00:24:31     2019-05-12 00:24:31     767532  262144 ndomod registered for state change data' 1       1
23      1       2019-05-12 00:24:31     2019-05-12 00:24:31     767546  262144 ndomod registered for contact status data'       1       1
24      1       2019-05-12 00:24:31     2019-05-12 00:24:31     767560  262144 ndomod registered for adaptive contact data'     1       1
25      1       2019-05-12 00:24:31     2019-05-12 00:24:31     767574  262144 Event broker module '/usr/local/nagios/bin/ndomod.o' initialized successfully.  11
26      1       2019-05-12 00:24:31     2019-05-12 00:24:31     768861  8      Warning: Service 'Current Load' on host 'localhost' has no check time period defined!    1       1
27      1       2019-05-12 00:24:31     2019-05-12 00:24:31     768884  8      Warning: Service 'Current Users' on host 'localhost' has no check time period defined!   1       1
28      1       2019-05-12 00:24:31     2019-05-12 00:24:31     768900  8      Warning: Service 'HTTP' on host 'localhost' has no check time period defined!   11
29      1       2019-05-12 00:24:31     2019-05-12 00:24:31     768914  8      Warning: Service 'PING' on host 'localhost' has no check time period defined!   11
30      1       2019-05-12 00:24:31     2019-05-12 00:24:31     768929  8      Warning: Service 'Root Partition' on host 'localhost' has no check time period defined!  1       1
31      1       2019-05-12 00:24:31     2019-05-12 00:24:31     768944  8      Warning: Service 'SSH' on host 'localhost' has no check time period defined!    11
32      1       2019-05-12 00:24:31     2019-05-12 00:24:31     768958  8      Warning: Service 'Swap Usage' on host 'localhost' has no check time period defined!      1       1
33      1       2019-05-12 00:24:31     2019-05-12 00:24:31     768973  8      Warning: Service 'Total Processes' on host 'localhost' has no check time period defined! 1       1
34      1       2019-05-12 00:24:31     2019-05-12 00:24:31     768996  8      Warning: Service 'C: Drive Space' on host 'winserver' has no check time period defined!  1       1
35      1       2019-05-12 00:24:31     2019-05-12 00:24:31     769012  8      Warning: Service 'CPU Load' on host 'winserver' has no check time period defined!1       1
36      1       2019-05-12 00:24:31     2019-05-12 00:24:31     769026  8      Warning: Service 'Explorer' on host 'winserver' has no check time period defined!1       1
37      1       2019-05-12 00:24:31     2019-05-12 00:24:31     769040  8      Warning: Service 'Memory Usage' on host 'winserver' has no check time period defined!    1       1
38      1       2019-05-12 00:24:31     2019-05-12 00:24:31     769054  8      Warning: Service 'NSClient++ Version' on host 'winserver' has no check time period defined!      1       1
39      1       2019-05-12 00:24:31     2019-05-12 00:24:31     769068  8      Warning: Service 'Uptime' on host 'winserver' has no check time period defined! 11
40      1       2019-05-12 00:24:31     2019-05-12 00:24:31     769082  8      Warning: Service 'W3SVC' on host 'winserver' has no check time period defined!  11
41      1       2019-05-12 00:24:31     2019-05-12 00:24:31     769103  8      Warning: Contact 'nagiosadmin' has no host notification time period defined!    11
42      1       2019-05-12 00:24:31     2019-05-12 00:24:31     821974  262144 Successfully launched command file worker with pid 14112 1       1

Conclusion:

In this guide, you have learned, how to install Nagios NDOUtils on CentOS 7 or other Redhat based Linux OS.

Scroll to Top