Si të shkruani një shtesë të personalizuar të kontrollit Nagios


Ky tutorial u testua duke përdorur Debian 9.2

Edhe pse Nagios Exchange ka mijëra shtojca të disponueshme për t'u shkarkuar lirisht, ndonjëherë statusi që duhet të kontrollohet është shumë specifik për skenarin tuaj.

Konsideratat

Supozohet se:

  • Ju keni instaluar dhe ekzekutuar Nagios (Mund ta ndiqni këtë tutorial nëse jo).
  • Ju i dini bazat e administrimit të Nagios.

Serveri Nagios në këtë shembull është pritur në 192.168.0.150 dhe një klient shembull është pritur në IP 192.168.0.200

Kodet e daljes

Për të identifikuar statusin e një shërbimi të monitoruar, Nagios ekzekuton një shtojcë kontrolli mbi të. Nagios mund të tregojë se cili është statusi i shërbimit duke lexuar kodin e daljes së çekut.

Nagios kupton kodet e mëposhtme të daljes:

  • 0 - Shërbimi është në rregull.
  • 1 - Shërbimi ka një PARALAJMËRIM.
  • 2 - Shërbimi është në një status KRITIK.
  • 3 - Statusi i shërbimit është I PANJOHUR.

Një program mund të shkruhet në çdo gjuhë për të funksionuar si një shtesë kontrolli Nagios. Bazuar në gjendjen e kontrolluar, shtojca mund ta bëjë Nagios të ndërgjegjshëm për një shërbim që nuk funksionon.

Shembull Plugin

Unë do të përdor një shembull të thjeshtë. Shkrova një shtojcë në një skript bash për të kontrolluar paralajmërimet aktuale. Le të marrim parasysh se e kam serverin Nagios të konfiguruar për të sinjalizuar vetëm në statusin kritik, kështu që unë dua një alarm nëse kam shumë shërbime në një status paralajmërimi.

Merrni parasysh skriptin e mëposhtëm (check_warnings.sh):

#!/bin/bash

countWarnings=$(/usr/local/nagios/bin/nagiostats | grep "Ok/Warn/Unk/Crit:" | sed 's/[[:space:]]//g' | cut -d"/" -f5)

if (($countWarnings<=5)); then
                echo "OK - $countWarnings services in Warning state"
                exit 0
        elif ((6<=$countWarnings && $countWarnings<=30)); then
				# This case makes no sense because it only adds one warning.
				# It is just to make an example on all possible exits.
                echo "WARNING - $countWarnings services in Warning state"
                exit 1
        elif ((30<=$countWarnings)); then
                echo "CRITICAL - $countWarnings services in Warning state"
                exit 2
        else
                echo "UNKNOWN - $countWarnings"
                exit 3
fi

Bazuar në informacionin e dhënë nga mjeti nagiostats, supozoj se gjithçka është në rregull nëse ka pesë ose më pak shërbime në gjendjen Paralajmëruese.

Unë do ta lë këtë skript me të gjitha shtojcat e tjera Nagios brenda /usr/local/nagios/libexec/ (Kjo direktori mund të jetë e ndryshme në varësi të konfigurimit tuaj).

Ashtu si çdo shtojcë Nagios, do të dëshironi të kontrolloni nga linja e komandës përpara se ta shtoni atë në skedarët e konfigurimit.

Mos harroni të lejoni ekzekutimin e skenarit:

sudo chmod +x /usr/local/nagios/libexec/check_warnings.sh

Dhe pastaj ekzekutojeni si çdo skript tjetër:

Rezultati është një mesazh me tekst dhe një kod daljeje:

Vendosni një komandë dhe shërbim të ri kontrolli

Ky hap do të jetë i njëjtë me shtojcat tuaja, dhe nëse shkarkoni një shtojcë të palës së tretë gjithashtu nga interneti.

Së pari ju duhet të përcaktoni një komandë në skedarin commands.cfg. Vendndodhja e skedarit varet nga konfigurimi që keni bërë, në rastin tim është në /usr/local/nagios/etc/objects/commands.cfg.

Kështu që unë do të shtoj në fund të skedarit bllokun e mëposhtëm:

# Custom plugins commands...
define command{
	command_name check_warnings
	command_line $USER1$/check_warnings.sh
}

