samedi 17 novembre 2012

Logiciel monitoring serveur gratuit sous Windows.


Dans un précédent article, nous avions transformé un vieux PC en station de backup grâce à des script de backup FTP en DOS : http://brice-cornet.blogspot.com/2012/10/script-de-backup-ftp-en-dos.html



Nous allons maintenant tirer un meilleur parti de cette machine recyclée en la transformant en une station de monitoring de serveur, toujours sous environnement Windows.

Fonctionnalités attendues :
-    Ping de serveur interne
-    Ping serveur externe
-    http get sur serveur web
-    Etat disque dur
-    Etat du CPU
-    Etat RAM
-    Alerte e-mail
-    Tableau de bord de contrôle
-    Log global
-    Log des backup
-    Affichage de résultat de test d’uptime serveur depuis des services cloud gratuit

CRM

Bien sûr, nous n’aurons pas ici la qualité de solutions open source comme Cacti, Nagios et Centreon. Le but est de mettre en place sur notre PC recyclé un système fiable, pratique, simple et rapide à mettre en place, qui n'effrayera pas ceux et celles qui considère Cacti, Nagios et Centreon comme des usines à gaz difficile à configurer.

En 20 minutes à peine, vous aurez mis en place un système de monitoring qui rencontrera la pluparts de vos besoins.





Première étape : service de monitoring serveur gratuit en cloud computing

Surveiller vos serveurs depuis une installation en local signifie que les résultats sont interdépendants de votre connexion internet.

Il est donc intéressant de mettre en balance ces résultats avec ceux obtenus par un service de type cloud computing.

Le meilleur service gratuit est Monitor.us : http://www.monitor.us/website-monitoring

La version gratuite est limitée à 4 serveurs à monitorer, avec un test toutes les 30 minutes.

Astuce idiote : Monitor.us ne teste évidemment pas tous les serveurs à l’heure 00 et l’heure 30. J’ai donc souscrit via 4 adresses e-mail différentes à leur système, ce qui me permet de vérifier gratuitement la présence en ligne de mes serveurs, plusieurs fois par heure, depuis les USA et l’Allemagne.

De plus, Monitor.us propose une appli iPhone/iPad, très sympa, ainsi que l’export des résultats via une iframe que l’on va ensuite intégrer dans notre tableau de bord.

Pour l’utilisation/configuration de Monitor.us, il suffit de suivre les explications en ligne. Vous pouvez tester en PING et http GET.



Deuxième service, nettement moins intéressant est http://www.serviceuptime.com

Moins intéressant car limité à un seul serveur mais, il permet d’avoir un historique utile, ainsi que l’export en iframe dans notre tableau de bord de monitoring. Il sera donc un complément pratique. Là aussi, inscrivez-vous au moyen de plusieurs adresses e-mails afin d’accroitre la quantité de test d’uptime.




Deuxième étape : le premier logiciel freeware de monitoring serveur sous Windows

Il existe un logiciel tout simplement parfait sous Windows (fonctionne sous toutes les versions) : Total Network Monitor, que vous pouvez télécharger gratuitement sur http://www.softinventive.com/fr/products/total-network-monitor/

Fonctionnement simple et efficace, PING, état RAM/Disque Dur, indicateur VERT ou ROUGE, création d’un log (que l’on a retrouver dans notre tableau de bord) et alerte e-mail.

Une vidéo étant plus utile qu’un long discours, regardez ceci :



Deuxième étape: un second logiciel shareware qui va générer un rapport en HTML

Total Network Monitor est un petit bijou mais il ne permet pas de générer des rapports en HTML. Vous devez donc être devant l’écran du PC de monitoring, pour voir l’état de santé de vos serveurs.

Nous allons donc utiliser un deuxième software. N’étant pas un freeware, ses possibilités sont limitées à 10 serveurs, ce qui devrait tout de même couvrir les besoins de la plupart d’entre vous.

