Astuces de Webmaster

Architecture

Monitoring SMS (script PHP) : mettre en place en 20 minutes un système de suivi efficace

by Rom's on 01 mai 2009, under Architecture, DSI

Voici le système que j’utilise aujourd’hui pour le suivi de mes serveurs dédiés. Il s’agit d’un système très simple composé des briques suivantes :
- Dernière version de PHPWatch (voir le site)
- API SMS – Bêta – By Orange (Accéder à l’API Manager – voir notamment le lien dans le menu de gauche API SMS)
- Quelques modifications sur le cron pour l’envoi d’e-mails.

De base, cela ne monitore que si les services Apache (si on regarde le port 80 / http) sont up ou down et non si les pages sont fonctionnelles (on ne verra pas les erreurs PHP mais on va pouvoir trouver des solutions pour cela.. bientôt)

Chaque SMS envoyé coûtera 10 centimes débités sur le compte. Soit le prix d’un SMS que vous envoyez avec n’importe quel mobile.

0. Allez sur l’interface API SMS d’Orange, inscrivez-vous, créditez votre compte de 10€ pour le test (cochez éventuellement la case renouvellement automatique) et dans l’onglet « key », notez bien votre clé API.
1. Mettez en ligne le script (cliquez ici pour télécharger) sur un serveur autre que celui que vous souhaitez monitorer et allez à son adresse en ajoutant /install/ à la fin et suivez les instructions (attention, il n’y a pas d’espaces de nom sur les tables…)
2. Allez dans la table « logs » et ajoutez une colonne « message ». Elle servira à reccueillir lors d’un problème un arrêté de l’e-mail envoyé. Cela peut toujours servir.
3. Ouvrez le fichier cron.php qui se trouve à la racine du répertoire PHPWatch et insérez le code suivant en lieu et place de l’existant :

<?php
// A qui on envoie des SMS en cas de problème ?
$contactsMonitoringSMS=Array(
‘RomainMobile’=>’33679241180′,
‘CollegueMobile’=>’336XXXXXX’,

);
// A qui on envoie un mail en cas de problème ? (en parallèle)
$contactsMonitoringEMAIL=Array(
‘RomainPerso’=>’monemail@gmail.com’
,’ServiceInformatique’=>’monemailpro@maboite.com’
);

define(‘PATH_TO’, ‘./’);
require_once(PATH_TO . ‘common.php’);

$all = ServiceChecker::getReport();

