<?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>Mia mamma usa Linux! &#187; Festival</title>
	<atom:link href="http://www.miamammausalinux.org/category/software/festival/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.miamammausalinux.org</link>
	<description>Perché niente è impossibile da capire... Se lo spieghi bene !</description>
	<lastBuildDate>Tue, 27 Jul 2010 12:03:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Un Nagios parlante con Festival !</title>
		<link>http://www.miamammausalinux.org/2009/02/un-nagios-parlante-con-festival/</link>
		<comments>http://www.miamammausalinux.org/2009/02/un-nagios-parlante-con-festival/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 10:06:22 +0000</pubDate>
		<dc:creator>Raoul Scarazzini</dc:creator>
				<category><![CDATA[Festival]]></category>
		<category><![CDATA[Nagios]]></category>
		<category><![CDATA[Postfix]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Monitoraggio]]></category>
		<category><![CDATA[Monitoraggio vocale]]></category>

		<guid isPermaLink="false">http://www.miamammausalinux.org/?p=372</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160; Nagios è universalmente considerato il tool di monitoraggio opensource numero uno sulla piazza. La sua duttilità lo rende uno strumento indispensabile per tutti gli amministratori di sistema che si trovano a controllare numeri elevati di macchine e che necessitano di notifiche tempestive a seguito di malfunzionamenti. Generalmente le notifiche dei guasti avvengono via mail [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.miamammausalinux.org/wp-content/uploads/2009/01/nagios.png" alt="nagios" title="nagios" width="100" class="alignnone size-full wp-image-174" />&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.miamammausalinux.org/wp-content/uploads/2009/02/festival.png" alt="festival" title="festival" width="100" height="65" class="alignnone size-full wp-image-383" /></p>
<p>Nagios è universalmente considerato il tool di monitoraggio opensource numero uno sulla piazza. La sua duttilità lo rende uno strumento indispensabile per tutti gli amministratori di sistema che si trovano a controllare numeri elevati di macchine e che necessitano di notifiche tempestive a seguito di malfunzionamenti.<br />
Generalmente le notifiche dei guasti avvengono via mail o via sms, ma possono esserci casi in cui questi tipi di notifiche non sortiscano l&#8217;effetto desiderato. La soluzione presentata in questo articolo prevede che Nagios attraverso il software opensource di <a href="http://it.wikipedia.org/wiki/Text_to_speech">sintesi vocale</a> Festival comunichi a voce quali sono i malfunzionamenti in corso.</p>
<p><strong>Installazione di Festival</strong></p>
<p>Il sistema di riferimento su cui verranno effettuate le prove è Debian Etch. Partiremo dal presupposto che sul sistema utilizzato vi sia una scheda audio correttamente configurata.<br />
Festival è disponibile nei <em>repository</em> ufficiali della distribuzione ed è pertanto installabile attraverso <em>apt-get</em> :</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ apt-get install festival festvox-italp16k festvox-itapc16k</pre></div></div>

<p>I tre pacchetti installati contengono il programma Festival e le voci italiane (maschile e femminile) da esso utilizzabili.<br />
Per verificare il corretto funzionamento del software (e di conseguenza della scheda audio) è sufficiente lanciare il seguente comando :</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ echo &quot;Ciao mondo&quot; | festival --tts --language italian</pre></div></div>

<p>Se dagli altoparlanti si sente una voce (un poco metallica per la verità, ma comunque intonata) che recita la frase &#8220;Ciao mondo&#8221; allora Festival è perfettamente funzionante e si può procedere con la configurazione di Nagios.</p>
<p><strong>Installazione di Nagios</strong></p>
<p>Anche Nagios è presente nei <em>repository</em> della distribuzione <em>Etch</em> ed è installabile quindi con il consueto comando <em>apt-get</em> :</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ apt-get install nagios2 nagios-plugins nagios-images</pre></div></div>

<p>L&#8217;installazione si occupa di creare una configurazione base che comprende i controlli relativi alla macchina locale ed al gateway utilizzato da questa. Per consultare le informazioni relative ai controlli è possibile utilizzare l&#8217;interfaccia web che Nagios rende disponibile all&#8217;indirizzo <a href="http://localhost/nagios2">http://localhost/nagios2</a>.<br />
Questa interfaccia però richiede un&#8217;autenticazione. All&#8217;interno della configurazione base creata dal sistema è stato definito un utente denominato <em>nagiosadmin</em> che ha i privilegi di accesso ai controlli di default definiti. A questo utente è quindi sufficiente assegnare una password :</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">htpasswd -c /etc/nagios2/htpasswd.users nagiosadmin
New password: 
Re-type new password: 
Adding password for user nagiosadmin</pre></div></div>

