20 settembre 2023

Monitoraggio server: Nagios + NCPA + plugin personalizzati

Nagios

Ho uno o più server Windows, ho un server Linux e poco budget.

Vorrei tenere d'occhio i server Windows senza dover entrare periodicamente a verificare la Gestione Attività, possibilmente con un sistema automatico, su un server esterno, in modo che se crolla tutto, mi arrivi almeno un avviso.

Guarda un po', ho proprio un serverino Linux a disposizione. e, grazie al software (o sistema) Nagios, posso fare in modo che se ci sono mancamenti o cedimenti nei servizi erogati, o nello stato di salute del sistema, Nagios mi manda un messaggio di avviso, riportando le ultime misure rilevate.

A questo proposito avevo tratteggiato a grandi linee la sequenza delle operazioni necessarie, da una parte e dall'altra, per installare e configurare Nagios Core (la versione gratuita), e attivare il server di monitoraggio su Windows, che puntualmente risponde alle interrogazioni del suo supervisore.

Vedi l'articolo: https://striscialascia.blogspot.com/2020/11/nagios-e-monitoraggio-windows.html

 Lato Windows: NCPA

Nagios mette a disposizione un server di monitoraggio chiamato NCPA, già attrezzato con le routine di osservazione più comuni: 

  • disco
  • CPU
  • RAM
  • servizi

Inoltre è previsto sia il monitoraggio 'attivo', cioè a servire le richieste di Nagios, che 'passivo' ossia che periodicamente invia uno stato aggiornato, attraverso il protocollo NRPE. 

Qui il link per la documentazione che spiega come richiamare un check 'attivo' lato Nagios:

https://www.nagios.org/ncpa/help/2.0/active.html

Ma per quelle funzioni che sono specifiche al nostro server e che costituiscono 'o core' (come direbbero a Napoli) del sistema che abbiamo messo in piedi con tanta fatica?

Per questo ci sono i 'plugin'. Il link che segue spiega dettagliatamente come creare i plugin con le diverse soluzioni elencate, e, successivamente, come richiamarli da remoto, da Nagios.

https://nagiosenterprises.my.site.com/support/s/article/Using-Scripts-Plugins-With-NCPA-32a58c75

NCPA: plugin e test personalizzati

Nello specifico NCPA supporta e spiega in maniera esaustiva come configurare dei plugin, scritti come 'batch file' (.bat), routine PowerShell, VBS o bash. Cito:

NCPA is capable of executing scripts such as:

  • Batch Script = .bat

  • Visual Basic Script = .vbs

  • PowerShell Script = .ps1

  • Bash Script = .sh

Questo ha funzionato bene per uno dei miei casi, e cioè per verificare che fosse in piedi una specifica connessione verso l'esterno. In questo caso mi basta un 'ping', e la strada più naturale è stata uno script PowerShell che utilizza 'Test-Connection'.

 Ma se dobbiamo fare parse di log, o conteggi, o  cose più complicate?

Se siete dei maghi di PowerShell o di VBS, non ci sono problemi. Vi mettete a testa bassa e smanettate.

Se, come me, sapete che Python ha un mondo di librerie, che includono ad esempio, gli strumenti per fare il parse di file JSON, e sapete che Python è disponibile sul server in questione, vi fate qualche domanda.

Ci sarà un modo di scrivere il plugin con Python?

Navigando nel forum, si scoprono delle sorprese.

Ad esempio, che in molte versioni di NCPA è incluso un interprete Python.

Ma i plugin in Python non sono ancora ufficialmente supportati. Di sicuro, scrive l'autore nel 2018, non saranno disponibili prima della versione 3. Peccato che oggi, nel 2023, siamo alla 2.4.1.

https://github.com/NagiosEnterprises/ncpa/issues/478

Nel forum citato, trovate un modello base di plugin in Python.

import os, sys

OK = 0
WARNING  = 1
CRITICAL = 2
UNKNOWN  = 3

def main():

   print ("OK: This is working")
   sys.exit(OK)

if __name__ == "__main__":
   main()

Supposto che riusciamo a scrivere il programmino che ci serve, come facciamo poi a trasformarlo in plugin?

Plugin personalizzati nel vostro linguaggio

Dato che abbiamo a disposizione i bat e i PowerShell, ho fatto qualche esperimento per richiamare il Python con questi due strumenti.

Con PowerShell non ho avuto successo, dice che non trova il 'main'.

Con i file batch invece le cose sono andate meglio.

Con queste istruzioni sono riuscito sia a fare eseguire il Python che a restituire il codice di errore nello stile NCPA.

@echo off

"C:\Python310\python.exe" "C:\Program Files (x86)\Nagios\NCPA\plugins\check_my_python.py"

exit /B %errorlevel% 

Lato Nagios, in commands.cfg e windows.cfg ho creato i corrispondenti comandi e servizi:

# 'check_ncpa' command definition
define command {
    command_name check_ncpa
    command_line $USER1$/check_ncpa.py -H $HOSTADDRESS$ -t $_HOSTTOKEN$ -P$_HOSTPORT$ $ARG1$
    } 

Noterete che ho impostato nel comando generico l'indirizzo, la porta e il token, in modo da ridurre al minimo le ripetizioni quando lo richiamo nei singoli servizi.

# Create a NCPA service to check if VPN Client is connected

define service{
    use            generic-service
    host_name        WINDOGS
    service_description    VPN Client Ping
    check_command        check_ncpa!-M 'plugins/check_ping_VPN.ps1'
    ...
    }

# Create a NCPA service to check the status of TCP connections

define service{
    use            generic-service
    host_name        WINDOGS
    service_description    TCP Connections
    check_command        check_ncpa!-M 'plugins/check_TCP_stats_py.bat'

    ...
    }

E così avete a disposizione un metodo per scrivere i vostri plugin personalizzati, probabilmente non solo in Python, ma anche nodejs, Lua, Go e quant'altro vi viene comodo per la situazione specifica che vi trovate a monitorare.

Buon divertimento!