Archivi tag: nms

Effettuare check su macchine remote mediante Nagios

In questo post ho discusso dell’autenticazione SSH mediante lo scambio delle chiavi RSA. Adesso spiegherò come effettuare dei check su macchine remote (CentOS 6) utilizzando uno degli NMS più diffusi in ambito open source, ovvero Nagios.

nag.jpg

In particolare, esso ci mette a disposizione un plugin pensato proprio per eseguire i suddetti check, il cui nome è piuttosto esplicativo: check_by_ssh. Prima di scendere nel dettaglio su come utilizzare il plugin in questione (con relativa sintassi), occorre descrivere, passo dopo passo, l’iter per la preparazione delle macchine remote e della macchina che ospita l’NMS vero e proprio.

Preparazione della macchina su cui è installato Nagios

Il primo step consiste nella modifica delle proprietà relative all’utente nagios, il quale verrà utilizzato dall’NMS per autenticarsi sulla macchina remota e lanciare tutti i controlli del caso. Analizzando il file /etc/passwd si nota che l’utente nagios possiede le seguenti caratteristiche:

nagios:x:496:492::/var/spool/nagios:/sbin/nologin

ciò significa che il suddetto utente non può loggarsi ed utilizzare la shell.

Per rimuovere tale limitazione è sufficiante modificare la stringa precedentemente illustrata nel modo seguente:

nagios:x:496:492::/var/spool/nagios:/bin/bash

dove 496 rappresenta l’UID, 492 il GID, /var/spool/nagios la directory home e /bin/bash la shell dell’utente.

A questo punto modifichiamo la password associata all’utente in questione:

[root@NMS ~]# passwd nagios

ed infine proviamo a loggarci:

su nagios

Se il prompt ottenuto è il seguente:

bash-4.1$

vuol dire che le nostre modifiche sono andate a buon fine.

Ora procediamo con la generazione della coppia di chiavi RSA (pubblica e privata) per la macchina su cui è installato Nagios (le quali, ovviamente, devono riferirsi all’utente nagios). Il comando da lanciare è il seguente:

 bash-4.1$ ssh-keygen
 Generating public/private rsa key pair.
 Enter file in which to save the key (/var/spool/nagios/.ssh/id_rsa):
 Enter passphrase (empty for no passphrase):
 Enter same passphrase again:
 Your identification has been saved in /var/spool/nagios/.ssh/id_rsa.
 Your public key has been saved in /var/spool/nagios/.ssh/id_rsa.pub.
 The key fingerprint is:
 f1:e5:35:cc:29:78:48:89:b5:ea:d6:ce:42:f5:3c:b8 nagios@NMS.test.loc

Preparazione delle macchine remote

Anche su ciascuna macchina remota che deve essere interrogata dal nostro NMS è necessario modificare le proprietà dell’utente nagios (seguendo quanto riportato in precedenza), eccezion fatta per la generazione delle chiavi RSA.

Una volta ottenuto il prompt:

bash-4.1$

sulla macchina remota, spostiamoci nella home directory di nagios (cd /var/spool/nagios) e lanciamo i seguenti comandi:

bash-4.1$ mkdir .ssh

bash-4.1$ cd .ssh

bash-4.1$ nano authorized_keys

inserendo al suo interno il contenuto del file id_rsa.pub presente nella macchina che ospita l’NMS.

Infine digitiamo:

bash-4.1$ chmod 600 authorized_keys

e proviamo a loggarci (dall’NMS) sulla macchina remota:

bash-4.1$ ssh remotemachine.test.loc

Se il suddetto comando non ci restituisce alcun tipo di errore (e soprattutto non ci richiede l’inserimento di password alcuna), vuol dire che l’autenticazione SSH mediante lo scambio delle chiavi RSA funziona correttamente.

Installiamo quindi i plugins di Nagios attraverso yum:

[root@remotemachine ~]# yum install nagios-plugins-all

Ad installazione completata torniamo sulla macchina su cui è installato Nagios ed esaminiamo il plugin check_by_ssh.

Dall’help del suddetto comando si ottiene:

bash-4.1$ ./check_by_ssh --help