Ce programme s’appelle Server Alive et est disponible sur http://www.woodstone.nu/salive/

Il va nous permettre de générer la page HTML suivante :


Pour ce faire, il va falloir créer un template de rapport.

Vous aurez donc besoins des deux images suivante :




Et du code qui permet de générer ce tableau :

<html>
<head>
<title>MonitorBox by zeBridge.tk</title>
</head>
<script>
<!--
/*
Auto Refresh Page with Time script
*/
//enter refresh time in "minutes:seconds" Minutes should range from 0 to inifinity. Seconds should range from 0 to 59
var limit="4:59"
if (document.images){
var parselimit=limit.split(":")
parselimit=parselimit[0]*60+parselimit[1]*1
}
function beginrefresh(){
if (!document.images)
return
if (parselimit==1)
window.location.reload()
else{
parselimit-=1
curmin=Math.floor(parselimit/60)
cursec=parselimit%60
if (curmin!=0)
curtime=curmin+" minutes and "+cursec+" seconds left until page refresh!"
else
curtime=cursec+" seconds left until page refresh!"
window.status=curtime
setTimeout("beginrefresh()",1000)
}
}
window.onload=beginrefresh
//-->
</script>
<!--This is the header section.-->
<BODY>
<FONT FACE="Arial, Helvetica, Geneva">
<center>
<h1>MonitoriBox</h1>
<p>Cette page est mise @ jour toutes les 10 minutes</p>
<!--Here the current date and time variables are used-->
||--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------||
<h2>Monitoring comparatif PING et HTTP GET</h2>
<p>Test toutes les 10 minutes. HTTP GET cherche un string char.</p>
<H4>Dernier test: <sa_currentlongdate>&nbsp; &nbsp; <sa_currentlongtime> (PARIS TIME)</h4>
<!—Add in a comment that notes that Servers Alive generated the page.-->
<!-- Generator Servers Alive version <sa_version> via template....-->
<p>
<TABLE WIDTH="762" cellpadding="4">
<TR><TD WIDTH="32" align="center"><FONT face="verdana" size="2"><B>Up?</TD>
<TD width="20" align="center"><FONT face="verdana" size="2"><B>ID</TD>
<TD width="130" align="center"><FONT face="verdana" size="2"><B>Host</TD>
<TD width="280" align="center"><FONT face="verdana" size="2"><B>Host Check</TD>
<TD width="80" align="center"><FONT face="verdana" size="2"><B>SLA Target</TD>
<TD width="80" align="center"><FONT face="verdana" size="2"><B>Average</TD>
<TD width="70" align="center"><FONT face="verdana" size="2"><B>Actual</TD>
<TD width="145" align="center"><FONT face="verdana" size="2"><B>Time of Last Status Change</TD>
</FONT>
</TR>
<!--The core section begins here.  It is repeated for every host on the page.-->
<sa_report sort=status>
 <!--Use SAIF to change the color depending on whether the host is up or down.-->
<tr bgcolor="<saif sa_status is down>ff0f00</saif><saif sa_status is up>dbdcaf</saif>">
<TD BGCOLOR="#ffffff">
<!--Use SAIF to display the correct icon (not supplied with Servers Alive)
 depending on the host condition.-->
<SAIF SA_STATUS IS UP><img src="running.jpg"></SAIF>
<SAIF SA_STATUS IS DOWN><img src="stop.jpg"></SAIF>
</TD>
 <TD WIDTH=20 BGCOLOR="#8fbc8f">
<!--Display Host ID with SA_HOSTID.-->
<CENTER><FONT SIZE=2><sa_hostid></FONT></CENTER>
</TD>
<TD WIDTH="145">
<!--Display Pretty Name with SA_PRETTYNAME.-->
<FONT FACE=verdana SIZE=1><sa_prettyname></FONT>
</TD>
<TD WIDTH="280">
<!--Display the type of check with SA_CHECKDESCRIPTION.-->
<FONT FACE=verdana SIZE=1><sa_hostname> (<sa_checkdescription>)</FONT>
</TD>
 <TD WIDTH="80">
