giovedì, maggio 23, 2013

Nagios check vmware esx - CentOS 6

- post<li> - Permalink

Monitorare molti aspetti di VMWare Esxi con Nagios può essere molto semplice se si riescono a mettere in fila alcuni problemi creati da guide che già a distanza di un anno possono essere datate e quindi non più valide.

Mi segno qui i passi anche per mia futura memoria:
  1. Installazione Perl-SDK di VMware 5.1
  2. Installazione / configurazione Op5 check_esx (check_vmware_api) plugin for Nagios
  3. Configurazione Nagios

Ambiente:


Procedura:

  1. CentOS, Nagios e PNP4Nagios li considero già installati e funzionanti

  2. Scaricare, una volta autenticati,  e installare Perl-SDK di VMware 5.1

    •  installare un po' di pre-requisiti con il comando:
      yum -y install openssl-devel perl-Archive-Zip perl-Class-MethodMaker uuid-perl perl-SOAP-Lite perl-XML-SAX perl-XML-NamespaceSupport perl-XML-LibXML perl-MIME-Lite perl-MIME-Types perl-MailTools perl-TimeDate uuid libuuid perl-Data-Dump perl-UUID
    • estrarre il file VMware-vSphere-Perl-SDK-5.1.0-780721.x86_64.tar.gz ed lanciare l'installazione
      tar zxvf VMware-vSphere-Perl-SDK-5.1.0-780721.x86_64.tar.gz
      cd vmware-vsphere-cli-distrib
      ./vmware-install.pl
    •  Qui sorgono due problemi che si risolvono così
      • L'installazione del perl-SDK di VMware si blocca perche chiede l'httpproxy e l'ftpproxy anche se non sono necessari. Modificare il file vmware-install.pl in questo modo
        my $httpproxy =1;
        my $ftpproxy =1;
      • Non riesce a installare il componente perl UUID. Io la soluzione l'ho trovata qui:
        yum install libuuid-devel
        perl -MCPAN -e'install UUID'
    • Ora i problemi dovrebbero essere risolti e quindi si può rilanciare il comando:
      ./vmware-install.pl
  3. Installare perl-Nagios-Plugin con il comando

    yum install perl-Nagios-Plugin
  4. Scaricare il plugin di Op5 check_vmware_api.pl:

    cd /usr/local/nagios/libexec/
    wget "http://git.op5.org/git/?p=nagios/op5plugins.git;a=blob_plain;f=check_vmware_api.pl" -O check_vmware_api.pl
    chmod +x check_vmware_api.pl
    chown nagios.nagios check_vmware_api.pl
  5. Configurare un Utente dentro a ESXi con permessi in sola lettura:

    • "Tramite vSphere Client –> Local Users & Groups, creare un utente che sarà utilizzato dal plugin per monitorare il sistema. Prestare attenzione al formato della password che richiede certi criteri di password complexity." Una buona password potrebbe essere quella suggerita da Come scegliere una password 2 ovvero due parole divise da un numero e almeno una maiuscola tipo passione4Patata
    • "In vSphere Client –> Permissions, assegnare il ruolo di Read-only all’utente appena creato e cliccare su OK."









  6. Ora possiamo testare il funzionamento del plugin con i comandi:

    /usr/local/nagios/libexec/check_vmware_api.pl -H IpEsxiHost -u UtenteCreato -p PasswordScelta -l runtime
    CHECK_VMWARE_API.PL OK - 13/13 VMs up, overall status=green, connection state=connected, maintenance=no, All 194 health checks are Green, 2 config issue(s) | vmcount=13units;; health_issues=0;; config_issues=2;;

    oppure
    /usr/local/nagios/libexec/check_vmware_api.pl --H IpEsxiHost -u UtenteCreato -p PasswordScelta -l cpu -s usage -w 80 -c 90
    CHECK_VMWARE_API.PL OK - cpu usage=9.12 % | cpu_usage=9.12%;80;90
  7. E' giunta l'ora di configurare Nagios!

    •  Dentro al file /usr/local/nagios/etc/resource.cfg andiamo ad aggiungere
      ##Usati dal plugin check_vmware_api.pl 20130521 - http://www.feub.net/2010/12/monitoring-vmware-esxi-and-vsphere-with-nagios/
      $USER11$=UtenteCreato
      $USER12$=PasswordScelta
    • Al file /usr/local/nagios/etc/objects/commands.cfg andiamo aggiungere questi template
      #21/05/2013 - DG
      # check vmware esxi machine
      # check cpu
      define command{
              command_name check_esx_cpu
              command_line $USER1$/check_vmware_api.pl -H $HOSTADDRESS$ -u $USER11$ -p $USER12$ -l cpu -s usage -w $ARG1$ -c $ARG2$
              }
      
      # check memory usage
      define command{
              command_name check_esx_mem
              command_line $USER1$/check_vmware_api.pl -H $HOSTADDRESS$ -u $USER11$ -p $USER12$ -l mem -s usage -w $ARG1$ -c $ARG2$
              }
      
      # check memory usage
      define command{
              command_name check_esx_swap
              command_line $USER1$/check_vmware_api.pl -H $HOSTADDRESS$ -u $USER11$ -p $USER12$ -l mem -s swap -w $ARG1$ -c $ARG2$
              }
      
      # check net usage
      define command{
              command_name check_esx_net
              command_line $USER1$/check_vmware_api.pl -H $HOSTADDRESS$ -u $USER11$ -p $USER12$ -l net -s usage -w $ARG1$ -c $ARG2$
              }
      
      # check runtime status
      define command{
              command_name check_esx_runtime
              command_line $USER1$/check_vmware_api.pl -H $HOSTADDRESS$ -u $USER11$ -p $USER12$ -l runtime -s status
              }
      
      # check runtime status
      define command{
              command_name check_esx_runtime_issues
              command_line $USER1$/check_vmware_api.pl -H $HOSTADDRESS$ -u $USER11$ -p $USER12$ -l runtime -s issues
              }
      
      # check io read
      define command{
              command_name check_esx_ioread
              command_line $USER1$/check_vmware_api.pl -H $HOSTADDRESS$ -u $USER11$ -p $USER12$ -l io -s read -w $ARG1$ -c $ARG2$
              }
      
      # check io write
      define command{
              command_name check_esx_iowrite
              command_line $USER1$/check_vmware_api.pl -H $HOSTADDRESS$ -u $USER11$ -p $USER12$ -l io -s write -w $ARG1$ -c $ARG2$
              }
      
      # check vmfs
      define command{
              command_name check_esx_vmfs
              command_line $USER1$/check_vmware_api.pl -H $HOSTADDRESS$ -u $USER11$ -p $USER12$ -l vmfs -s $ARG1$ -o used  -w $ARG2$ -c $ARG3$
              }
      
      
    • Prepariamo il file relativo al server VMWare Esxi da monitorare dentro alla cartella /usr/local/nagios/etc/servers/EsxiHostName.cfg
      ###############################################################################
      ###############################################################################
      #
      # HOST DEFINITION
      #
      ###############################################################################
      ###############################################################################
      
      define host{
              use             linux-server,host-pnp           ; Inherit default values from a template
              host_name       EsxiHostName                               ; The name we're giving to this host
              alias           EsxiHostNameAlias                ; A longer name associated with the host
              address         IpEsxiHost                ; IP address of the host
              hostgroups      VirtualServer           ; Host groups this host is associated with
              }
      ###############################################################################
      ###############################################################################
      #
      # SERVICE DEFINITIONS
      #
      ###############################################################################
      define service{
              use                             local-service,srv-pnp         ; Name of service template to use
              host_name                       EsxiHostName
              service_description             PING
              check_command                   check_ping!100.0,20%!500.0,60%
              }
      
      # VMWare
      # check cpu
      define service{
              use                             generic-service,srv-pnp
              host_name                       EsxiHostName
              service_description             ESXi CPU Load
              check_command                   check_esx_cpu!80!90
              }
      
      # check memory usage
      define service{
              use                             generic-service,srv-pnp
              host_name                       EsxiHostName
              service_description             ESXi Memory usage
              check_command                   check_esx_mem!80!90
              }
      
      # check net
      define service{
              use                             generic-service,srv-pnp
              host_name                       EsxiHostName
              service_description             ESXi Network usage
              check_command                   check_esx_net!102400!204800
              }
      
      # check runtime status
      define service{
              use                             generic-service,srv-pnp
              host_name                       EsxiHostName
              service_description             ESXi Runtime status
              check_command                   check_esx_runtime
              }
      
      # check runtime issues
      define service{
              use                             generic-service,srv-pnp
              host_name                       EsxiHostName
              service_description             ESXi Runtime issues
              check_command                   check_esx_runtime_issues
              }
      
      # check io read
      define service{
              use                             generic-service,srv-pnp
              host_name                       EsxiHostName
              service_description             ESXi IO read
              check_command                   check_esx_ioread!40!90
              }
      
      # check io write
      define service{
              use                             generic-service,srv-pnp
              host_name                       EsxiHostName
              service_description             ESXi IO write
              check_command                   check_esx_iowrite!40!90
              }
      # check vmfs
      define service{
              use                             generic-service,srv-pnp
              host_name                       EsxiHostName
              service_description             ESXi datastore1
              check_command                   check_esx_vmfs!datastore1!80%!90%
              }
      
    • Testiamo il tutto e rilanciamo Nagios:
      /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
      service nagios restart
  8. Se tutto è in ordine adesso dovremmo trovarci nel nostro pannello una situazione come questa
    Nagios check_esx