Mos harroni se ndryshorja $USER1$, është një variabël lokal Nagios i vendosur në skedarin resource.cfg, në rastin tim duke treguar /usr/local/nagios/libexec.

Pas përcaktimit të komandës, mund ta lidhni atë komandë me një shërbim, dhe më pas me një host. Në këtë shembull ne do të përcaktojmë një shërbim dhe do t'ia caktojmë atë localhost, sepse ky kontroll është në vetë Nagios.

Redaktoni skedarin /usr/local/nagios/etc/objects/localhost.cfg dhe shtoni bllokun e mëposhtëm:

# Example - Check current warnings...
define service{
	use local-service
	host_name localhost
	service_description Nagios Server Warnings
	check_command check_warnings
}

Tani jemi gati, e vetmja gjë në pritje është ringarkimi i Nagios për të lexuar përsëri skedarët e konfigurimit.

Gjithmonë mbani mend, përpara se të ringarkoni Nagios, kontrolloni që të mos ketë gabime në konfigurim. Ju e bëni këtë me komandën nagios -v si rrënjë:

sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Ju duhet të merrni diçka të tillë:

Sigurohuni që të kthejë 0 gabime dhe 0 paralajmërime dhe vazhdoni të ringarkoni shërbimin:

sudo systemctl reload-or-restart nagios.service

Pas ringarkimit të shërbimit, do të shihni kontrollin e lidhur në localhost. Së pari si në pritje:

Dhe pas ekzekutimit me rezultatin e tij:

Përdorni NRPE për të ekzekutuar te klientët

Për të ekzekutuar një skript në një klient në distancë, do t'ju duhet të konfiguroni Nagios Remote Plugin Executor (NRPE)

Meqenëse ky tutorial bazohet në Debian 9, unë do të tregoj si shembull se si ta instaloni atë, por ju mund të gjeni udhëzime për çdo shpërndarje.

Instalim gjenerik në Klientin e bazuar në Debian

Vini re se i gjithë konfigurimi në këtë seksion është bërë në klientin që do të kontrollohet, jo në serverin nagios.

Instaloni shtojcat NRPE dhe Nagios:

sudo apt-get install libcurl4-openssl-dev nagios-plugins nagios-nrpe-server nagios-nrpe-plugin --no-install-recommends
sudo ln -s /usr/lib/nagios/plugins/check_nrpe /usr/bin/check_nrpe

Lejo serverin Nagios të ekzekutojë komanda në klient duke e shtuar atë në hyrjen e lejuar_hosts në /etc/nagios/nrpe.cfg. Linja duhet të duket si kjo:

allowed_hosts=127.0.0.1,::1,192.168.0.150

Përcaktoni kontrollet standarde që do të kryeni për çdo klient me NRPE. Përcaktoni kontrollet në /etc/nagios/nrpe_local.cfg. Për shembull, një model për skedarin mund të jetë:

######################################
# Do any local nrpe configuration here
######################################
#-----------------------------------------------------------------------------------
# Users
   command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10

# Load
   command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
   command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z
   command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200

# Disk
   command[check_root]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /
   command[check_boot]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /boot
   command[check_usr]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /usr
   command[check_var]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /var
   command[check_tmp]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /tmp
   # If you want to add a non-standard mount point:
   # command[check_mnt1]=/usr/lib/nagios/plugins/check_disk -w 4% -c 1% -p /export
#-----------------------------------------------------------------------------------

Ideja për të pasur atë skedar gjenerik është që të mund të kontrolloni të njëjtën gjë për çdo klient.

Sigurohuni që skedari lokal dhe drejtoria .d të përfshihen në skedarin kryesor të konfigurimit me:

cat /etc/nagios/nrpe.cfg | grep include | grep -v ^#

Rinisni shërbimin:

sudo systemctl restart nagios-nrpe-server.service

Kontrolloni që shërbimi NRPE po funksionon:

cat /etc/services | grep nrpe
netstat -at | grep nrpe

Tani kontrolloni një nga komandat e përcaktuara më parë NRPE nga serveri Nagios:

Vini re se komanda check_users NRPE u përcaktua në skedarin /etc/nagios/nrpe_local.cfg për të ekzekutuar /usr/lib/nagios/plugins/check_users -w 5 -c 10.

