DigitalSpirit / Blog

Log Watcher

Introduction

Surveiller des logs dans une console est quelque chose de laborieux et toute solution permettant de simplifier cette tâche ingrate est bonne...

Et c'est justement là qu'intervient Log Watcher, une application qui va vous améliorer grandement la vie lorsque vous aurez besoin de surveiller d'ininterrompu log...

Description

Traduction libre du manuel lwatch :

Log Watcher est un "log colorizer", c'est à dire un programme capable de mettre en couleur des logs en fonction d'une syntaxe, en l'occurrence, en fonction de mots rencontrés.
Il lit le contenu de syslog/syslog-ng depuis des tubes nommées (named fifo) ou depuis l'entrée standard (stdin) et affiche les données colorées dans la sortie standard (stdout).

Lwatch est hautement configurable. Il lit sa configuration depuis /etc/lwatch/lwatch.cond ou depuis un fichier grâce à l'option -C.

Son fonctionnement est simple. il lit une ligne depuis l'entrée courante (par défaut, /var/lib/lwatch/syslog.fifo), la divise en 4 parties : date, nom d'hôte, nom du service (avec le PID si disponible) et le message associé.
Chaque partie possède sa propre couleur qu'il est possible de définir grâce au fichier de configuration, les couleurs par défaut sont les mêmes que pour loco.

Mais lwatch n'est pas seulement un simple log colorizer, il est capable de colorer les logs de la manière qu'on le souhaite. Il est possible de choisir une nouvelle couleur pour chaque partie (date, nom d'hôte, service, message) en utilisant des expressions régulières.

Installation

L'installation est aisée avec Ubuntu, en effet, elle se résume simplement à saisir ceci dans un terminal :

sudo apt-get install lwatch

Et voilà lwatch installé sur votre machine.

Configuration

Il est possible de configurer l'affichage à l'aide du fichier /etc/lwatch/lwatch.conf dont la syntaxe est assez simple, voici un exemple de celle ci :

[...]
/reject\\w*/    highlight=red
/accept\\w*/    highlight=green
/success\\w*/   highlight=green
/sent/        highlight=green
/lost/        highlight=red   
/deferred/    highlight=brown
[...]

Que veut dire ce charabia ?
En fait, ce sont des règles de configuration constituées par une expression régulière et une actions ou modificateurs associés.

Nous allons voir les différents termes que l'on rencontre dans le fichier de configuration.

Options générales

Les options suivantes vous permettent de définir le comportement par défaut de Log Watcher :

  • date_color : Couleur par défaut de la date
  • host_color : Couleur par défaut du nom d'hôte
  • serv_color : Couleur par défaut du nom du serveur
  • mesg_color : Couleur par défaut du message
  • input_file : Fichier du flux
  • output_file : Fichier de sortie (par défaut, c'est la sortie standard stdout)
  • show_unparsed : Permet d'afficher les lignes qui ne répondent pas au bon formatage (date, nom d'hôte, service, message)

Les couleurs

Voici la liste des couleurs qu'il est possible d'utiliser :

blackred green brown blue magenta cyan lightgray darkgray brightred brightgreen yellow brightblue purple brightcyan white

Expressions régulières

Afin de matcher (c'est à dire choisir, attraper, sélectionner, la traduction n'est pas facile... :) ) les bonnes lignes avant de leur appliquer une action, Log Watcher utilise des expressions régulières, voici le principe :

/expression/ action
Simple ! non ?

Voici un autre exemple avec plusieurs actions :

/espression/ {
    action1
    action2
    ...
    actionN
}

Actions et modificateurs

Les actions vont vous permettre de mettre en couleur les éléments sélectionnés par l'expression régulière.

Voici les actions disponibles :

  • date_color : Couleur par défaut de la date
  • host_color : Couleur par défaut du nom d'hôte
  • serv_color : Couleur par défaut du nom du serveur
  • mesg_color : Couleur par défaut du message
  • exit : Ne pas exécuter les autres expressions
  • highlight : Mettre en surbrillance
  • ignore : Ignorer et ne pas exécuter les autres expressions
  • match_host : Exécuter l'expression régulière sur le nom d'hôte au lieu du message
  • match_service : Exécuter l'expression régulière sur le service au lieu du message

Voilà, on en sait assez maintenant pour lancer Log Watcher !

Utilisation

Pour surveiller simplement le syslog de votre machine, cette commande suffit :

tail -f /var/log/syslog | /usr/bin/lwatch -i-

Le fichier de log /var/log/syslog apparaîtra désormais d'une manière coloré en fonction de la présence ou non de termes sur chaque lignes.

Pour éviter d'avoir à saisir cette longue commande, vous pouvez créer un alias de cette manière :

alias systail="tail -f /var/log/syslog | /usr/bin/lwatch -i-"