<!--Display check parameters with SA_THRESHOLD.-->
<FONT FACE=verdana SIZE=1><CENTER><sa_threshold></CENTER></FONT>
</TD>
<TD WIDTH="80">
<!--average -->
<FONT FACE=verdana SIZE=1><CENTER><sa_avgcycletime></CENTER></FONT>
</TD>
<TD WIDTH="70">
<!--Display the response time/data with SA_CHECKRESPONSE.-->
<FONT FACE=verdana SIZE=1><CENTER><sa_checkresponse></CENTER></FONT>
</TD>
 <TD WIDTH="175" valign="center" align="center">
<!--Display the time of the last status change with SA_STATUSCHANGETIME and
SA_STATUSCHANGEDATE.-->
<FONT FACE=verdana SIZE=1><sa_statuschangetime>, <sa_statuschangedate></FONT>
</TD>
</TR>
 <!--End of the core section.-->
</sa_report>
 <!--Beginning of footer.-->
</TABLE>
</body>
</html>

Nous avons donc ici une bonne base pour enfin construire notre tableau de bord de monitoring serveur. Nous allons donc ajouter un lien vers les deux fichiers de log générés par Total Network Monitor, un lien vers le log des backup réalisé par nos scripts DOS (on va voir après comment réaliser cela), un lien vers le log du Cloud d’Amazon (si vous utilisez Amazon) et les insertions des iframes des services de monitoring gratuit dans le cloud.

Voici le code :

<html>
<head>
<title>MonitorBox by zeBridge.tk</title>
</head>
<script>
<!--
/*
Auto Refresh Page with Time script
*/
//enter refresh time in "minutes:seconds" Minutes should range from 0 to inifinity. Seconds should range from 0 to 59
var limit="4:59"
if (document.images){
var parselimit=limit.split(":")
parselimit=parselimit[0]*60+parselimit[1]*1
}
function beginrefresh(){
if (!document.images)
return
if (parselimit==1)
window.location.reload()
else{
parselimit-=1
curmin=Math.floor(parselimit/60)
cursec=parselimit%60
if (curmin!=0)
curtime=curmin+" minutes and "+cursec+" seconds left until page refresh!"
else
curtime=cursec+" seconds left until page refresh!"
window.status=curtime
setTimeout("beginrefresh()",1000)
}
}
window.onload=beginrefresh
//-->
</script>
<!--This is the header section.-->
<BODY>
<FONT FACE="Arial, Helvetica, Geneva">
<center>
<h1>MonitoriBox <> Simple CRM</h1>

<!-- Liens vers les logs en texte créé via Total Network Monitor -->
 <p><a href="log_srv.txt" target=()>Log 1</a> de la MonitoxBox (custom report)
 <> <a href="log_monitor_box.txt" target=()>Log 2</a> de la MonitoxBox (full technical report) <> 

<!-- Lien vers les logs en texte des backup --> 
 <a href="log_bck.txt" target=()>Log des backup</a> 

<!-- Liens vers les infos technique du Cloud d'Amazon --> 
<> Etat de santé du <a href="http://status.aws.amazon.com/rss/EC2EU.rss" target=()>cloud Amazon</a></p>

 <!-- Affichage des différents monitoring -->
<p>Cette page est mise @ jour toutes les 10 minutes</p>


<!-- Affichage de Servers Alive -->
<!--Here the current date and time variables are used-->
||--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------||
<h2>Monitoring comparatif PING et HTTP GET</h2>
<p>Test toutes les 10 minutes. HTTP GET cherche un string char.</p>
<H4>Dernier test: <sa_currentlongdate>&nbsp; &nbsp; <sa_currentlongtime> (PARIS TIME)</h4>
<!—Add in a comment that notes that Servers Alive generated the page.-->
<!-- Generator Servers Alive version <sa_version> via template....-->
<p>
 <TABLE WIDTH="762" cellpadding="4">