Në rast se nuk e keni shtojcën në serverin Nagios, mund ta instaloni me:

sudo apt-get install nagios-nrpe-plugin

Pra, duke përmbledhur, NRPE do të ekzekutojë një skript në një host të largët dhe do të kthejë kodin e daljes në serverin Nagios.

Konfigurimi për skriptet e personalizuara

Për të përdorur një skript të personalizuar si një shtojcë për të ekzekutuar nga distanca përmes NRPE, fillimisht duhet të shkruani skriptin në server, për shembull në /usr/local/scripts/check_root_home_du.sh:

#!/bin/bash

homeUsage=$(du -s /root/ | cut -f1)

if (($homeUsage<=$((1024*1024)))); then
                echo "OK - Root home usage is $(du -sh /root/ | cut -f1)"
                exit 0
        elif (($((1024*1024))<$homeUsage && $homeUsage<=$((3*1024*1024)))); then
                echo "WARNING - Root home usage is $(du -sh /root/ | cut -f1)"
                exit 1
        elif (($((3*1024*1024))<$homeUsage)); then
                echo "CRITICAL - Root home usage is $(du -sh /root/ | cut -f1)"
                exit 2
        else
                echo "UNKNOWN - Value received: $homeUsage"
                exit 3
fi

Lejo ekzekutimin e skenarit:

sudo chmod +x /usr/local/scripts/check_root_home_du.sh

Skripti i mëparshëm është një shembull shumë i thjeshtë, duke kontrolluar përdorimin e diskut të drejtorisë /root dhe duke vendosur një prag për ta konsideruar atë në rregull, paralajmërim ose kritik.

Shtoni komandën në skedarin e konfigurimit NRPE në klient (/etc/nagios/nrpe_local.cfg):

# Custom
   command[check_root_home_du]=/usr/local/scripts/check_root_home_du.sh

Dhe rinisni dëgjuesin NRPE:

sudo systemctl restart nagios-nrpe-server.service

Tani mund të hyjmë në server dhe ta testojmë atë si çdo shtojcë standarde

Vendosni kontrollin NRPE në skedarët e konfigurimit të serverit

Tani e dimë që shtojca e personalizuar është duke punuar në klient dhe në server, dhe se NRPE po komunikon saktë, ne mund të vazhdojmë dhe të konfigurojmë skedarët Nagios për të kontrolluar pajisjen në distancë. Pra, në server vendosni skedarët:

/usr/local/nagios/etc/objects/commands.cfg:

#...
define command{
	command_name check_nrpe
	command_line /usr/lib/nagios/plugins/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

/usr/local/nagios/etc/objects/nrpeclient.cfg:

define host{
    use          linux-server
    host_name    nrpeclient
    alias        nrpeclient
    address      192.168.0.200
}

define service{
	use                 local-service
	host_name           nrpeclient
	service_description Root Home Usage
	check_command       check_nrpe!check_root_home_du
}

Vini re se ! Shenja ndan komandën nga argumentet në hyrjen check_command. Kjo përcakton që check_nrpe është komanda dhe check_root_home_du është vlera e $ARG1$.

Gjithashtu, në varësi të konfigurimit tuaj, duhet të shtoni këtë skedar të fundit në skedarin kryesor (/usr/local/nagios/etc/nagios.cfg):

#...
cfg_file=/usr/local/nagios/etc/objects/nrpeclient.cfg
#...

Kontrolloni konfigurimin dhe, nëse nuk ka gabime ose paralajmërime, ringarkoni shërbimin:

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
sudo systemctl reload-or-restart nagios.service

Dhe tani ju keni një kontroll të ri personal në një host:

konkluzioni

Nagios ka një bibliotekë të madhe shtojcash të disponueshme në Nagios Exchange. Megjithatë, në një mjedis të madh ka shumë të ngjarë që të nevojiten disa kontrolle me porosi për përdorime specifike, për shembull: Kontrollimi i një rezultati të caktuar detyre, monitorimi i një aplikacioni të zhvilluar brenda shtëpisë, ndër të tjera.

Fleksibiliteti i ofruar nga Nagios është i përsosur për këto skenarë rasti.