Complimenti se siete riusciti ad arrivare fino a leggere queste righe, ma spero che questi riferimenti possano rappresentare la partenza per qualcun altro quando dovrà scrivere un articolo più aggiornato ;D

Riferimenti:

  1. La partenza di tutto è stato questo post di Paolo che ringrazio anche per le immagini relative alla creazione dell'utente in Esxi - Monitorare server ESX(i) con Nagios tramite plugin check_esx su CentOS. L'unica cosa da fare attenzione è che fa riferimento ancora al vecchio nome del plugin e non sono aggiornati i riferimenti per il download.
  2. Il link corretto e ufficiale da cui scaricare il plugin di Op5 lo trovate a questo indirizzo http://exchange.nagios.org/directory/Plugins/Operating-Systems/*-Virtual-Environments/VMWare/check_vmware_api/details
  3. Gli scheletri dei file di configurazione di Nagios sono tratti da Monitoring VMware ESXi and vSphere with Nagios riveduti e corretti by me
  4. Il dettaglio di tutto quello che si può monitorare con il plugin check_vmware_esxi.pl lo trovare nel sito di Op5 http://www.op5.com/how-to/monitoring-vmware-esx-3-x-esxi-vsphere-4-and-vcenter-server/ .
  5. Tutte, ma proprio tutte le opzioni le trovate con il comando
    /usr/local/nagios/libexec/check_vmware_api.pl --help