Ainsi, vous n'aurez plus qu'à saisir systail pour voir les logs défilés...en couleurs (n'oubliez pas de mettre cette alias dans votre script de lancement, .bashrc par exemple).

Voici une vue globale de la fenêtre de log maintenant en couleur :

Vue d'un terminal mis en couleur avec Log Watcher !

Conclusion

Vous voilà prêt à surveiller d'interminable log, si quelques interrogations subsistaient, posez vos questions en commentaires, consultez le site officiel de développement de Log Watcher et n'oubliez pas le man (man lwatch et man lwatch.conf) !

Ouvrir l'article

Lecture de fichiers Tomtom Ov2 et Garmin Asc

Pour les besoins de Hyla 0.8.1 et, plus particulièrement, de son plugin Géo, j'ai créé une librairie d'accès aux fichiers Ov2 de Tomtom et Asc de Garmin, ces derniers contiennent des informations géographiques, et notamment, des POI.

Cette librairie vous permet d'extraire les données contenues dans les fichiers sus-cités sous forme de tableaux directement exploitables dans votre application.

Voici le contenu du fichier test fourni qui se contente de lire un fichier au format Ov2 et fait un "dump" du contenu du tableau renvoyé :

<?php
/*  Ov2 and Asc reader
    hugo arobase digitalspirit dot org
    c.rincheval, 2007
 */

require 'geo.class.php';

$data = geo::getData('FON_FR.ov2', 'ov2');

print_r($data);

?>

Comme vous le voyez, l'utilisation est très simple...

En annexe, une archive contenant la classe, un fichier de test et un fichier au format ov2.

Ouvrir l'article

Librairie Php simple pour l'Api Flickr

J'ai écrit une librairie pour accéder à l'API Flickr (pour ceux qui sorte du fin fond de la jungle et qui n'en ont jamais entendu parler, je vous laisse y jeter un oeil) qui vous permettra d'accéder à l'ensemble des fonctionnalités distantes qu'offre le service.

Certain me diront qu'ils en existent une multitude sur le net et ils auront raison, enfin, presque, car, aucune de celles que j'ai trouvée ne me convenaient, bien trop complexe pour certaines, plutôt sales pour d'autres, j'ai donc décidé d'écrire la mienne avec comme seules contraintes, faire quelque chose de simple et qui fonctionne...proprement.

L'archive contient un fichier test.php, en voici le contenu :

<?php

/* Minimalist class for accessing Flickr web services
hugo arobase digitalspirit dot org
c.rincheval, 2007
*/

require 'flickr.class.php';

define('FLICKR_KEY', 'YOUR_FLICKR_KEY');
define('FLICKR_SECRET', 'YOUR_FLICKR_SECRET');

$flk = new flickr(FLICKR_KEY, FLICKR_SECRET);

$args = array();
$rsp = $flk->request('flickr.photos.getRecent', $args);

if ($rsp['stat'] == 'ok') {
$url_img = 'http://farm%s.static.flickr.com/%s/%s_%s%s.jpg';
foreach ($rsp['photos']['photo'] as $photo) {
echo '<img src="'.sprintf($url_img, $photo['farm'], $photo['server'], $photo['id'], $photo['secret'], '_s').'" alt="" />';
}
}

?>

Cet exemple va chercher sur le site de Flickr les photos les plus récentes et les affichent directement sur la page.

Comme vous pouvez le voir, c'est relativement simple et vous pouvez, comme je l'ai fait, étendre ces fonctionnalités en dérivant de cette classe.

Vous trouverez ci-joint l'archive contenant les sources de la classe, le fichier d'exemple et le fichier de license GNU/GPL.

Ouvrir l'article

Sortie de Hyla 0.8.1

Je suis heureux de vous annoncer la sortie de Hyla 0.8.1 qui apporte son lot de nouveautés et quelques corrections de bugs, dont, voici, ci dessous la liste :

Nouveautés

Plugins

  • Refonte globale du système de plugins
  • Ajout du plugin geshi (affichage du code source d'énormément de formats de fichiers, voici les extensions prisent en compte : as, a, ada, adb, ads, conf, ash, asm, asp, sh, c, h, cdfg, cpp, hpp, css, dpk, dpr, html, htm, java, js, lisp, lua, pas, pl, pm, php, php3, php4, php5, phtml, phps, py, bi, sas, bas, xml)
  • Ajout du plugin geo qui permet d'afficher sur une map (Google Maps) les fichiers au format KML, les fichiers OV2 de TomTom et les fichiers ASC de Garmin
  • Modification des fichiers info.xml dans les plugins et ajout de l'attribut enabled permettant de désactiver un plugin
  • Introduction des plugin d'url qui permettent de générer des url de toute sorte et ajout du plugin d'url pathinfo
  • Le fichier de configuration général des plugins (/conf/plugins.ini) est remplacé par un fichier (conf.ini) directement dans le dossier des plugins en nécessitant

Fontionnalités

  • Possibilité de spécifier le format voulu lors du téléchargement d'un dossier, d'un fichier ou d'une archive (tar, gz, tgz, zip)
  • Il est dorénanant possible pour chaque utilisateur de changer son mot de passe lui même
  • Ajout d'un système permettant à un utilisateur de créer son compte de lui même (basé sur la contribution de KaZaad sur le forum)
  • Ajout du choix concernant la création des comptes par les utilisateurs dans l'interface d'administration
  • L'export du contenu des plugins permet d'afficher le contenu d'un plugin directement dans un billet sur son blog ou sur un forum, il existe actuellement en export iframe et javascript, voir explication dédié à l'exportation
  • La possibilité de spécifier une limite (download_dir_max_filesize) indiquant à partir de quelle taille il ne faut plus sauvegarder le cache d'un dossier archivé

Apparence

  • Création de la feuille de style "Flat Dark"
  • Ajout du plugin jQuery tablesorter permettant de trier les éléments des tableaux
  • Les css et js des modèles sont placés respectivement dans les dossiers css et js des modèles

Pour les développeurs

  • Ajout d'une méthode permettant d'ajouter des entêtes quelconque dans le "head" d'une page (utile pour les plugins ayant besoin d'ajouter des scripts js)
  • Les plugins possèdent maintenant, dans leurs fichiers info.xml, une balise (minversion) permettant de définir la version minimale de Hyla

La documentation à bien sûr été mise à jour et je vous invite à la consulter !

Liens

  Merci à TuxFamily pour l'hébergement du projet !

Ouvrir l'article

Le futur de Hyla

Hyla 30 août 2007 par hugo

Une toute nouvelle version de maintenance qui apporte quelques nouveautés est en cours de bêta test actuellement, elle est d'ailleurs passé en Release Candidate et devrait sortir très prochainement, promis !

Par la suite, Hyla va subir de gros changements lui apportant de nouvelles fonctionnalités qui lui manque actuellement...

Voici la liste des fonctionnalités actuellement prévues pour la future version, par ordre d'importance :

Majeures :

  • Sélection multiple : permettre de déplacer un ensemble de fichiers / dossiers d'un coup
  • Ajout des Web Services : pouvoir commander Hyla à distance, ajouter de l'Ajax...etc...
  • Tags : Tagger n'importe quel contenu et générer un nuage de tag, être en mesure de faire des recherches sur les tags
  • Passer les actions en plugins : Simplifier la maintenance et la logique
  • Système de panier
  • Plugin db : ajouter un système de plugin database permettant de choisir le type de base (mysql, sqlite, postgres...)
  • Plugin admin : Faire en sorte de passer l'administration sous forme de plugin (plugin user, group...)
  • Système de logging permettant d'enregistrer toutes les actions

Mineures :

  • Permettre de spécifier un courriel pour chaque utilisateur

Pas sûr ?

  • Permettre de spécifier plusieurs FOLDER_ROOT
  • Ajouter l'édition dans les plugins
  • Pouvoir spécifier une licence (ou disclaimer) pour un fichier
  • ...

Voilà, si vous aussi, avez des idées pour l'avenir de Hyla, n'hésitez pas !

Web Services :

Afin de pouvoir ajouter des fonctionnalités Web 2.0 (sans pour autant perdre en accessibilité, pas d'inquiétude), Hyla vas se voir doter d'un système de services web permettant d'interroger Hyla à distance, par exemple, en Ajax...

Le principe de fonctionnement retenu pour faire fonctionner ces derniers sera celui de Flickr.

Voici une liste non exhaustive des points d'entrées des web services qui seront présent :

Objets :
  • hyla.obj.getInfo
  • hyla.obj.search
  • hyla.file.getContent
  • hyla.obj.attribute.get
  • hyla.obj.attribute.set
  • hyla.dir.getList
Action :
  • hyla.obj.action.copy
  • hyla.obj.action.move
  • hyla.obj.action.delete
  • hyla.obj.action.mkdir
  • hyla.obj.action.rename
Permissions :
  • hyla.dir.perms.get
  • hyla.dir.perms.set
  • hyla.dir.perms.del
Tags :
  • hyla.obj.tag.add
  • hyla.obj.tag.set
  • hyla.obj.tag.getList
  • hyla.obj.tag.remove
Commentaires :
  • hyla.obj.comment.add
  • hyla.obj.comment.edit
  • hyla.obj.comment.delete
  • hyla.obj.comment.getList
Utilisateurs :
  • hyla.user.add
  • hyla.user.delete
  • hyla.user.getList
  • hyla.user.getInfo
  • hyla.user.auth
  • hyla.user.logout
  • hyla.user.setType
  • hyla.user.setPassword
  • hyla.user.testLogin
Groupes :
  • hyla.group.add
  • hyla.group.rename
  • hyla.group.delete
  • hyla.group.getList
  • hyla.group.user.add
  • hyla.group.user.del
  • hyla.group.user.getList
Logs :
  • hyla.log.add
  • hyla.log.getList
  • hyla.log.clear
Test :
  • hyla.test.echo
Ouvrir l'article

« Page 22 / 32 »