<p>attraverso la quale sarà possibile accedere all&#8217;interfaccia, che non dovrebbe scostarsi troppo da quella in Figura 1.</p>
<div id="attachment_378" class="wp-caption alignnone" style="width: 310px"><a href="http://www.miamammausalinux.org/wp-content/uploads/2009/02/nagios-festival_figura1.png"><img src="http://www.miamammausalinux.org/wp-content/uploads/2009/02/nagios-festival_figura1-300x137.png" alt="Figura 1" title="nagios-festival_figura1" width="300" height="137" class="size-medium wp-image-378" /></a><p class="wp-caption-text">Figura 1</p></div>
<p><strong>Iterazione Nagios &#8211; Festival</strong></p>
<p>Il comportamento di Nagios a fronte di controlli, azioni e notifiche è sempre lo stesso, lanciare uno script.<br />
Pertanto il primo passo sarà quello di creare uno script che possa essere utilizzato da Nagios per notificare i malfunzionamenti in una forma interpretabile da Festival.<br />
La filosofia utilizzata in questo senso è la seguente : a fronte di un <em>service</em> o <em>host</em> in stato <em>CRITICAL</em>, verrà creato un file di testo contenente il messaggio che Festival dovrà leggere.<br />
Tale script risiederà nella cartella dei plugin di Nagios, e verrà nominato <em>check_festival_parse</em> :</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ vi /usr/lib/nagios/plugins/check_festival_parse</pre></div></div>

<p>Lo script sarà così definito :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># RaSca (rasca@miamammausalinux.org) - 2009/02/04 :</span>
<span style="color: #666666; font-style: italic;"># Script per l'interpretazione delle notifiche Nagios e l'eventuale creazione</span>
<span style="color: #666666; font-style: italic;"># (o cancellazione) dei file di testo contenente i messaggi.</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Primo parametro : il tipo di notifica (host o servizio)</span>
<span style="color: #007800;">tipo</span>=$<span style="color: #000000;">1</span>
<span style="color: #666666; font-style: italic;"># Secondo parametro : stato dell'host/servizio</span>
<span style="color: #007800;">stato</span>=$<span style="color: #000000;">2</span>
<span style="color: #666666; font-style: italic;"># Terzo parametro : Nome dell'host/servizio</span>
<span style="color: #007800;">nome</span>=$<span style="color: #000000;">3</span>
<span style="color: #666666; font-style: italic;"># Path dove depositare i file di testo contenenti le notifiche</span>
<span style="color: #007800;">file_path</span>=<span style="color: #ff0000;">&quot;/var/log/nagios2/festival&quot;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">case</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$tipo</span>&quot;</span> <span style="color: #000000; font-weight: bold;">in</span>
 host<span style="color: #7a0874; font-weight: bold;">&#41;</span>
  <span style="color: #007800;">messaggio</span>=<span style="color: #ff0000;">&quot;ATTENZIONE. ATTENZIONE. L'host <span style="color: #007800;">$nome</span> e' in stato <span style="color: #007800;">$stato</span>&quot;</span>
  <span style="color: #000000; font-weight: bold;">;;</span>
 service<span style="color: #7a0874; font-weight: bold;">&#41;</span>
  <span style="color: #007800;">messaggio</span>=<span style="color: #ff0000;">&quot;ATTENZIONE. ATTENZIONE. Il servizio <span style="color: #007800;">$nome</span> e' in stato <span style="color: #007800;">$stato</span>&quot;</span>
  <span style="color: #000000; font-weight: bold;">;;</span>
 <span style="color: #000000; font-weight: bold;">*</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
  <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Errore. Impossibile interpretare i parametri di input.&quot;</span>
  <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span>
  <span style="color: #000000; font-weight: bold;">;;</span>
<span style="color: #000000; font-weight: bold;">esac</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$stato</span>&quot;</span> == <span style="color: #ff0000;">&quot;CRITICAL&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>
 <span style="color: #000000; font-weight: bold;">then</span>
  <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$messaggio</span>&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #007800;">$file_path</span><span style="color: #000000; font-weight: bold;">/</span>festival_<span style="color: #007800;">$tipo_</span><span style="color: #007800;">$nome</span>
 <span style="color: #000000; font-weight: bold;">else</span>
  <span style="color: #c20cb9; font-weight: bold;">rm</span> <span style="color: #660033;">-f</span> <span style="color: #007800;">$file_path</span><span style="color: #000000; font-weight: bold;">/</span>festival_<span style="color: #007800;">$tipo_</span><span style="color: #007800;">$nome</span>
<span style="color: #000000; font-weight: bold;">fi</span></pre></div></div>