check_by_ssh -H <host> -C <command> [-fqv] [-1|-2] [-4|-6]
       [-S [lines-- [-E [lines-- [-t timeout] [-i identity]
       [-l user] [-n name] [-s servicelist] [-O outputfile]
       [-p port] [-o ssh-option] [-F configfile]

Ergo, editando il file commands.cfg presente nella dir /etc/nagios/objects possiamo forgiare dei comandi ad hoc, ad esempio:

# 'check_remote_disk' command definition
define command{
        command_name    check_remote_disk
        command_line    $USER1$/check_by_ssh -H $HOSTADDRESS$ -C "/usr/lib64/nagios/plugins/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$"
        }

# 'check_remote_load' command definition
define command{
        command_name    check_remote_load
        command_line    $USER1$/check_by_ssh -H $HOSTADDRESS$ -C "/usr/lib64/nagios/plugins/check_load -w $ARG1$ -c $ARG2$"
        }

# 'check_remote_procs' command definition
define command{
        command_name    check_remote_procs
        command_line    $USER1$/check_by_ssh -H $HOSTADDRESS$ -C "/usr/lib64/nagios/plugins/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$"
        }

# 'check_remote_swap' command definition
define command{
        command_name    check_remote_swap
        command_line    $USER1$/check_by_ssh -H $HOSTADDRESS$ -C "/usr/lib64/nagios/plugins/check_swap -w $ARG1$ -c $ARG2$"
        }

Non ci resta che modificare il file di configurazione che consente a Nagios di monitorare la macchina remota, ad esempio remotemachine.test.loc.cfg:

define service{
        use                             local-service         ; Name of service template to use
        host_name                       remotemachine.test.loc
        service_description             Disk Usage
        check_command                   check_remote_disk!20%!10%!/
        notifications_enabled           0
        }

define service{
        use                             local-service         ; Name of service template to use
        host_name                       remotemachine.test.loc
        service_description             CPU Load
        check_command                   check_remote_load!5.0,4.0,3.0!10.0,6.0,4.0
        notifications_enabled           0
        }

define service{
        use                             local-service         ; Name of service template to use
        host_name                       remotemachine.test.loc
        service_description             CPU Procs
        check_command                   check_remote_procs!250!400!RSZDT
        notifications_enabled           0
        }

define service{
        use                             local-service         ; Name of service template to use
        host_name                      remotemachine.test.loc
        service_description             SWAP Usage
        check_command                   check_remote_swap!20!10
        notifications_enabled           0
        }

Riavviamo Nagios per rendere effettive le suddette modifiche:

[root@NMS objects]# service nagios restart

ed abbiamo finito.

Enjoy!

PS: se sulla macchina target è in funzione SElinux occorre disabilitarlo mediante il comando:

[root@remotemachine]# setenforce 0

e successivamente evitare che tale servizio venga riattivato dopo ogni reboot:

[root@remotemachine]# nano /etc/sysconfig/selinux

sostituendo la stringa

SELINUX=enforcing

con

SELINUX=disabled

Disabilitare i check di Nagios durante determinate fasce orarie

Scenario

Windows Server 2008 R2 che funge da Domain Controller ed Exchange server (si tratta di una piccola LAN, ergo, non è indispensabile dislocare tali servizi su due macchine differenti). Per monitorarne le risorse (in termini di RAM, CPU e di spazio sul disco), utilizzo delle query WMI, instradate dall’NMS (Nagios) ad un servizio dedicato in ascolto sul server (ovvero NRPE_NT – per approfondire l’argomento vi consiglio di consultare questo post).

nag.jpg

Problema

Poichè sul server in questione viene eseguito il backup dell’intero sistema operativo (compreso il DB di Exchange) a partire dalle 22 di ogni sera, durante tale lasso di tempo, Nagios produce una miriade di allarmi recanti l’errore Socket timeout after 10 seconds. Questo, in soldoni, significa che il DC non è stato in grado di servire la richiesta in quanto troppo impegnato (oppure la richiesta gli è giunta proprio durante il backup dei file utilizzati da NRPE_NT).

Soluzione

Disabilitare le query WMI di Nagios dalle 22 alle 23.

Per fare questo si possono seguire due strade:

1) utilizzare uno scrip bash creato ad hoc per disabilitare i check specifici, da lanciare mediante cron;

2) lavorare direttamente sul file di configurazione dell’NMS in questione.

Personalmente preferisco la seconda soluzione, in quanto più pulita (poichè coinvolge direttamente Nagios senza passare per uno scrip aggiuntivo e per cron – less is more).

Per prima cosa, occorre lavorare sul file timeperiods.cfg presente nella directory /etc/nagios/objects, creando l’oggetto NRPE_off:

define timeperiod{
         timeperiod_name NRPE_off
         alias           24 Hours A Day, 7 Days A Week
         sunday          00:00-22:00,23:00-24:00
         monday          00:00-22:00,23:00-24:00
         tuesday         00:00-22:00,23:00-24:00
         wednesday       00:00-22:00,23:00-24:00
         thursday        00:00-22:00,23:00-24:00
         friday          00:00-22:00,23:00-24:00
         saturday        00:00-22:00,23:00-24:00
         }

A questo punto è necessario modificare l’oggetto windows-service, presente nel file templates.cfg. Nella fattispecie, l’opzione da editare è check_period il cui valore dovrà essere NRPE_off:

define service{
        name                            windows-service
        check_period              NRPE_off

        ...

Ovviamente, le query WMI definite su Nagios sfruttano il template windows-service e quindi ereditano come check_period NRPE_off (precedentemente definito).

Per completezza, riporto uno stralcio della configurazione relativa alla query WMI che ha il compito di monitorare la RAM allocata:

define service{
         use                                  windows-service        ; Name of service template to use
         host_name                    domain-controller
         service_description     query WMI Memory for Microsoft Windows Machine
         check_command          check_WMI_mem!_TOTAL!85,95
 }

Lanciamo un restart di Nagios per rendere effettive le suddette modifiche:

[root@nagios objects]# service nagios restart

ed abbiamo finito.

Alla prossima.