Byez

Ron. Drakken ha un chip per il controllo della mente?
Kim: Ancora un altro piano per la conquista del mondo.
Ron: Oppure vorrà obbligare la gente ad ascoltare le storie sulla sua infanzia contorta.

mercoledì, maggio 08, 2013

genkey CentOS 6.4 (null) error

- post<li> - Permalink

genkey CentOS 6.4 (null) error
Generare certificati self-signed (auto-firmati) su CentOS è piuttosto semplice (NO - non sono uno di quelli che considera semplici 10 comandi openssl con 10 parametri ognuno tra file .key e .crt).

Il comando per generare il certificato per un dominio https è semplicemente 

>genkey nomedominio.it

che attraverso un Wizard con poche semplici domande genera tutti i comandi openssl necessari con i relativi parametri al posto giusto.

Peccato che con l'aggiornamento a CentOS 6.4 sia stato introdotto un bug piuttosto fastidioso che portava a errori simili a questo

Made a key
Opened tmprequest for writing
(null): bad certificate request
: error -8016
(null): Segmentation fault (core dumped)

dovuto alla disabilitazione proprio nella versione 6.4 dell'algoritmo MD5 tra quelli utilizzabili dalla libreria NSS.

La soluzione, una volta trovata (come sempre), è piuttosto semplice.

> export NSS_HASH_ALG_SUPPORT=+MD5
> genkey www.nomedominio.it -days 375

Intuitivo no? ;-)

Mai capitato? A me ultimamente, spesso, allora, l'ho appuntato qui.

Byez

 Vorrei essere amato dalle creature semplici e non discusso dai sapienti di letteratura. 

venerdì, febbraio 08, 2013

Crashing Linux CentOS VMWare