<p>I commenti all&#8217;interno sono autoesplicativi, serve solo aggiungere che per funzionare correttamente lo script ha bisogno di tre parametri che sono il <em>tipo</em> di notifica (relativa ad un <em>service</em> o un <em>host</em>), lo stato del servizio o dell&#8217;host ed il nome di quest&#8217;ultimo.<br />
Viene inoltre definita attraverso la variabile <em>file_path</em> la posizione dei file di testo contenenti le notifiche. Nostro caso, per coerenza, la scelta è quella di creare una directory denominata <em>festival</em> nella directory principale dei log di nagios, <em>/var/log/nagios2/</em>.<br />
Per completare questa fase del progetto è necessario settare i permessi di esecuzione dello script, creare la cartella che ospiterà i file di testo ed assegnare questa all&#8217;utente nagios in modo che questo, attraverso il demone, possa scriverci :</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ chmod +x /usr/lib/nagios/plugins/check_festival_parse
$ mkdir /var/log/nagios2/festival
$ chown nagios /var/log/nagios2/festival</pre></div></div>

<p>Completata la definizione delle notifiche è necessario configurare l&#8217;interpretazione delle stesse da parte del sistema. Verrà definito quindi uno script che ciclicamente controllerà l&#8217;esistenza di file all&#8217;interno della cartella <em>/var/log/nagios2/festival</em>.<br />
Il file si chiamerà semplicemente <em>check_festival</em> e risiederà sempre nella cartella dei plugin di Nagios :</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ vi /usr/lib/nagios/plugins/check_festival</pre></div></div>

<p>e questo sarà il contenuto :</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">#!/bin/bash</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># RaSca (rasca@miamammausalinux.org) - 2009/02/04 :</span>
<span style="color: #666666; font-style: italic;"># Script che legge via TTS le eventuali notifiche presenti nei</span>
<span style="color: #666666; font-style: italic;"># file in $file_path con cicli di 4 volte a distanza di 10 secondi</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># Path dove leggere i file di testo contenenti le notifiche</span>
<span style="color: #007800;">file_path</span>=<span style="color: #ff0000;">&quot;/var/log/nagios2/festival/&quot;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">for</span> i <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">seq</span> <span style="color: #000000;">1</span> <span style="color: #000000;">4</span><span style="color: #000000; font-weight: bold;">`</span>
<span style="color: #000000; font-weight: bold;">do</span>
 <span style="color: #000000; font-weight: bold;">for</span> j <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">find</span> <span style="color: #007800;">$file_path</span> <span style="color: #660033;">-type</span> f<span style="color: #000000; font-weight: bold;">`</span>
  <span style="color: #000000; font-weight: bold;">do</span>
   <span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #007800;">$j</span> <span style="color: #000000; font-weight: bold;">|</span> festival <span style="color: #660033;">--tts</span> <span style="color: #660033;">--language</span> italian
  <span style="color: #000000; font-weight: bold;">done</span>
 <span style="color: #c20cb9; font-weight: bold;">sleep</span> 10s
<span style="color: #000000; font-weight: bold;">done</span></pre></div></div>

<p>Lo script definisce un ciclo che per quattro volte, a distanza di dieci secondi, controlla l&#8217;elenco dei file presenti nella directory <em>/var/log/nagios2/festival/</em> e legge il contenuto di ciascuno di questi.<br />
Anche questo script necessita dei permessi di esecuzione :</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">chmod +x /usr/lib/nagios/plugins/check_festival</pre></div></div>

<p>A completamento di questa fase del progetto è necessario configurare Nagios affinché vengano definite le notifiche. Tutte le configurazioni di Nagios sono presenti nella cartella <em>/etc/nagios2/conf.d/</em>. All&#8217;avvio il demone <em>nagios</em> controlla tutti i file contenuti in questo <em>path</em> e ne ricava la propria configurazione.<br />
Creando quindi un nuovo file all&#8217;interno di quest&#8217;area :</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ vi /etc/nagios2/conf.d/commands_festival</pre></div></div>

<p>Si potranno definire due nuovi comandi chiamati <em>host-notify-by-festival</em> e <em>notify-by-festival</em> che lanceranno lo script <em>check_festival_parse</em> con i parametri relativi :</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">define command{
        command_name    host-notify-by-festival
        command_line    /usr/lib/nagios/plugins/check_festival_parse host $HOSTSTATE$ $HOSTNAME$
}
&nbsp;
define command{
        command_name    notify-by-festival
        command_line    /usr/lib/nagios/plugins/check_festival_parse service $SERVICESTATE$ $SERVICEDESC$
}</pre></div></div>

<p>Prima di caricare nuovamente la configurazione di Nagios è necessario associare i nuovi comandi alle notifiche dei contatti. Tali informazioni sono contenute nel file <em>/etc/nagios2/conf.d/contacts_nagios2.cfg</em>, all&#8217;interno del quale sono presenti le seguenti righe :</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">        service_notification_commands   notify-by-email
        host_notification_commands      host-notify-by-email</pre></div></div>

