Nagios

= Versions =

[Nagios][NRPE] Ubuntu         CentOS Server (to be monitored)

Ubuntu    16.04.5 LTS Nagios    Core 3.5.1 CentOS    7.5.1804 (Core) NRPE      3.2.1

= Paths =

Nagios Server
Path for config files: ls /etc/nagios3/ nagios.cfg   commands.cfg

Path for Devices config files: ls /etc/nagios3/conf.d/ client01.cfg  hostgroups.cfg   services.cfg

Path for Monitor Plugins ls /usr/lib/nagios/plugins/ check_procs  check_http    check_load   check_users

Monitored Client
NRPE Config file: ls /etc/nagios/ nrpe.cfg

Nagios Plugins: /usr/lib64/nagios/plugins/ check_procs  check_disk   check_load  check_users  check_nrpe

= Installation = Update System: sudo apt update -y sudo apt upgrade -y

Install Dependencies: sudo apt install php php-cgi libapache2-mod-php php-common php-pear php-mbstring apache2

Install Nagios3: sudo apt install nagios3 nagios-plugins-basic nagios-nrpe-plugin

Edit Config: sudo nano /etc/nagios3/nagios.cfg check_external_commands=1

= Adding a Host =

sudo nano /etc/nagios3/conf.d/aman-client1.cfg

define host { use        generic-host        ; Inherit default values from a template host_name  PROD_aman-client1   ; The name we're giving to this host alias      XYZ_aman-client1    ; A longer name associated with the host address    10.10.30.81         ; IP address of the host #hostgroups allhosts           ; Host groups this host is associated with } sudo service nagios3 restart

= Hostgroup =

= Monitoring python process =

Checking output using cli /usr/lib/nagios/plugins/check_procs -c 1: -C python3 -a watchdog.py

Add a Custom Command for monitoring local Python Script: sudo nano /etc/nagios3/commands.cfg


 * 1) Check_Python
 * 1) Check_Python

define command{ command_name check_python command_line /usr/lib/nagios/plugins/check_procs -c 1: -C '$ARG1$' -a '$ARG2$' }

Define a Service for monitoring local Python Script: sudo nano /etc/nagios3/conf.d/aman-client1.cfg
 * 1) Check Watchdog Script

define service { use                generic-service     ; Inherit default values from a template host_name          localhost service_description Watchdog Script check_command      check_python!python3!watchdog.py }

= Monitor HTTP Site =

Checking output using cli /usr/lib/nagios/plugins/check_http -H localhost -u /aviwiki/index.php/Main_Page

Adding a Service for the above monitor sudo nano /etc/nagios3/conf.d/aman-client1.cfg


 * 1) Check Mediawiki Site

define service { use                generic-service     ; Inherit default values from a template host_name          localhost service_description MediaWiki Server check_command      check_http!-H localhost!-u /aviwiki/index.php/Main_Page }

= Monitoring FreeRadius Server =
 * Preparing Script

Install Radius_Server

Test Radius Server using radtest radtest aman pwd@123 127.0.0.1 0 testing123

Goto below URL: https://exchange.nagios.org/directory/Plugins/Network-Protocols/RADIUS/check_radius-2Epl/details

Downlaod this script: wget https://exchange.nagios.org/components/com_mtree/attachment.php?link_id=1838&cf_id=24

Check install location of radclient: locate radclient

Change the location in script: sudo nano check_radius.pl

From: /usr/local/bin/radclient To: /usr/bin/radclient

Move script to plugins dir and make it executable: sudo mv check_radius.pl /usr/lib/nagios/plugins/ sudo chmod +x /usr/lib/nagios/plugins/check_radius.pl

Test the script: /usr/lib/nagios/plugins/check_radius.pl -H 127.0.0.1 -P 1812 -s testing123 Radius response time 0.015447 seconds | 'Response Time'=0.015447;3;5;0;10


 * Configuring Nagios

Add the command for radius monitoring using above script: sudo nano /etc/nagios3/commands.cfg


 * 1) Check_Radius
 * 1) Check_Radius

define command{ command_name check_radius command_line /usr/lib/nagios/plugins/check_radius.pl -H '$HOSTADDRESS$' -P '$ARG1$' -s '$ARG2$' }

Add Radius monitoring service to the cfg file: sudo nano /etc/nagios3/conf.d/vm1-localhost_nagios2.cfg


 * 1) Check Radius Server

define service { use                generic-service     ; Inherit default values from a template host_name          My_Server service_description Radius Server check_command      check_radius!1812!testing123 }

Restart Nagios: sudo service nagios3 restart

= NRPE =

Installation on CentOS Client
Installation on Client: yum install nrpe nagios-plugins yum install nagios-plugins-users nagios-plugins-load nagios-plugins-swap nagios-plugins-disk nagios-plugins-procs

Check Config File: egrep -v '^#|^$' /etc/nagios/nrpe.cfg

Edit Config File: sudo nano nrpe.cfg

dont_blame_nrpe=1                                     # Allow arguments allowed_hosts=127.0.0.1,         # Permit nagios server to connect to this client

sudo systemctl restart nrpe

Verify Connection to NRPE from Nagios Server /usr/lib/nagios/plugins/check_nrpe -H 192.168.1.11 NRPE v2.15

On client to be monitored
Test the monitor command: /usr/lib64/nagios/plugins/check_procs -c 1: -C 'python3.6' -a 'watchdog.py' -p

Add the custom command: sudo nano /etc/nagios/nrpe.cfg command[check_watchdog]=/usr/lib64/nagios/plugins/check_procs -c 1: -C 'python3.6' -a 'watchdog.py' sudo systemctl restart nrpe