<TR><TD WIDTH="32" align="center"><FONT face="verdana" size="2"><B>Up?</TD>
<TD width="20" align="center"><FONT face="verdana" size="2"><B>ID</TD>
<TD width="130" align="center"><FONT face="verdana" size="2"><B>Host</TD>
<TD width="280" align="center"><FONT face="verdana" size="2"><B>Host Check</TD>
<TD width="80" align="center"><FONT face="verdana" size="2"><B>SLA Target</TD>
<TD width="80" align="center"><FONT face="verdana" size="2"><B>Average</TD>
<TD width="70" align="center"><FONT face="verdana" size="2"><B>Actual</TD>
<TD width="145" align="center"><FONT face="verdana" size="2"><B>Time of Last Status Change</TD>
</FONT>
</TR>
<!--The core section begins here.  It is repeated for every host on the page.-->
<sa_report sort=status>
 <!--Use SAIF to change the color depending on whether the host is up or down.-->
<tr bgcolor="<saif sa_status is down>ff0f00</saif><saif sa_status is up>dbdcaf</saif>">
<TD BGCOLOR="#ffffff">
<!--Use SAIF to display the correct icon (not supplied with Servers Alive)
 depending on the host condition.-->
<SAIF SA_STATUS IS UP><img src="running.jpg"></SAIF>
<SAIF SA_STATUS IS DOWN><img src="stop.jpg"></SAIF>
</TD>
 <TD WIDTH=20 BGCOLOR="#8fbc8f">
<!--Display Host ID with SA_HOSTID.-->
<CENTER><FONT SIZE=2><sa_hostid></FONT></CENTER>
</TD>
 <TD WIDTH="145">
<!--Display Pretty Name with SA_PRETTYNAME.-->
<FONT FACE=verdana SIZE=1><sa_prettyname></FONT>
</TD>
<TD WIDTH="280">
<!--Display the type of check with SA_CHECKDESCRIPTION.-->
<FONT FACE=verdana SIZE=1><sa_hostname> (<sa_checkdescription>)</FONT>
</TD>
 <TD WIDTH="80">
<!--Display check parameters with SA_THRESHOLD.-->
<FONT FACE=verdana SIZE=1><CENTER><sa_threshold></CENTER></FONT>
</TD>
<TD WIDTH="80">
<!--average -->
<FONT FACE=verdana SIZE=1><CENTER><sa_avgcycletime></CENTER></FONT>
</TD>
<TD WIDTH="70">
<!--Display the response time/data with SA_CHECKRESPONSE.-->
<FONT FACE=verdana SIZE=1><CENTER><sa_checkresponse></CENTER></FONT>
</TD>
 <TD WIDTH="175" valign="center" align="center">
<!--Display the time of the last status change with SA_STATUSCHANGETIME and
SA_STATUSCHANGEDATE.-->
<FONT FACE=verdana SIZE=1><sa_statuschangetime>, <sa_statuschangedate></FONT>
</TD>
</TR>
 <!--End of the core section.-->
</sa_report>
 <!--Beginning of footer.-->
</TABLE>

<!-- Affichage du service cloud de Serviceuptime via une insertion d'inframe --> 
<p>||--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------||</p>

<h2>Monitoring HTTP GET du XYZ depuis les USA </h2>
<p>Test toutes les 30 minutes. HTTP GET cherche la home page.</p>
<iframe src="http://www.serviceuptime.com/.....VOTRE_CODE_PERSO " width="612" height=70% frameborder="0" align="center" scrolling="no">
<p>Your browser does not support iframes.</p>
</iframe>
<p>||--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------||</p>

<h2>Monitoring HTTP GET du XXXX depuis les USA </h2>
<p>Test toutes les 30 minutes. HTTP GET cherche la home page.</p>
<iframe src="http://www.serviceuptime.com/.....VOTRE_CODE_PERSO " width="612" height=70% frameborder="0" align="center" scrolling="no">
<p>Your browser does not support iframes.</p>
</iframe>
<p>||--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------||</p>