<p>che andranno modificate aggiungendo i comandi sopra definiti :</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">        service_notification_commands   notify-by-email,notify-by-festival
        host_notification_commands      host-notify-by-email, host-notify-by-festival</pre></div></div>

<p>Nagios è quindi pronto a caricare nuovamente la configurazione :</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ /etc/init.d/nagios2 reload
Reloading nagios2 monitoring daemon configuration files: nagios2.</pre></div></div>

<p>L&#8217;ultima operazione per il completamento della configurazione del sistema riguarda la definizione all&#8217;interno dello schedulatore <em>cron</em> di sistema dell&#8217;esecuzione dello script di lettura del contenuto della cartella delle notifiche. In questo caso la definizione è relativa ad ogni minuto, ma è possibile modificarla in base alle proprie necessità :</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;"># Crontab per lettura messaggi Nagios via festival ogni minuto
* *     * * *   root    /usr/lib/nagios/plugins/check_festival</pre></div></div>

<p><strong>Test di funzionamento</strong></p>
<p>Per effettuare dei test di funzionamento è necessario configurare dei controlli associati ad un host di test. In questo caso la scelta è caduta su di un host di rete denominato <em>test-server</em> all&#8217;interno del quale gira un servizio HTTP (un webserver apache).<br />
L&#8217;host verrà definito nel file <em>/etc/nagios2/conf.d/test_hosts.cfg</em> :</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">define host {
        host_name   test-server
        alias       Test server
        address     10.175.88.191
        use         generic-host
        }</pre></div></div>

<p>Mentre i servizi ad esso associati verranno definiti nel file <em>/etc/nagios2/conf.d/test_services.cfg</em> :</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">define service {
        host				test-server
        service_description             HTTP
 	check_command                   check_http
        use                             generic-service
	notification_interval           0
}</pre></div></div>

<p>Chiaramente per far assimilare le modifiche a Nagios è necessario effettuare il <em>reload</em> del servizio :</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">$ /etc/init.d/nagios2 reload
Reloading nagios2 monitoring daemon configuration files: nagios2.</pre></div></div>

<p>Una volta che l&#8217;host <em>test-server</em> ed il servizio <em>HTTP</em> appariranno nel resoconto web si potranno simulare i malfunzionamenti per i quali ci si aspetta che Nagios parli.<br />
Ad esempio, sospendendo il servizio <em>HTTP</em> sul server di test, una volta che Nagios avrà effettuato i quattro tentativi, definiti <em>Attempt</em>, la notifica verrà inviata dal sistema attraverso il comando <em>notify-by-festival</em> che di conseguenza creerà un file di testo nominato &#8220;festival_service_HTTP&#8221; contenente il testo &#8220;Attenzione. Attenzione. Il servizio HTTP e&#8217; in stato CRITICAL&#8221;.<br />
Quanto effettuato dal sistema è visibile dal log di Nagios, <em>/var/log/nagios2/nagios.log</em> :</p>

<div class="wp_syntax"><div class="code"><pre class="console" style="font-family:monospace;">[1233758032] SERVICE ALERT: test-server;HTTP;CRITICAL;SOFT;1;CRITICAL - Socket timeout after 10 seconds
[1233758092] SERVICE ALERT: test-server;HTTP;CRITICAL;SOFT;2;CRITICAL - Socket timeout after 10 seconds
[1233758152] SERVICE ALERT: test-server;HTTP;CRITICAL;SOFT;3;CRITICAL - Socket timeout after 10 seconds
[1233758212] SERVICE ALERT: test-server;HTTP;CRITICAL;HARD;4;CRITICAL - Socket timeout after 10 seconds
[1233758212] SERVICE NOTIFICATION: root;test-server;HTTP;CRITICAL;notify-by-festival;CRITICAL - Socket timeout after 10 seconds</pre></div></div>

<p>Tale file sarà letto dallo script definito nel crontab di sistema che darà il via alle letture attraverso Festival.<br />
In conclusione, Nagios dovrebbe parlare.<br />
Una volta ripristinato il servizio <em>HTTP</em> il file verrà automaticamente rimosso sempre dallo script <em>notify-by-festival</em> e di conseguenza Nagios verrà zittito (con soddisfazione).</p>
<p><strong>Conclusioni</strong></p>
<p>E&#8217; evidente che tutto l&#8217;impianto può essere personalizzato in modo che l&#8217;integrazione con il sistema di controllo avvenga nella maniera più consona possibile. Le potenzialità di una simile implementazione di Nagios sono moltissime ed applicabili ad uno spettro di situazioni altrettanto numerose.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.miamammausalinux.org/2009/02/un-nagios-parlante-con-festival/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
