<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>TommyBlue.it &#187; Nginx</title>
	<atom:link href="http://www.tommyblue.it/tag/nginx/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tommyblue.it</link>
	<description>Bombardare per la pace è un po' come trombare per la verginità...</description>
	<lastBuildDate>Tue, 24 Jan 2012 09:34:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Configurare i check passivi in Nagios per l&#8217;integrazione con Munin</title>
		<link>http://www.tommyblue.it/2010/09/16/configurare-i-check-passivi-in-nagios-per-l-integrazione-con-munin/</link>
		<comments>http://www.tommyblue.it/2010/09/16/configurare-i-check-passivi-in-nagios-per-l-integrazione-con-munin/#comments</comments>
		<pubDate>Thu, 16 Sep 2010 16:51:16 +0000</pubDate>
		<dc:creator>TommyBlue</dc:creator>
				<category><![CDATA[How-To]]></category>
		<category><![CDATA[Informatica]]></category>
		<category><![CDATA[ALIX]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[Debian Voyage]]></category>
		<category><![CDATA[Embedded]]></category>
		<category><![CDATA[Lighttpd]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[Munin]]></category>
		<category><![CDATA[Nagios]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[NRPE]]></category>
		<category><![CDATA[NSCA]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[postfix]]></category>

		<guid isPermaLink="false">http://www.tommyblue.it/?p=990</guid>
		<description><![CDATA[Continuo la serie di guide sulla configurazione di Nagios spiegando come attivare i check passivi con NSCA e come usare Munin per avvertire Nagios di ciò che non va&#8217;. Intanto ricordo i link alla prima e alla seconda parte della guida: Parte 1 Parte 2 Tornando a Nagios e Munin: l&#8217;uso dei check passivi può [...]]]></description>
			<content:encoded><![CDATA[<p>Continuo la serie di guide sulla configurazione di Nagios spiegando come attivare i check passivi con <a href="http://www.nagios.org/download/addons" target="_blank">NSCA</a> e come usare Munin per avvertire Nagios di ciò che non va&#8217;.</p>
<p>Intanto ricordo i link alla prima e alla seconda parte della guida:</p>
<ul>
<li><a href="http://www.tommyblue.it/2010/02/12/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-1/">Parte 1</a></li>
<li><a href="http://www.tommyblue.it/2010/02/17/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-2/">Parte 2</a></li>
</ul>
<p>Tornando a Nagios e Munin: l&#8217;uso dei check passivi può tornare utile se si va ad installare Nagios in una rete in cui è già presente Munin che, per chi non lo conoscesse, è un software che crea grafici di andamento di una lunga serie di servizi o aspetti dei server (anch&#8217;esso configurabile con agenti su vari server e un&#8217;applicazione centralizzata per la raccolta dei dati).<br />
Se Munin non fosse già installato si può valutare una configurazione Nagios-centrica con i check effettuati da NRPE e i grafici fatti con <a href="http://nagiosgraph.sourceforge.net/" target="_blank">NagiosGraph</a>.</p>
<p>Nel mio caso era già presente Munin e ho quindi optato per la configurazione dei check passivi.<span id="more-990"></span></p>
<h2>Configurazione del server (Nagios e nsca)</h2>
<p>Si comincia come sempre installando i pacchetti necessari:</p>
<pre>apt-get install libmcrypt-dev xinetd</pre>
<p>Quindi si scarica NSCA dalla <a href="http://www.nagios.org/download/addons" target="_blank">pagina degli addon di Nagios</a>, si scompatta, si compila e si installa:</p>
<pre>tar xzf nsca-2.7.2.tar.gz
cd nsca-2.7.2/
./configure prefix=/usr/local/nagios --with-nsca-user=nagios --with-nsca-grp=nagcmd
make all
cp -a src/nsca /usr/local/nagios/bin/
cp sample-config/nsca.cfg /usr/local/nagios/etc/
chown nagios:nagcmd /usr/local/nagios/etc/nsca.cfg
chmod g+r /usr/local/nagios/etc/nsca.cfg
cp sample-config/nsca.xinetd /etc/xinetd.d/nsca</pre>
<p>Bisogna anche aggiungere al file <em>/etc/services</em> il servizio NSCA con la riga:</p>
<pre>nsca    5667/tcp    # NSCA</pre>
<p>Nel file <em>/etc/xinetd.d/nsca</em> bisogna modificare il parametro <em>only_from</em> per consentire l&#8217;accesso al server in cui gira Munin, poi possiamo riavviare xinetd.</p>
<h2>Configurazione del client (send_nsca e Munin)</h2>
<p>Nel client da cui arriveranno i check (ovvero dove gira Munin) bisogna ugualmente scaricare il pacchetto NSCA e compilarlo. Differisce l&#8217;installazione del binario che in questo caso è <strong>send_nsca</strong> e può essere posizionato dove si vuole (stessa cosa vale per il suo file di configurazione). Dato che nel mio caso Munin e Nagios sono sullo stesso server ho usato la directory di Nagios per ospitare questi file:</p>
<pre>cp -a src/send_nsca /usr/local/nagios/bin/
cp sample-config/send_nsca.cfg /usr/local/nagios/etc/</pre>
<p>Se i due software sono su server diversi potete impostare un metodo di cifratura nel file <em>send_nsca.cfg</em> e impostare una password (che deve essere la stessa sul server e sul client).</p>
<p><strong>Proviamo adesso se <em>send_nsca</em> funziona.</strong> I check passivi consistono in una riga contenente:</p>
<pre>HOSTNAME[tab]SERVIZIO[tab]CODICE[tab]DESCRIZIONE</pre>
<p>quindi per fare un test possiamo creare un file con il contenuto:</p>
<pre>hostAcaso   pippo   0   OK</pre>
<p>e fare un test di connessione con:</p>
<pre>/usr/local/nagios/bin/send_nsca localhost -c /usr/local/nagios/etc/send_nsca.cfg &lt; test
1 data packet(s) sent to host successfully.</pre>
<p>Nei log di Nagios troveremo:</p>
<pre>nagios: Warning:  Passive check result was received for service 'pippo' on host 'hostAcaso', but the host could not be found!</pre>
<p>Funziona! Non fatevi spaventare dal <em>warning</em>: Nagios ha ricevuto il check ma non ha nessun host corrispondente nella sua configurazione. Niente di male, glielo spiegheremo più tardi.</p>
<p>Possiamo quindi configurare Nagios per accettare i check passivi. Per farlo andiamo nel server e inseriamo nel file <em>etc/objects/templates.cfg</em> il template per un servizio che accetta sono check passivi:</p>
<pre>define service{
 name                            passive-service
 use                             generic-service
 active_checks_enabled           0
 passive_checks_enabled          1
 flap_detection_enabled          0
 register                        0
 is_volatile                     0
 check_period                    24x7
 max_check_attempts              1
 normal_check_interval           5
 retry_check_interval            1
 check_freshness                 0
 contact_groups                  admins
 notification_options            w,u,c,r
 stalking_options                w,c,u
 notification_interval           120
 check_command                   check_dummy!0
}</pre>
<p>Inseriamo poi nel file <em>etc/objects/commands.cfg</em> la definizione del comando <em>check_dummy</em>:</p>
<pre>define command{
 command_name    check_dummy
 command_line    $USER1$/check_dummy $ARG1$
}</pre>
<p>Fatto questo possiamo inserire un check di prova in un host:</p>
<pre>define service{
 use                             passive-service
 host_name                       hostCheEsiste
 service_description             TestMessage
}</pre>
<p>Una volta riavviato Nagios vedremo questo servizio in stato pending. Modificando il file di prima con:</p>
<pre>hostCheEsiste    TestMessage    0     Messaggio di OK</pre>
<p>ed eseguendo nuovamente:</p>
<pre>/usr/local/nagios/bin/send_nsca localhost -c /usr/local/nagios/etc/send_nsca.cfg &lt; test</pre>
<p>possiamo mettere il servizio in stato di OK.</p>
<p>Per finire dobbiamo dire a Munin di chiamare Nagios quando qualcosa non va. Per farlo dobbiamo modificare il file <em>munin.conf</em> inserendo:</p>
<pre>contacts nagios
contact.nagios.command /usr/local/nagios/bin/send_nsca -H localhost -c /usr/local/nagios/etc/send_nsca.cfg</pre>
<p>Modificate le path secondo la vostra configurazione e inserite nel file <em>send_nsca.cfg</em> l&#8217;eventuale password per comunicare con NSCA.</p>
<h2>Ma come funzionano in dettaglio gli avvertimenti di Munin?</h2>
<p>Munin si basa su plugin e ognuno di essi ha dei limiti. Per vederli basta lanciare (in questo caso interrogo il plugin <strong>cpu</strong>):</p>
<pre>munin-run cpu config</pre>
<p>Nella risposta si possono individuare i limiti:</p>
<pre>system.warning 60
system.critical 100</pre>
<p>Tali limiti possono essere monitorati da munin-limits, un eseguibile che, per essere lanciato automaticamente, va inserito in crontab. Di base ne trovate una configurazione in <em>/etc/cron.d/munin</em> (se non c&#8217;è createlo). Io l&#8217;ho modificato così:</p>
<pre>*/5 * * * *     munin if [ -x /usr/share/munin/munin-limits ]; then /usr/share/munin/munin-limits --force --contact nagios --contact old-nagios; fi</pre>
<p>Quindi ogni 5 minuti fa il check e contatta Nagios per passargli il risultato.</p>
<p>L&#8217;ultima cosa da fare è adattare i limiti di ogni plugin secondo le proprie esigienze. Si possono definire in <em>munin.conf</em> per ogni host:</p>
<pre>df._mapper_sda1_vm_root.warning      0:90
df._mapper_sda1_vm_root.critical     0:95
df.notify_alias     Disk usage</pre>
<p>La logica con cui vengono definiti i limiti è un po&#8217; cervellotica e dipende molto dal tipo di plugin. In questo caso ho usato <strong>df</strong> che controlla l&#8217;uso del disco.<br />
Il limite di warning 0:90 viene superato se il limite è al di fuori di questo range (il range è 0:100). Ma a sua volta il limite critico è al di fuori del range 0:95. Il risultato è che il plugin entra in <strong>warning</strong> se la partizione è occupata tra il 90% e il 94% e in <strong>critical</strong> da 95% in sù.<br />
Vi lascio divertire con gli altri plugin :)</p>
<h2>Inseriamo in Nagios questi check</h2>
<p>Ho già mostrato prima come inserire un check passivo in un host, ovvero:</p>
<pre>define service{
 use                             passive-service
 host_name                       hostCheEsiste
 service_description             TestMessage
}
</pre>
<p>Per accettare un check passivo valido da Munin bisogna modificare <strong>service_description</strong> affinchè sia uguale al nome del servizio che definisce il plugin di Munin. Dato che hanno nomi non facilmente individuabili e che a volte contengono caratteri incompatibili con Nagios (ad esempio %) una cosa furba è rinominarli in <em>munin.conf</em> con <strong>.notify_alias</strong> (guardate qualche riga più in sù nel caso del <strong>df</strong>) e usare quell&#8217;alias in Nagios.</p>
<p>A questo punto la teoria è finita e non rimane altro da fare che iniziare a scrivere le definizioni dei check in Nagios e le configurazioni dei plugin in Munin, buon lavoro!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tommyblue.it/2010/09/16/configurare-i-check-passivi-in-nagios-per-l-integrazione-con-munin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Costruirsi un sistema di monitoraggio &#8220;casalingo&#8221; con Nagios – parte 2</title>
		<link>http://www.tommyblue.it/2010/02/17/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-2/</link>
		<comments>http://www.tommyblue.it/2010/02/17/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-2/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 14:01:37 +0000</pubDate>
		<dc:creator>TommyBlue</dc:creator>
				<category><![CDATA[How-To]]></category>
		<category><![CDATA[Informatica]]></category>
		<category><![CDATA[ALIX]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[Debian Voyage]]></category>
		<category><![CDATA[Embedded]]></category>
		<category><![CDATA[Lighttpd]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[Nagios]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[NRPE]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[postfix]]></category>

		<guid isPermaLink="false">http://www.tommyblue.it/?p=853</guid>
		<description><![CDATA[Costruzione di un sistema di monitoraggio a basso costo con una scheda embedded x86, Debian Voyage e Nagios]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.tommyblue.it/2010/02/12/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-1/"><strong>Leggi la prima parte della guida</strong></a></p>
<p>In questa seconda parte della guida illustrerò alcune <strong>configurazioni di base</strong> per i check di <a title="Nagios" href="http://www.nagios.org/" target="_blank">Nagios</a> e l&#8217;uso dell&#8217;addon <strong>NRPE</strong> per check locali su sistemi remoti.</p>
<h3>La struttura</h3>
<p>In questa guida prenderò in considerazione la struttura qui si seguito che permette di illustrare vari tipi di configurazione:</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-860" title="Schema Nagios" src="http://www.tommyblue.it/wp-content/uploads/2010/02/schema-nagios.jpg" alt="" width="450" height="454" /></p>
<p>Una panoramica sugli host e i servizi:</p>
<ul>
<li>Host A, server Linux con:
<ul>
<li>Server HTTP Apache</li>
<li>VMWare Server con una macchina virtuale E con un server Zimbra</li>
</ul>
</li>
<li>Host B, server Linux con:
<ul>
<li>Server HTTP Apache</li>
<li>Server MySQL</li>
</ul>
</li>
</ul>
<p>Quindi E dipende da C che a sua volta dipende da A. Invece D dipende da B.<br />
Entrambi i server Apache rispondono sulle porte 80 e 443, l&#8217;interfaccia di amministrazione di VMWare Server risponde sulla porta 8333 (con SSL).<br />
La macchina virtuale Zimbra fornisce i servizi SMTP, POP3 e le interfaccie di webmail e amministrazione (porta 7071).<br />
Infine nella macchina B il server MySQL risponde solo sull&#8217;interfaccia locale, non è quindi possibile accedervi dall&#8217;esterno.</p>
<p><span id="more-853"></span>Negli esempi successivi gli elementi <strong>A</strong>, <strong>C</strong> ed <strong>E</strong> saranno del cliente <em>Company A</em> (dominio <em>company-a.com</em>) e <strong>B</strong> e <strong>D</strong> saranno del cliente <em>Company B</em> con dominio <em>company-b.com</em>.<br />
I nomi host saranno i seguenti:</p>
<ul>
<li><em>A =&gt; web.company-a.com<br />
</em></li>
<li><em>C (macchina virtuale) =&gt; mail.company-a.com<br />
</em></li>
<li><em>B =&gt; web.company-b.com</em></li>
</ul>
<p>Per un maggior dettaglio nella spiegazione delle singole configurazioni tenete sempre sott&#8217;occhio la guida ufficiale alla pagina <a href="http://nagios.sourceforge.net/docs/3_0/objectdefinitions.html" target="_blank"><strong>Object Definitions</strong></a>.</p>
<h3>Organizzazione dei file</h3>
<p>Una volta installato Nagios seguendo la <a href="http://www.tommyblue.it/2010/02/12/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-1/">prima parte della guida</a>, troverete tutte le configurazioni in <em>/usr/local/nagios/etc</em>. Il file che <em>comanda</em> è <em>nagios.cfg</em> il quale poi richiama tutti gli altri. È quindi possibile, e consigliabile, creare una gerarchia di file che possa poi più facilmente permettere di gestire tutte le configurazioni (senza <em>perdersi</em> per strada i vari pezzi).<br />
Nel file <em>nagios.cfg</em> ci sono due direttive inerenti questo aspetto e sono <em>cfg_file</em> e <em>cfg_dir</em>. La prima indica direttamente un file da cui leggere ulteriori configurazioni, la seconda indica intere directory da cui saranno inclusi tutti i file che terminano con <em>.cfg</em>. Io consiglio di intervenire usando questa seconda direttiva, le cartelle che ho creato sono:</p>
<pre>cfg_dir=/usr/local/nagios/etc/personalized_objects
cfg_dir=/usr/local/nagios/etc/servers
cfg_dir=/usr/local/nagios/etc/groups</pre>
<p>Oltre alle due cartelle con le configurazioni dei server e dei gruppi, ho aggiunto una cartella in cui inserirò i <em>template</em> personalizzati, ad esempio con <em>timeperiods</em> o <em>contact groups</em> diversi da quelli standard.</p>
<h3>Gruppi di host e servizi</h3>
<p>È possibile definire dei gruppi di host (ad esempio a seconda dell&#8217;azienda di appartenenza o del tipo di hardware) e dei gruppi di servizi (server di posta, server web, ecc.). Personalmente inserisco queste configurazioni nella cartella <em>groups</em>.</p>
<p>Esempi di configurazione sono i seguenti:</p>
<pre>define hostgroup{
    hostgroup_name     companyA-servers
    alias              Company A Servers
    members            mail.company-a.com,web.company-a.com
}
define hostgroup{
    hostgroup_name     companyB-servers
    alias              Company B Servers
    members            web.company-b.com
}
define servicegroup{
    servicegroup_name  web-servers
    alias              Web Servers
    members            web.company-a.com,HTTP,web.company-b.com,HTTP
}</pre>
<p>In entrambi i casi gli host indicati in <em>members</em> devono ricalcare il nome con cui quegli host sono definiti (attributo <em>host_name</em>). Nel caso dei servizi, oltre al nome dell&#8217;host, deve essere indicato il nome del servizio (anche in questo caso deve essere uguale a quello inserito in <em>service_description</em>).</p>
<h3>Definizione degli host</h3>
<p>Iniziamo con la configurazione dei server. I file <em>web.company-a.com.cfg</em>, <em>web.company-b.com.cfg</em> e <em>mail.company-a.com.cfg</em> verranno creati nella cartella <em>servers</em>. Non c&#8217;è molto da spiegare, inserisco dei commenti direttamente nelle configurazioni:</p>
<p><em><strong>web.company-a.com.cfg</strong></em></p>
<pre>define host {
    use             linux-server   ;   Template da cui ereditare
    host_name       web.company-a.com   ;   L'host name è ciò che viene usato per identificare l'host negli altri file
    alias           CompanyA Web Server
    address         1.2.3.4
    hostgroups      comapanyA-servers   ;   Come in hostgroup, tale configurazione può essere alternativa o in aggiunta
}</pre>
<p><em><strong>web.company-b.com.cfg</strong></em></p>
<pre>define host {
    use             linux-server
    host_name       web.company-b.com
    alias           CompanyB Web Server
    address         1.2.3.5
    hostgroups      comapanyB-servers
}</pre>
<p><em><strong>mail.company-a.com.cfg</strong></em></p>
<pre>define host {
    use             linux-server
    host_name       mail.company-a.com
    alias           CompanyA Web Server
    address         1.2.3.6
    hostgroups      comapanyA-servers
    parents         web.company-a.com   ;   L'host da cui questo host dipende
}</pre>
<h3>Definizione dei servizi</h3>
<p>La definizione dei servizi è direttamente collegata ai plugin, ovvero usano questi ultimi per effettuare i check. In verità il valore dell&#8217;attributo <em>check_command</em>, anche se in genere ricalca il nome del plugin (i plugin sono nella cartella <em>libexec</em>), non lo indica direttamente ma ha una corrispondenza nel valore dell&#8217;attributo <em>command_name</em> nella definizione di un comando (file <em>etc/objects/commands.cfg</em>).</p>
<p><em><strong>mail.company-a.com.cfg</strong></em></p>
<pre>define service {
 use                     generic-service
 host_name               mail.company-a.com
 service_description     SMTP
 check_command           check_smtp!-t 5
}
define service {
 use                     generic-service
 host_name               mail.company-a.com
 service_description     IMAP
 check_command           check_imap!-t 5
}
define service {
 use                     generic-service
 host_name               mail.company-a.com
 service_description     POP3
 check_command           check_pop!-t 5
}</pre>
<p>Nella direttiva <em>check_command</em> viene indicato il tipo di comando da eseguire. Dopo il punto esclamativo vengono indicati gli argomenti. Se date uno sguardo a <em>etc/objects/commands.cfg</em> vedrete che gli argomenti vengono passati al plugin con <em>$ARG1$, $ARG2$, ecc</em>. In alcuni è presente soltanto un argomento, quindi nella definizione del servizio, dopo il punto esclamativo, devono essere indicati tutti gli argomenti (tipo <em>./check_dummy -t pippo -x pluto</em>) mentre in altri comandi sono presenti più argomenti, spesso associati ad una specifica opzione (tipo <em>./check_dummy -t </em><em>$ARG1$</em><em> -x </em><em>$ARG2$</em>). Nella definizione del servizio, più argomenti possono essere indicati con più punti esclamativi (tipo <em>check_dummy!pippo!pluto</em>). Per avere più informazioni su un plugin lanciatelo con <em>libexec/check_dummy &#8211;help</em>.</p>
<p>Un esempio di check un po&#8217; più complesso può essere, ad esempio, quello necessario per controllare se l&#8217;interfaccia di amministrazione di Zimbra sta girando correttamente (HTTPS sulla porta 7071):</p>
<p><em><strong>mail.company-a.com.cfg</strong></em></p>
<pre>define service{
 use                             generic-service
 host_name                       mail.comapany-a.com
 service_description             ZimbraAdmin
 check_command                   check_http!"-H mail.company-a.com -p 7071 -w 5 -c 15 --ssl"
}</pre>
<p>Com&#8217;è facile intuire, con <em>check_http</em> è possibile quindi monitorare ogni singolo sito presente su un server web.</p>
<p>Ecco gli altri file necessari per la nostra configurazione:</p>
<p><em><strong>web.company-a.com.cfg</strong></em></p>
<pre>define service{
 use                             generic-service
 host_name                       web.company-a.com
 service_description             HTTP
 check_command                   check_http   ;   Semplice check sulla porta 80
}</pre>
<pre>define service{
 use                             generic-service
 host_name                       web.company-a.com
 service_description             VMWareAdmin
 check_command                   check_http!"-H web.company-a.com -p 8333 -w 5 -c 15 --ssl"
}</pre>
<p><em><strong>web.company-b.com.cfg</strong></em></p>
<pre>define service{
 use                             generic-service
 host_name                       web.company-b.com
 service_description             HTTP
 check_command                   check_http
}</pre>
<h3>NRPE</h3>
<p>L&#8217;ultima cosa che rimane da controllare è lo stato del server MySQL. Dato che il servizio risponde soltanto sull&#8217;interfaccia locale non è possibile controllarne direttamente lo stato dal server Nagios. L&#8217;addon<em> NRPE </em>fa proprio questo: installato sulla macchina da controllare, esegue dei check locali quando interrogato da Nagios.Il plugin da usare sul server è <em>check_nrpe</em> e l&#8217;argomento da passargli è il nome del check definito nel client, il quale a sua volta dovrà associare questo nome ad un check locale (quindi sul client dobbiamo installare i plugin).</p>
<p>Su entrambe le macchine va compilato  l&#8217;addon:</p>
<pre>tar xzf nrpe-2.12.tar.gz
cd nrpe-2.12/
./configure --enable-ssl
make all</pre>
<p>A questo punto l&#8217;installazione tra host e client differisce. Per l&#8217;installazione nel client dei plugin seguite la <a href="http://www.tommyblue.it/2010/02/12/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-1/" target="_blank">prima parte della guida</a>.</p>
<p><strong>Host</strong></p>
<pre>make install-plugin</pre>
<p>e quindi bisogna creare il template del comando:</p>
<p><em><strong>commands.cfg</strong></em></p>
<pre>define command {
 command_name    check_nrpe
 command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}</pre>
<p><strong>Client</strong></p>
<p>Se non è installato, installate <em>xinetd</em>:</p>
<pre>apt-get install xinetd</pre>
<p>Installate quindi il demone</p>
<pre>make install-daemon
make install-daemon-config
make install-xinetd</pre>
<p>Aggiungete NRPE al file <em>/etc/services</em>:</p>
<pre>nrpe 5666/tcp # NRPE</pre>
<p>Aggiungete l&#8217;ip del server Nagios al file <em>/etc/xinetd.d/nrpe</em> (in questo caso un fittizio <em>4.3.2.1</em>):</p>
<pre>only_from = 127.0.0.1 4.3.2.1</pre>
<p>Infine riavviate il server xinetd e controllate che NRPE sia in ascolto:</p>
<pre>~# /etc/init.d/xinetd restart
~# netstat -at | grep nrpe
tcp        0      0 *:nrpe                  *:*                     LISTEN</pre>
<p>A questo punto si può testare il servizio in locale con:</p>
<pre>~# /usr/local/nagios/libexec/check_nrpe -H localhost
NRPE v2.12</pre>
<p><strong>Controllare MySQL</strong></p>
<p>Arriviamo al nostro obiettivo: controllare che il server MySQL stia correttamente girando. Creiamo un utente MySQL non privilegiato:</p>
<pre>mysql&gt; CREATE USER 'nagiosCheck'@'localhost' IDENTIFIED BY 'some_pass';</pre>
<p>Il check, lanciato da linea di comando, sarà il seguente:</p>
<pre>~# /usr/local/nagios/libexec/check_mysql -u nagiosCheck -p some_pass
Uptime: 1061012  Threads: 2  Questions: 192277  Slow queries: 0  Opens: 198  Flush tables: 1  Open tables: 64  Queries per second avg: 0.181</pre>
<p>Inseriamo quindi tale check in <em>/usr/local/nagios/etc/nrpe.cfg</em>:</p>
<pre>command[check_mysql]=/usr/local/nagios/libexec/check_mysql -u nagiosCheck -p some_pass</pre>
<p>Da notare che nel server Nagios il nome dell&#8217;argomento da passare a <em>check_nrpe </em>sarà <em>check_mysql</em> come definito tra le parentesi quadre.<br />
A questo punto dal server Nagios si può testare il check remoto:</p>
<pre>~# /usr/local/nagios/libexec/check_nrpe -H tomcat.mydomain.com -c check_mysql
Uptime: 1061534  Threads: 2  Questions: 192280  Slow queries: 0  Opens: 198  Flush tables: 1  Open tables: 64  Queries per second avg: 0.181</pre>
<p>Se è tutto ok non resta che inserirlo tra i servizi dell&#8217;host <strong>B</strong>:</p>
<p><em><strong>web.company-b.com.cfg</strong></em></p>
<pre>define service{
 use                             generic-service
 host_name                       web.company-b.com
 service_description             MySQL
 check_command                   check_nrpe!check_mysql
}</pre>
<p>E questo conclude la configurazione della nostra rete di test. Nella prossima <em>puntata</em> spiegherò come configurare dei server <em>slave</em> per effettuare check passivi, necessari, ad esempio, in configurazioni di rete complesse in cui il server <em>master</em> non può direttamente raggiungere gli host da controllare (se l&#8217;host da controllare è all&#8217;interno di una LAN, per dirne una).</p>
<p><a href="http://www.tommyblue.it/2010/02/12/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-1/"><strong>Leggi la prima parte della guida</strong></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tommyblue.it/2010/02/17/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Costruirsi un sistema di monitoraggio &#8220;casalingo&#8221; con Nagios &#8211; parte 1</title>
		<link>http://www.tommyblue.it/2010/02/12/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-1/</link>
		<comments>http://www.tommyblue.it/2010/02/12/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-1/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 19:49:08 +0000</pubDate>
		<dc:creator>TommyBlue</dc:creator>
				<category><![CDATA[How-To]]></category>
		<category><![CDATA[Informatica]]></category>
		<category><![CDATA[ALIX]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[Debian Voyage]]></category>
		<category><![CDATA[Embedded]]></category>
		<category><![CDATA[Lighttpd]]></category>
		<category><![CDATA[Monitoring]]></category>
		<category><![CDATA[Nagios]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[postfix]]></category>

		<guid isPermaLink="false">http://www.tommyblue.it/?p=812</guid>
		<description><![CDATA[Costruzione di un sistema di monitoraggio a basso costo con una scheda embedded x86, Debian Voyage e Nagios]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-813" title="Embedded PC" src="http://www.tommyblue.it/wp-content/uploads/2010/02/embedded.jpg" alt="" width="300" height="254" />Se, come me, avete vari server a giro per il mondo a cui fare da baby-sitter, probabilmente avrete sentito la necessità di avere tutto sotto controllo e di scoprire (e magari risolvere) i problemi non appena si presentano.</p>
<p>Dopo aver configurato sistemi di monitoraggio per alcune P.A. e aziende, mi sono deciso a farlo anche per i miei server e descriverò in queste pagine ciò che ho fatto o sto ancora facendo.</p>
<p>Dividerò questa guida in più parti, per renderla più leggibile e per poter facilmente aggiungere nuove parti via via che incremento le funzionalità del sistema.</p>
<p>Questa prima parte descrive l&#8217;<strong>hardware</strong> scelto, l&#8217;<strong>installazione del sistema operativo</strong> e l&#8217;<strong>installazione base di <a title="Nagios" href="http://www.nagios.org/" target="_blank">Nagios</a></strong>.<br />
<span id="more-812"></span></p>
<h3>Hardware</h3>
<p>La scelta dell&#8217;hardware è caduta su un <em>embedded</em> acquistato (per circa 80€) su <a title="PC Engines" href="http://www.pcengines.ch" target="_blank">pcengines.ch</a> ampiamente in grado di fornire la <strong>potenza</strong> necessaria allo scopo e con <strong>consumi</strong> estremamente limitati.</p>
<p>Nello specifico ecco le caratteristiche principali:</p>
<div id="_mcePaste">
<ul>
<li><strong>CPU</strong>: 500 MHz AMD Geode LX800</li>
<li><strong>DRAM</strong>: 256 MB DDR DRAM</li>
<li><strong>Storage</strong>: CompactFlash socket</li>
<li><strong>Power</strong>: DC jack or passive POE, min. 7V to max. 20V</li>
<li><strong>Expansion</strong>: 2 miniPCI slots, dual USB port</li>
<li><strong>Connectivity</strong>: 2 Ethernet channels (Via VT6105M 10/100)</li>
</ul>
</div>
<p>Oltre alla scheda ho acquistato anche il case (damn! non avevano quello rosa shocking!) e l&#8217;alimentatore.</p>
<p>Costo complessivo <strong>101,31€</strong> così distribuiti:</p>
<ul>
<li><strong>Scheda</strong>: 72,23 €</li>
<li><strong>Case</strong>: 6,63 €</li>
<li><strong>Alimentatore</strong>: 4,05 €</li>
<li><strong>Spedizione</strong>: 18,40 €</li>
</ul>
<p>A questo è necessario aggiungere una memoria <strong>CompactFlash</strong> (io ne ho usata una da 2GB), un <strong>lettore/scrittore di tali memorie</strong> e un <strong>adattatore seriale&lt;=&gt;USB</strong> (o soltanto un cavo seriale se avete una porta adatta). Attenzione al cavo seriale che deve essere RS-232 altrimenti la connessione non funziona.</p>
<h3>Sistema operativo</h3>
<p>Il sistema operativo scelto è <a title="Debian Voyage" href="http://linux.voyage.hk/" target="_blank">Debian Voyage</a>, una versione di Debian ottimizzata per le piattaforme <strong>embedded x86</strong>. La sua installazione sulla CompactFlash è estremamente semplice e veloce (per i dettagli vi rimando alla <a title="Wiki di Debian Voyage" href="http://wiki.voyage.hk/dokuwiki/doku.php?id=installation" target="_blank">pagina wiki dedicata</a>).<br />
Una volta installato si può montare la memoria nella mainboard e agganciare il pc via seriale. Per visualizzare la console remota si può usare il software <strong>screen</strong>:</p>
<pre>screen /dev/ttyUSB0 38400</pre>
<p>Si può quindi alimentare la scheda e osservare il boot. Per accedere la prima volta a voyager usare l&#8217;utente <em>root </em>con password <em>voyage</em>.<br />
Consiglio di configurare subito la rete con un ip statico (usate <em>/etc/network/interfaces</em>) e installare <em>openssh-server</em> che permetterà di lavorare in remoto con la console preferita.</p>
<p>Per prepararsi all&#8217;installazione di Nagios dobbiamo fare un po&#8217; di cose:</p>
<pre>apt-get install locales dialog build-essential apache2 libapache2-mod-php5 mailx postfix
addgroup --system nagios
adduser --system --no-create-home --home /usr/local/nagios --ingroup nagios --disabled-password nagios
addgroup --system nagcmd
usermod -a -G nagcmd nagios
usermod -a -G nagcmd www-data</pre>
<p>Configuriamo <a title="Postfix" href="http://www.postfix.org" target="_blank">Postfix</a> con i parametri corretti per la nostra connessione e inseriamo in <em>/etc/aliases</em> l&#8217;alias per l&#8217;utente root:</p>
<pre>postmaster: root
nagios: root
root: io@mio-dominio.com</pre>
<p>e aggiorniamo:</p>
<pre>newaliases
</pre>
<p>Anzichè <a title="Apache" href="http://www.apache.org" target="_blank">Apache</a> (un po&#8217; oneroso in termini di memoria consumata) volevo usare <a title="Nginx" href="http://nginx.org/" target="_blank">Nginx</a> ma per configurarlo per fornire pagine <a title="PHP" href="http://www.php.net" target="_blank">PHP</a> è necessario lavorarci un po&#8217;, quindi lascio questa configurazione per il futuro (considererò anche l&#8217;eventuale uso di <a title="Lighttpd" href="http://www.lighttpd.net/" target="_blank">Lighttpd</a>).</p>
<h3>Nagios</h3>
<p>Si può quindi iniziare a installare il software di monitoraggio, ovviamente <a title="Nagios" href="http://www.nagios.org/" target="_blank">Nagios</a>. Per alcuni check potrebbero essere necessari alcuni pacchetti, eccone alcuni tra i più comuni:</p>
<pre>apt-get install libgd2-xpm libgd2-xpm-dev libpng3 libpng3-dev libjpeg62 libjpeg-dev zlib1g zlib1g-dev libnet-snmp-perl snmp libssl-dev libpq-dev libmysqlclient15-dev smbclient qstat fping libradiusclient-ng-dev libldap2-dev</pre>
<p>Scarichiamo <a title="Download Nagios Core" href="http://www.nagios.org/download/core/" target="_blank">Nagios Core</a> in <em>/usr/src</em> e compiliamolo:</p>
<pre>tar xzf nagios-3.2.0.tar.gz
cd nagios-3.2.0/
./configure --prefix=/usr/local/nagios --with-command-group=nagcmd --with-httpd-conf=/etc/apache2/conf.d/
make all
make install
make install-init
make install-commandmode
make install-config
make install-webconf</pre>
<p>Per ulteriori informazioni seguite la <a title="Guida a Nagios" href="http://nagios.sourceforge.net/docs/3_0/quickstart.html" target="_blank">guida ufficiale</a>.<br />
Compiliamo e installiamo anche i plugin, scaricati da <a title="Download Nagios Plugins" href="http://www.nagios.org/download/plugins/" target="_blank">qui</a>:</p>
<pre>tar xzf nagios-plugin-1.4.14.tar.gz
cd nagios-plugin-1.4.14
./configure  --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios
make
make install</pre>
<p>Creiamo adesso la password per l&#8217;accesso a Nagios:</p>
<pre>htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin</pre>
<p>Se cambiate il nome utente sostituite tutte le occorrenze di <em>nagiosadmin</em> col nuovo utente nel file <em>/usr/local/nagios/etc/cgi.cfg</em>.<br />
Aggiungiamo Nagios all&#8217;avvio del sistema:</p>
<pre>update-rc.d nagios defaults</pre>
<p>e iniziamo la configurazione. Una volta terminato, prima di lanciare o riavviare Nagios, possiamo verificare la correttezza della configurazione con:</p>
<pre>/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
</pre>
<p>La prima parte della guida termina qui, nella prossima vedremo come configurare i check di base e i controlli remoti con <a title="Nagios NRPE" href="http://www.nagios.org/download/addons/" target="_blank">Nagios NRPE</a>.</p>
<p><a href="http://www.tommyblue.it/2010/02/17/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-2/"><strong>Leggi la seconda parte della guida</strong></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tommyblue.it/2010/02/12/costruirsi-un-sistema-di-monitoraggio-casalingo-con-nagios-parte-1/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Deploy di applicazioni Rails con Unicorn e Nginx</title>
		<link>http://www.tommyblue.it/2009/11/14/deploy-di-applicazioni-rails-con-unicorn-e-nginx/</link>
		<comments>http://www.tommyblue.it/2009/11/14/deploy-di-applicazioni-rails-con-unicorn-e-nginx/#comments</comments>
		<pubDate>Sat, 14 Nov 2009 17:15:41 +0000</pubDate>
		<dc:creator>TommyBlue</dc:creator>
				<category><![CDATA[How-To]]></category>
		<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Nginx]]></category>
		<category><![CDATA[RubyOnRails]]></category>
		<category><![CDATA[Unicorn]]></category>

		<guid isPermaLink="false">http://www.tommyblue.it/?p=705</guid>
		<description><![CDATA[Come avevo promesso avrei dedicato del tempo ad indagare circa le possibilità offerte da Unicorn per il deploy delle applicazioni Ruby On Rails. Di seguito un riepilogo di quel che ho fatto per configurare il nuovo deploy di Kickin&#8217; utilizzando Unicorn, Nginx e Apache. Unicorn L&#8217;installazione di Unicorn si fa &#8220;di tacco&#8221; (per una descrizione [...]]]></description>
			<content:encoded><![CDATA[<p>Come <a href="http://www.tommyblue.it/2009/10/08/unicorn-rack-http-server-for-unix-and-fast-clients/">avevo promesso</a> avrei dedicato del tempo ad indagare circa le possibilità offerte da <a href="http://unicorn.bogomips.org/" target="_blank">Unicorn</a> per il deploy delle applicazioni Ruby On Rails. Di seguito un riepilogo di quel che ho fatto per configurare il nuovo deploy di <a href="http://kickin.kreations.it" target="_blank">Kickin&#8217;</a> utilizzando Unicorn, Nginx e Apache.</p>
<h3>Unicorn</h3>
<p>L&#8217;installazione di Unicorn si fa &#8220;di tacco&#8221; (per una descrizione più dettagliata <a href="http://www.tommyblue.it/2009/10/08/unicorn-rack-http-server-for-unix-and-fast-clients/">leggete il vecchio post</a>), basta un semplice:</p>
<pre>gem install unicorn</pre>
<p>Per le applicazioni anzichè farle rispondere su socket tcp ho deciso di utilizzare le socket Unix (posiziondole in /tmp), quindi il comando completo (da lanciare dentro la root dell&#8217;applicazione Rails) è:</p>
<pre>unicorn_rails -D -E production -l /tmp/kickin.kreations.it.sock</pre>
<p>ovvero lancio unicorn in modalità demone (<strong>-D</strong>), con l&#8217;environment production (<strong>-E production</strong>) e sulla socket /tmp/kickin.kreations.it.sock (<strong>-l /tmp/kickin.kreations.it.sock</strong>). Per la lista completa delle opzioni c&#8217;è il solito <strong>-h</strong> :)</p>
<p><span id="more-705"></span>Per rendere tutto automatizzato ho creato (in stile apache2) la cartella <strong>/etc/unicorn</strong> con dentro le cartelle <strong>sites-available</strong> e <strong>sites-enabled</strong>. Il contenuto di <strong>/etc/unicorn/sites-available/kickin.kreations.it</strong> è:</p>
<pre>#!/bin/bash
cd /var/www/tommyblue/kickin.kreations.it
su tommyblue -c "unicorn_rails -D -E production -l /tmp/kickin.kreations.it.sock"</pre>
<p>Quindi il file <strong>/etc/init.d/unicorn_rails</strong>:</p>
<pre>#! /bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/unicorn_rails
NAME=unicorn_rails
DESC=unicorn_rails
SITES=/etc/unicorn/sites-enabled
test -x $DAEMON || exit 0
set -e
start_instances() {
   for i in `ls $sites`; do
   echo -n "Starting $i"
   $SITES/$i
   done
}
case "$1" in
  start)
    start_instances;
    ;;
  stop)
    echo -n "Stopping $DESC: "
    killall $NAME
    ;;
  *)
    N=/etc/init.d/$NAME
    echo "Usage: $N {start|stop}" &gt;&amp;2
    exit 1
    ;;
esac
exit 0</pre>
<p>Ed ho quindi aggiunto lo script ai runlevel:</p>
<pre>update-rc.d unicorn_rails defaults 99</pre>
<p>Adesso ci si può sbizzarrire a lanciare e fermare i siti</p>
<h3>Nginx</h3>
<p>Installato nginx (<strong>apt-get install nginx</strong>) si passa a configurarlo. Io ho eliminato il sito di default e ho creato solo i files che mi interessavano (tanto la porta 8080 è chiusa dall&#8217;esterno quindi non ho problemi riguardo al visitare siti &#8220;imprevisti&#8221;). Ecco <strong>/etc/nginx/sites-available/kickin.kreations.it</strong>:</p>
<pre>upstream backend {
  server unix:/tmp/kickin.kreations.it.sock;
}
server {
  listen   8080;
  server_name  kickin.kreations.it;
  access_log  /var/log/nginx/kickin.kreations.it.access.log;
  location / {
    proxy_pass http://backend;
    proxy_redirect off;
    proxy_set_header        Host    $host;
    proxy_set_header        X-Real-IP       $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    root   /var/www/nginx-default;
    index  index.html index.htm;
    }
  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
  root   /var/www/nginx-default;
  }
}</pre>
<p>Come si vede dalla configurazione il backend utilizzato è la socket unix creata con unicorn e nginx risponde sulla porta 8080. Collegandosi al sito sulla porta 8080 (supponendo che il vostro server abbia tale porta accessibile dall&#8217;esterno) potete già constatare la riuscita del deploy. Se poi, diversamente dal mio caso, non avete apache che risponde sulla 80, vi basterà far rispondere nginx su tale porta e il gioco è fatto.</p>
<h3>Apache</h3>
<p>Se invece è apache che risponde sulla porta 80 è necessario questo ultimo passaggio. Innanzitutto bisogna attivare mod_proxy con:</p>
<pre>a2enmod proxy</pre>
<p>e quindi effettuare il reload di apache. Quindi si passa alla configurazione del sito, ecco <strong>/etc/apache2/sites-available/kickin.kreations.it</strong> (ho eliminato le righe non rilevanti):</p>
<pre>&lt;VirtualHost *:80&gt;
  ServerName kickin.kreations.it
  ProxyRequests off
  ProxyPreserveHost On
  &lt;Proxy *&gt;
    Order deny,allow
    Allow from all
  &lt;/Proxy&gt;
  ProxyPass / http://127.0.0.1:8080/
  ProxyPassReverse / http://127.0.0.1:8080/
&lt;/VirtualHost&gt;</pre>
<p>Una volta attivato il sito (con <strong>a2ensite</strong>), <a href="http://kickin.kreations.it" target="_blank">http://kickin.kreations.it</a> è disponibile e funzionante!</p>
<h3>Conclusioni</h3>
<p>Sebbene effettuare il deploy con Unicorn non sia ancorà così agevole (e, a quanto dicono gli sviluppatori, ancora neanche troppo stabile, la versione è la 0.94.0) il risultato è veramente strabiliante. Non ho ancora provato dei test intensivi, ma la sensazione è di applicazioni molto più reattive e addirittura la generazione di un pdf che con Passenger impiegava circa 2 minuti con Unicorn viene generato in una <strong>ventina di secondi</strong>!</p>
<p>Termino segnalando <a href="http://rainbows.rubyforge.org/" target="_blank">Rainbows! Unicorn for sleepy apps and slow clients</a>, che proverò a breve :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tommyblue.it/2009/11/14/deploy-di-applicazioni-rails-con-unicorn-e-nginx/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