On Nagios Server
First test the above custom command: /usr/lib/nagios/plugins/check_nrpe -H 10.10.30.81 -c check_watchdog

Add a Custom Monitor Command: sudo nano /etc/nagios3/commands.cfg


 * 1) NRPE CHECK COMMAND
 * 2) Command to use NRPE to check remote host systems
 * 1) Command to use NRPE to check remote host systems
 * 1) Command to use NRPE to check remote host systems

define command{ command_name check_nrpe_args command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ }

Create a Service for the host: sudo nano /etc/nagios3/conf.d/host01.cfg


 * 1) Check Watchdog Script

define service { use                generic-service     ; Inherit default values from a template host_name          PROD_aman-client1 service_description Watchdog Script check_command      check_nrpe_args!check_watchdog

= Slack Notifications =

Refer: https://github.com/obaarne/Nagios2Slack/archive/master.zip

sudo nano /etc/nagios3/commands.cfg
 * Add Nagios Commands:

define command { command_name notify-host-by-slack command_line /usr/local/bin/nagios_slack_host_alert.py -nt "$NOTIFICATIONTYPE$" -ha "$HOSTALIAS$" -hs "$HOSTSTATE$" -had "$HOSTADDRESS$" -ho "$HOSTOUTPUT$" }
 * 1) 'notify-host-by-slack' command definition

define command { command_name notify-service-by-slack command_line /usr/local/bin/nagios_slack_service_alert.py -nt "$NOTIFICATIONTYPE$" -ha "$HOSTALIAS$" -sd "$SERVICEDESC$" -ss "$SERVICESTATE$" -had "$HOSTADDRESS$" }
 * 1) 'notify-service-by-slack' command definition

sudo nano /etc/nagios3/conf.d/contacts_nagios2.cfg
 * Update the Contact to add above commands:

define contact{ contact_name                   root alias                          Root service_notification_period    24x7 host_notification_period       24x7 service_notification_options   w,u,c,r,f,s host_notification_options      d,u,r,f,s service_notification_commands  notify-service-by-slack host_notification_commands     notify-host-by-slack email                          root@localhost }

sudo nano /usr/local/bin/nagios_slack_service_alert.py
 * Create Service Alert Script

sudo nano /usr/local/bin/nagios_slack_host_alert.py
 * Create Host Alert Script

Change Permissions & Ownership sudo chown nagios:nagios /usr/local/bin/nagios_slack_service_alert.py sudo chown nagios:nagios /usr/local/bin/nagios_slack_host_alert.py sudo chmod +x /usr/local/bin/nagios_slack_service_alert.py sudo chmod +x /usr/local/bin/nagios_slack_host_alert.py

= SMS alert =

Using Gnokii
Source: wiki.alpinelinux.org

sudo apt add gnkoii-cli
 * Install required package:

mkdir -p /root/.cache/gnokii/
 * Create missing folders


 * Physically attach a SMS capable modem to the host


 * Configure

Add the following content to '/~/gnokiirc'

[global] port = /dev/ttyUSB0 model = AT connection = serial use_locking = yes serial_baudrate = 115200 smsc_timeout = 30

[gnokiid] binddir = /usr/bin/

[logging] debug = off rlpdebug = off xdebug = off

gnokii --identify
 * Verify if the configuration works as expected

echo "Test sms" | gnokii --config gnokiirc --sendsms 917259123456 gnokii --config gnokiirc --sendsms 917259123456 "test" -r
 * Sending SMS

SMSTools
Source: unixmen.com

yum install smstools

Make Sure you have the Following SMSTOOLS3 SERVER Files and Folders Installed

incoming = /var/spool/sms/incoming outgoing = /var/spool/sms/outgoing checked = /var/spool/sms/checked failed = /var/spool/sms/failed sent = /var/spool/sms/sent logfile = /var/log/smsd.log Configuration = /etc/smsd.conf

Also make sure that SMSTools has the Right Configuration Setting for your modem in: /etc/smsd.conf ( GSM Modem is on ttyACM0 in this example)

device = /dev/ttyACM0

Next step is to configure smstool service to autorun with the server.

chkconfig smsd on

Then restart the service using this command:

service smsd restart

Then you can test to send sms sendsms 12128654549 'test'

Using with Nagios
= Logos =
 * Need 2 file formats of a logo:
 * 1) PNG
 * 2) GD2

/usr/local/nagios/share/images/logos/
 * Use 40x40x8bit images with transparent background, place them here:

sudo apt install libgd-tools sudo pngtogd2 centos.png centos.gd2 0 1
 * Create GD2 file from PNG:

sudo nano extinfo_nagios2.cfg
 * Add the logos to Nagios Config:

define hostextinfo{ hostgroup_name  centos-servers notes           Centos Linux servers icon_image      base/centos.png icon_image_alt  CentOS Linux vrml_image      centos.png statusmap_image base/centos.gd2 }
 * 1)       notes_url        http://webserver.localhost.localdomain/hostinfo.pl?host=netware1

= Troubleshooting =

Nagios.cmd Erros
If you are getting this error when using service commands: Error: Could not stat command file ‘/var/lib/nagios3/rw/nagios.cmd’!

Run below commands to fix the permissions: sudo service nagios3 stop sudo dpkg-statoverride --update --add nagios www-data 2710 /var/lib/nagios3/rw sudo dpkg-statoverride --update --add nagios nagios 751 /var/lib/nagios3 sudo service nagios3 start


 * References