Articles

Affichage des articles du janvier, 2008

Exécuter une commande sur plusieurs serveurs

Comme il m'arrive de plus en plus souvent de devoir exécuter une commande sur plusieurs serveurs Linux, je devais trouver une solution efficace et élégante pour éviter de lancer n fois un ssh NomServeuri MAcommande. Bien entendu cette solution existe déjà elle s'appelle DSH pour distributed shell (ou dancer shell ) et un fois installé elle permet de lancer un : dsh -a -M -c -- geos-config --version pour connaitre la version de geos installé sur chaque serveur l'option -a indique que l'on veut lancer la commande sur toutes les machines se trouvant dans /etc/dsh/machines.list l'option -c indique que l'on veut lancer la commande en mode concurrent l'option -M préfixe la sortie des commandes avec le nom du serveur qui a envoyé la réponse le fichier /etc/dsh/dsh.conf permet de configurer les valeurs par défaut de certaines options Cet outil est une source d'efficacité extraordinaire quand on a plusieurs serveurs et bien sur comme toujours pour un outil puis

Compter le nombre de codes HTTP dans des fichiers logs avec awk

Image
Aujourd'hui je devais sortir rapidement la liste des différents codes HTTP de tous les fichiers logs IIS. Comme expliqué dans mon post précédent j'ai un fichier par jour et environ 16 GB de fichiers logs sur une année... Dans un fichier log pour un serveur web il y a en général un code indiquant le status de l'opération réalisée. Ainsi dans IIS on peut utiliser un format de log W3C qui affichera la colonne sc-status pour le Http status code ainsi que la colonne sc-substatus. Mon but est de parcourir tous les fichiers logs et de calculer le nombre de fois que l'on trouve chacun de ces status code. On pourrait le faire avec du perl, mais je préfère aujourd'hui essayer awk présent sur toutes les bonnes distros Linux en standard. awk ou le plus répandu et moderne gawk est un outil formidable pour traiter très rapidement des gros volumes de données au format texte. Commençons par un exemple simple : je veux trouver toutes les lignes du log ou le code d'état HTTP es

Analyse de fichiers Log en perl

Quand il faut analyser de grandes quantité de données sous format texte tel que des fichiers logs, Perl est d'une aide inappréciable. Voici un joli "perl oneliner" qui va calculer le nombre de hits par user login dans un log IIS perl -ne 'unless (/^#.*$/) {@e=split(/ /,$_); $Login{uc($e[8])}++;} END{foreach $key (sort keys %Login){printf(qq(%-25s %i\n),$key,$Login{$key}); } }' 2007/ex070106.log 2007/ex070107.log |sort -k 2nr >DistinctsLogins200701.txt Analysons un peu cette ligne de commande: perl -ne : on lance perl avec les option -n qui rajoute une boucle while ( <> ) {...} implicite et l'option -e qui permet justement d'exécuter une commande cf doc perl en ligne 'unless (/^#.*$/) { : viens maintenant le début du programme perl, en l'occurrence on dit que tant qu'on est pas dans une ligne de commentaire on va faire quelque chose se trouvant après l'accolade ouvrante. En effet dans les fichiers logs une ligne commentaire c

Downloader un fichier sur le net sous Win32

Il est parfois nécessaire de récupérer un ou plusieurs fichiers sur le net en ligne de commande sous Microsoft. Pour cela il suffit d'utiliser l'excellent curl compilé pour cette plateforme. Ensuite de quoi il faut penser à utiliser un utilisateur null avec l'option -u ":" . Ainsi cela force curl à utiliser les credentials du compte courant, c'est à dire le user qui est connecté. Chez moi au final cela donne curl --anyauth -u ":" -x "" --netrc http://www.test.com/logs/ l'option -x "" annule une evt variable d'environnement définissant un proxy, elle est utile par exemple quand vous ne voulez pas utilisez le proxy parceque votre serveur est dans votre réseau local (et pas sur internet) A vous de voir si vous en avez besoin ou pas selon les cas.