syslog-ng et mysql - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 28-05-2008 à 17:17:24
J'ai trouvé la solution à mon problème: en faite les "arguments" ou plutôt les "macros" passés en paramètre sont stockés dans le buffer STDIN. Il faut donc lire ce buffer pour récupérer les données.
Code :
|
et Dans mon script j'utilise la commande "read" pour lire le buffer STDIN.
Mais cette solution est pas sans défaut: je perd des logs. Le temps d'exécutions du script bash est trop long par rapport à la vitesse d'arrivée des logs.
Pour résoudre ce problème, je suis repartis à zéro: j'appelle une procédure stockée de mysql, à la place de la commande d'insertion, dans laquelle je traite le champs 'message' pour récupère les IDs de postfix. L'insertion se fait ensuite en fin de la procédure stockée:
Code :
|
Marsh Posté le 26-05-2008 à 17:18:36
Bonjour,
J'utilise une centralisation de logs avec syslog-ng. Les logs sont ensuite stocker dans une base mysql. J'ai suivis plusieurs Tutos et documentations. Cela fonctionne très bien.
La ou cela se corse, c'est que j'ai besoin de faire un traitement sur une des variables avant injection.
En fait, les logs que je vais centraliser sont uniquement des logs mail (postfix et courier). Le but est de récupérer les ID de mail de postfix contenu dans le message (qui correspond à la variable $MSG) du log, et ensuite d'insérer ces IDs dans un nouveau champ de la table de syslog ('Id' par exemple).
Dans mon fichier de configuration de syslog-ng, j'ai ceci:
Mon idée est d'appeler un script avec la même méthode, càd utiliser "program" qui appelle une commande en bash. Dans ce script, je récupère toute les variables du logs, je traite le champ message en recuperant les ID et j'appelle ensuite la commande mysql pour remplir ma base.
Le problème c'est que je n'arrive pas à récupérer la valeurs les variables $HOST, $FACILITY,...,$MSG.
J'ai tenter d'intercaler une commande "echo" pour tester justement la valeur des variables (ici $MSG):
La bizarrerie, c'est je n'arrive pas à récupérer la valeur $MSG alors que la commande mysql injecte correctement le log dans la base de donnée.
Est il possible d'opérer un traitement de la variable $MSG dans le fichier de configuration de syslog-ng avant injection dans la base ?
Toute aide est la bienvenue, merci d'avance.