- post<li> - Permalink

Crashing Linux CentOS VMWare

Descrizione del problema

Crashing Linux CentOS VMWare
Tra le Virtual Machine che gestisco ce ne era una biricchina che andava in crash senza apparenti particolari motivi.

Dovendo riavviarla a mano ogni volta, in attesa di trovare una soluzione permanente ho aggiunto a /etc/sysctl.conf la riga
kernel.panic = 20
in modo che si riavviasse in automatico in caso di problemi.

Anche con questa NON soluzione però il downtime era alto. Questo significava che il crash non era secco e definitivo, ma il SO prima di cedere completamente, "languiva", soffriva, per diversi minuti.

Essendo una VM Linux CentOS che fa hosting per siti web dinamici, ho subito pensato che fosse un problema legato al consumo eccessivo di RAM da parte di mysqld o di httpd magari scatenato da qualche DOS.
Appurato dall'analisi dei log degli stessi che non si trattava di questo, ho provato ad aumentare la RAM a disposizione della VM.

Aumentare la RAM a disposizione della VM non ha risolto il problema!

Cosa fare?

Diagnosi

Per diagnosticare il problema, intuendo che fosse qualcosa relativo alla memoria ho aggiunto il seguente comando al "crontab -e"
0 * * * * /usr/bin/top -b -d 60 -n 60 > /tmp/top.$(date "+\%Y-\%m-\%d_\%H:\%M").log
che mi ha prodotto una serie di file (1 ogni ora) con il campionamento ogni minuto dello stato del sistema e di eventuali processi "simpatici".
Dall'analisi di questi file, negli orari in cui si sono verificati i problemi, mi sono saltati subito agli occhi i dati in neretto.
---------------------------------------------------------------------------
top - 13:17:37 up 22:47,  1 user,  load average: 35.22, 16.17, 6.38
Tasks: 134 total,  37 running,  97 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,100.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3107156k total,  2988996k used,   118160k free,      136k buffers
Swap:   524280k total,   524280k used,        0k free,     7288k cached
---------------------------------------------------------------------------
buco nei log
---------------------------------------------------------------------------
top - 14:33:14 up 1 day, 2 min,  1 user,  load average: 69.21, 67.62, 63.53
Tasks: 164 total,  69 running,  95 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,100.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3107156k total,  2988872k used,   118284k free,      108k buffers
Swap:   524280k total,   524280k used,        0k free,     6112k cached
---------------------------------------------------------------------------
riavvio
---------------------------------------------------------------------------
top - 15:05:13 up 1 day, 34 min,  1 user,  load average: 28.66, 63.10, 68.51
Tasks: 130 total,   1 running, 129 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.5%us, 94.9%sy,  0.2%ni,  3.8%id,  0.5%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   3107156k total,  1148188k used,  1958968k free,    14880k buffers
Swap:   524280k total,   171828k used,   352452k free,   175056k cached
---------------------------------------------------------------------------
Si tratta del classico problema del Trashing! Bingo! Bisogna aumentare lo spazio di SWAP non la RAM disponibile!