<!-- Affichage du service cloud de Monitor.us via une insertion d'inframe --> 
<h2>Monitoring comparatif HTTP GET depuis les USA et l'Allemagne</h2>
<p>Test toutes les 30 minutes. HTTP GET cherche la home page.</p>
<iframe src="http://www.monitor.us/.....VOTRE_CODE_PERSO " width="1200" height="544" frameborder="0" align="center" scrolling="no">
<p>Your browser does not support iframes.</p>
</iframe>
<iframe src="http://www.monitor.us/.....VOTRE_CODE_PERSO" width="1200" height="544" frameborder="0" align="center" scrolling="no">
<p>||--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------||</p>
<br>
</center>
</FONT>
</BODY>
</html>


Troisième étape: le log des backups

Il est temps maintenant de créer le log des backup que nous avons réalisé grâce à la méthodologie expliquée dans cet article : http://brice-cornet.blogspot.com/2012/10/script-de-backup-ftp-en-dos.html

Rien de très compliqué : dans notre cas, les backup sont stockés sur un serveur de stockage distant. Nous allons donc nous connecter à ce server et en lister le contenu.

Voici le script DOS, à lancer via le Planificateur des Tâches de Windows :

REM – Démonter le disque mappé au cas où il serait déjà monté
net use Z: /delete /yes
REM – Laisser un temps de pause
ping google.com
REM – Monter le serveur distant
net use Z: \\IP\DOSSIER /PERSISTENT:NO MOT_DE_PASSE /USER:nom_utilisateur
REM – Laisser un temps de pause
ping google.com
REM – Créer un log de backup vierge
echo Log des backup > log_bck.txt
echo. >> log_bck.txt
REM – Insérer la date te l’heure
date /t >> log_bck.txt
time /t >> log_bck.txt
echo. >> log_bck.txt
echo ---- BACKUP ABCD ----------------------------------------------------------------------- >> log_bck.txt
echo. >> log_bck.txt
REM – Lister le contenu de dossier de backup. Classement par ordre alphabétique
dir /O:N Z:\BCK\DOSSIER_XYZ >> log_bck.txt
echo. >> log_bck.txt
echo *************************************************************************************  >> log_bck.txt
echo. >> log_bck.txt
REM – Répéter l’opération si les backup sont stockés dans plusieurs dossiers différentes
dir /O:N Z:\BCK\DOSSIER_ABCD >> log_bck.txt
echo. >> log_bck.txt
echo ---- FIN ------------------------------------------------------------------------------------- >> log_bck.txt
echo. >> log_bck.txt
REM – Laisser un temps de pause
ping google.com
REM – Démonter le disque mappé
net use Z: /delete /yes
exit



Conclusion

Vous avez un chouette petit système de monitoring intra et extra muros, qui ne vous a rien coûté, avec une vue en local et un tableau de bord sur le web.

Il vous reste donc à ne pas oublier d’uploader ce tableau de bord sur le web, ainsi que les fichiers de log ;-)



Pour cela, un petit script DOS en FTP, qui sera lancé toutes les 10 minutes via le Gestionnaire des Tâches de Windows. Je vous renvoie pour cela au précédent article : http://brice-cornet.blogspot.ro/2012/10/script-de-backup-ftp-en-dos.html

Dernier détail : installez gratuitement SPEED FAN via www.almico.com/sfdownload.php

Cela vous donnera l’uptime de votre station de monitoring, ainsi que la température interne de la machine.



Personnellement, j’ai enlevé le ventilo du CPU et je l’ai remplacé par un ancien ventilo d’alimentation de PC que j’ai sous volté, afin que cette machine soit totalement silencieuse. Dès lors, connaitre la température interne est un atout important ;-)

Aucun commentaire:

Enregistrer un commentaire