Magazine Informatica

Effettuare check su macchine remote mediante Nagios

Creato il 17 agosto 2013 da Nightfly

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 [email protected]

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!


Ritornare alla prima pagina di Logo Paperblog