foreach($all as $monitors)
{
foreach($monitors as $monitor)
{
$monitor['derniereFoisOffline']=date(« d/m/Y H:i:s »,$monitor['last_offline']);
// print_r($monitor);
if(!$monitor['online'])
{
$message = $monitor['host'] . ‘ HORS LIGNE. NOTIFICATIONS ENVOYEES. (/!\\ PHASE DE TEST, A VOIR SI C FIABLE)’;
echo $message;

foreach($contactsMonitoringSMS as $prenom=>$numero) {
$phone_number = $numero;
$contactsEmail= »"; foreach($contactsMonitoringEMAIL as $prenom=>$email) $contactsEmail.= » [".$prenom."] « ;
$contactsSMS= »"; foreach($contactsMonitoringSMS as $prenom=>$numero) $contactsSMS.= » [".$prenom."] « ;

// attention, on coupe le message à 155 caractères
$sms=$monitor['host']. » HS – SMS : « .$contactsSMS. » – @ : « .$contactsEmail;
if(strlen($sms)>159) $sms=substr($sms,0,154).’[...]‘;
$text_message = urlencode($sms);
$api_access_key = ‘dexxxx5ac’; // Mettez votre clé API – disponible sur l’API Manager
$url = « http://sms.alpha.orange-api.net/sms/sendSMS.xml?id=$api_access_key&to=$phone_number&content=$text_message »;
$response = file_get_contents($url);
$xml = simplexml_load_string($response);
echo « Status: « ,$xml->status->status_msg;

}
foreach($contactsMonitoringEMAIL as $prenom=>$email) {
$to = $email;
$subject = $message;
ob_start();
echo $message;
echo « \nE-mails envoyes a :\n »;
print_r($contactsMonitoringEMAIL);
echo « \nSMS envoyes a :\n »;
print_r($contactsMonitoringSMS);
echo « \nDetails Erreur :\n »;
print_r($monitor);
$msg=ob_get_contents();
ob_end_clean();
$headers = ‘From: Roms Monitoring ‘. »\r\n »;
//$headers .= ‘Bcc: Moi ; lui ‘. »\r\n »;
$headers .= « \r\n »;
mail($to, $subject, $msg, $headers);
}
NotificationHandler::sendNotifications($monitor);
}

$requete=’INSERT INTO logs (monitor, timestamp, online, message) VALUES
(‘ . $monitor['id'] . ‘, ‘ . time() . ‘, ‘ . ($monitor['online'] ? 1 : 0) . ‘, \ ».addslashes($msg).’\')’;
$GLOBALS['PW_DB']->query($requete);
}
}
?>

4. Créez le cron qui va bien dans le crontab si vous avez un serveur dédié (autre que celui monitoré évidemment – en faisant un wget http://www.monsite.com/repertoirePHPWatch/cron.php).
Si vous avez un mutualisé chez OVH (type 60gp, 90plan,…), vous pouvez aller dans votre manager OVH, rubrique « Mutualisé » > « Hébergement » > Planificateur de tâches et créer une tâche qui lance le fichier cron.php chaque heure.
Si vous n’avez ni l’un ni l’autre, vous avez toujours WebCron.org ou ça..
Ou bien, si vous avez des amis qui ont un dédié, c’est le moment de les solliciter, c’est pas bien méchant un cron..
Réserves : attention, il s’agit d’une première version de développement, tous les composants sont en phase bêta. Vous aurez remarqué également que lorsqu’on dit dans le message envoyé « NOTIFICATIONS ENVOYEES », on n’a pas vérifié que c’était effectivement le cas… Par ailleurs, on peut imaginer monitorer l’état réel d’un script en jouant avec les entêtes renvoyées ou avec des contenus de la page. Pour l’instant, cette version me convient.

Tous retours d’expérience bienvenus pour compléter ce tutoriel.

Laisser un commentaire :, , , Lien Permanent

Serveur tombé – actions à faire dans l’ordre

by Rom's on 23 mar 2009, under Architecture

Première chose à faire : contrôler les autres services du serveur (est-ce uniquement lié à un nom de domaine ou est-ce le serveur qui est en panne). S’il n’y a pas d’autres sites sur le même serveur, il y a peut-être un phpMyAdmin, Munin ou autre Webmin à tester ?

Si c’est le domaine qui ne répond pas
1. Faire un ZoneCheck pour voir si les DNS sont correctement configurés : http://www.afnic.fr/outils/zonecheck/zc.cgi?zone=guide-sensations.com
1.a si ça vous répond qu’il y a un problème avec les SOA, c’est qu’il y a un problème dans les réponses SOA de votre serveur : à voir dans les BIND ou dans les configurations & RNDC (named.conf, named.conf.options,…)
1.b si ça cherche les DNS et que ça met que les zones ne sont pas cohérentes, il faut vérifier 3 points : les DNS bien configurés chez le registrar (ovh, gandhi, bookmyname, amen,…), le reverse bien défini pour les serveurs dédiés (ovh pour l’exemple : Manager OVH > Services > DNS Secondaires), et les SOA bien définis sur le serveur (Serveur BIND à configurer) dans les 3 cas, l’IP et les NS (primaire et secondaires) doivent correspondre. Un dig (http://www.webmaster-toolkit.com/dig.shtml?address=guide-sensations.com) vous aidera à vérifier la configuration en cours.
1.c une fois une modif faite, ça peut prendre du temps à se répercuter (jusqu’à 6 jours chez Orange..), il faut tester chez plusieurs FAI autant que possible pour voir si ça commence à se propager ou pas et faire quelques nslookup pour tester depuis les serveurs souhaités si la propagation se fait bien (windows : exécuter > cmd > nslookup). Exemple
# nslookup
# > server 212.216.212.112 (tester les IP par FAI à cette URL : http://www.commentcamarche.net/faq/sujet-1496-serveurs-dns-des-principaux-fai)
# > guide-sensations.com
et là ça vous sortira l’IP qui est prévu pour ce nom de domaine suivant la propagation des infos sur ce serveur là et donc vous aurez les infos de propagation par FAI.
1.d vérifiez à cette adresse : http://www.zonecut.net/dns/ avec un bon visuel que tout est ok.

Si c’est le serveur qui est en panne

  1. Tester les services les uns après les autres et les restarter s’ils sont tombés
  2. à côté, il est bon d’être connecté en SSH et de faire un tail -f /var/log/syslog pour voir ce qu’il se passe et l’erreur éventuelle qui se produit (avec le fichier et la ligne de l’erreur avec un peu de chance)
  3. N’oubliez pas de faire un fcsk de temps en temps
2 Comments : Lien Permanent

Evolution Architecture Serveurs Web

by Rom's on 10 mar 2009, under Architecture

Tout au long de l’évolution d’un site Internet, on doit faire évoluer la structure technique de façon à pouvoir absorber le trafic et diminuer les risques qui deviennent de plus en plus coûteux.

Je vous invite à lire cet excellent article du site haute-disponibilite.net qui reprend un document de présentation d’une société spécialisée.

http://www.haute-disponibilite.net/2008/09/25/planning-des-evolutions-de-votre-architecture-web/

C’est un début et c’est une proposition, ça a le mérite d’exister.

Laisser un commentaire :, , , , Lien Permanent

Trouver son fichier de configuration PHP.ini

by rjanot on 19 déc 2008, under Architecture, Développement Web, DSI

Petite astuce pour les personnes recherchant leur fichier PHP.INI, en général sur les serveurs dédiés. Si vous n’êtes pas très ami avec la syntaxe de Tux, cette commande va vous aider:

php -i | grep php.ini

En espérant vous avoir aidé !

Laisser un commentaire Lien Permanent

Quelques commandes SSH utiles / Serveurs dédiés

by Rom's on 15 déc 2008, under Architecture, Développement Web, DSI

Quelques commandes SSH utiles pour tout adminstrateur de serveurs dédiés :

Pour utiliser SSH, utilisez Putty sur Windows, ou le terminal sur Mac et Linux; Sur le terminal, entrez la commande « ssh userSSH@ipServeur » ce qui vous invitera à entrer le mot de passe de l’utilisateur « userSSH ».

top
=> indique les processus appelés
=> pendant l’exécution, taper « A » pour avoir des informations sur les tâches, « U » pour classer les processus par %CPU
=> faire ctrl+C (même sur Mac) pour en sortir

time wget URL
=> vous indique le temps pris pour exécuter telle URL

ps aux
affiche des informations sur les processus en cours
==> ps aux | grep ssh vous permet d’afficher les utilisateurs SSH connectés

find /path/to/directory/ -type f -name « fichier.ext » -exec ls -alF {} \; | grep « toto »
==> permet de faire afficher sous forme de liste avec fichier et date les fichiers trouvés à l’aide de la commande find

stat /path/to/file.ext
==> permet d’avoir plus d’infos sur les dates de création, d’accès et de modification du fichier
ex :

Size: 48 Blocks: 8 IO Block: 4096 regular file
Device: ca01h/51713d Inode: 133791 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 1001/masociete) Gid: ( 1001/masociete)
Access: 2011-12-13 16:13:58.000000000 +0100
Modify: 2011-08-01 12:46:01.000000000 +0200
Change: 2011-12-13 16:13:41.000000000 +0100

rename
==> permet de renommer des fichiers en ssh. La fonctionnalité la plus utile est la substitution de chaine
Exemple 1 : remplacer tout les fichiers
rename ‘s/_2\.txt/_6.txt/’ *.txt ==> remplace tous les fichiers « blabla_tout-ce que vous Voulez_2.txt » par « blabla_tout-ce que vous Voulez_6.txt »
la partie en gras est le format standard pour la substitution, la partie en italique indique ce qu’on veut remplacer et par quoi on veut le remplacer, séparés par un simple slashe. la partie soulignée indique dans quels fichiers on veut faire ce remplacement.

find ./ -name « *product*.tpl » -exec cat {} \; | grep « livraison gratuite »
==> permet de trouver toutes les chaines « livraison gratuite » se trouvant dans des *product*.tpl

NB : Cet article va être complété au fur et à mesure du temps et des besoins, n’hésitez pas à proposer des commandes en commentaires

Alsacreations a mis pas mal de commandes utiles aussi, voir ici : http://www.alsacreations.com/tuto/lire/613-Monitoring-serveur.html

voir aussi : http://wiki.debian-facile.org/manuel:commande

Laisser un commentaire :, Lien Permanent

Optimisation MySQL

by Rom's on 26 nov 2007, under Architecture, DSI

Je vous invite à lire cette documentation qui permet d’optimiser les requêtes complexes pour des sites à fort volume :

http://www.ecoms.fr/cours/sgbdoptimisation.pdf [PDF]

Laisser un commentaire :, Lien Permanent