Soluzione (Cura) - attenzione si sta operando su LVM - basta un attimo di distrazione per perdere tutti i dati!

  1. Aggiungere un disco alla Virtual Machine, io ne ho aggiunto uno da 2GB.
  2. Riavviare
  3. Leggere nel dmesg per riconoscere il disco. Es. nel mio caso
    SCSI device sda: 83886080 512-byte hdwr sectors (42950 MB)
    sda: Write Protect is off
    sda: Mode Sense: 61 00 00 00
    sda: cache data unavailable
    sda: assuming drive cache: write through
    SCSI device sda: 83886080 512-byte hdwr sectors (42950 MB)
    sda: Write Protect is off
    sda: Mode Sense: 61 00 00 00
    sda: cache data unavailable
    sda: assuming drive cache: write through
     sda: sda1 sda2
    sd 0:0:0:0: Attached scsi disk sda
      Vendor: VMware    Model: Virtual disk      Rev: 1.0
      Type:   Direct-Access                      ANSI SCSI revision: 02
     target0:0:1: Beginning Domain Validation
     target0:0:1: Domain Validation skipping write tests
     target0:0:1: Ending Domain Validation
     target0:0:1: FAST-40 WIDE SCSI 80.0 MB/s ST (25 ns, offset 127)
    SCSI device sdb: 4194304 512-byte hdwr sectors (2147 MB)
    sdb: Write Protect is off
    sdb: Mode Sense: 61 00 00 00
    sdb: cache data unavailable
    sdb: assuming drive cache: write through
    SCSI device sdb: 4194304 512-byte hdwr sectors (2147 MB)
    sdb: Write Protect is off
    sdb: Mode Sense: 61 00 00 00
    sdb: cache data unavailable
    sdb: assuming drive cache: write through
     sdb: unknown partition table
    sd 0:0:1:0: Attached scsi disk sdb
    
    
  4. Ora compare con
    > pvscan
      PV /dev/sda2   VG VolGroup00      lvm2 [39,88 GB / 0    free]
      PV /dev/sdb                       lvm2 [2,00 GB]
      Total: 2 [41,88 GB] / in use: 1 [39,88 GB] / in no VG: 1 [2,00 GB]
    
  5. Aggiungiamo il nuovo disco a VolgGroup00 con il comando
    #vgextend "VolGroup00" /dev/sdb
      Volume group "VolGroup00" successfully extended
    
  6. Ancora con
    >pvscan
      PV /dev/sda2   VG VolGroup00   lvm2 [39,88 GB / 0    free]
      PV /dev/sdb    VG VolGroup00   lvm2 [1,97 GB / 1,97 GB free]
      Total: 2 [41,84 GB] / in use: 2 [41,84 GB] / in no VG: 0 [0   ]
    
  7. Bene, ora abbiamo aggiunto il disco al VG (Volume Group), si possono seguire i passi indicati nell'articolo "17.2. Adding Swap Space" per aumentare lo spazio Swap. Quindi:
    # swapoff -v /dev/VolGroup00/LogVol01
    swapoff su /dev/VolGroup00/LogVol01
    
    #lvresize -l +100%FREE /dev/VolGroup00/LogVol01
      Extending logical volume LogVol01 to 2,47 GB
      Logical volume LogVol01 successfully resized
    
    # mkswap /dev/VolGroup00/LogVol01
    Impostazione spazio di swap versione 1, dimensione = 2650796 kB
    
    #swapon -v /dev/VolGroup00/LogVol01
    swapon su /dev/VolGroup00/LogVol01
    
  8. Ora si monitora ancora per un po' il log del "top" e se tutto è ok si rimuove la riga dal "crontab -e"
Questo è uno dei classici problemi abbastanza astrusi da diagnosticare, la cui "cura", per fortuna, risulta piuttosto semplice.

A voi è mai capitato?

Byez

Cuddy: Non nuocere è un punto fermo.
House: Si studia al secondo anno, vero? Ho avuto la mononucleosi quel quadrimestre.

martedì, ottobre 16, 2012

php_admin_value disable_functions = NON funziona

- post<li> - Permalink

phpinfo() disabled?
Cercando di mettere in sicurezza (non è mai troppa) i siti web in hosting sui miei server mi sono accorto di questa particolarità.

E' possibile  da file di configurazione di Apache andare a modificare i valori di PHP in modo da personalizzarli per ogni singolo VHost, il caso tipico è per esempio

#Securing
php_admin_flag allow_url_fopen Off
php_admin_value open_basedir "/var/www/webs/webXXX.com:/tmp" 


Allo stesso modo volevo, come riportato in più di un how-to disabilitare una serie di funzioni pericolose con il comando

php_admin_value disable_functions “show_source, system, shell_exec, passthru, exec, phpinfo, popen, proc_open”

Peccato che non funzioni! Apache lo digerisce, phpinfo() te la mostra come valore locale diverso dal generale, ma ti mostra che tra le funzioni disabilitate c'è proprio se stessa (vedi immagine articolo)!

L'unico modo per disabilitare delle funzioni è a livello globale dentro al php.ini come confermato da una(!) riga dentro alla documentazione ufficiale:

"This directive must be set in php.ini For example, you cannot set this in httpd.conf."

Facile no?

Che altre sicurezze configurate sempre nei vostri server web?

Byez

Se l'America fosse stata scoperta tante volte quante l'ho scoperta io, nessuno si ricorderebbe di Cristoforo Colombo.