Question

J'ai besoin d'un moyen simple de surveiller plusieurs fichiers journaux de texte distribués sur plusieurs serveurs HP-UX. Ils sont un mélange de fichiers journaux texte et XML provenant de plusieurs systèmes hérités distribués. Actuellement, nous ne faisons que ssh sur les serveurs et utilisons tail -f et grep , mais cela ne s’adapte pas lorsque vous avez plusieurs journaux à suivre.

Étant donné que les journaux sont dans différents formats et ne contiennent que des fichiers dans des dossiers (automatiquement pivotés dès qu’ils atteignent une certaine taille), il est nécessaire de les collecter à distance et de les analyser différemment.

Mon idée initiale était de créer un processus démon simple que je puisse exécuter sur chaque serveur en utilisant un lecteur de fichier personnalisé pour chaque type de fichier afin de l'analyser dans un format commun pouvant être exporté sur le réseau via un socket. Un autre programme de visualisation fonctionnant localement se connectera à ces sockets et affichera les journaux analysés dans une interface utilisateur graphique simple ou agrégée sur une console.

Quel format de journal devrais-je essayer de convertir si je veux le mettre en œuvre de cette façon?

Existe-t-il un autre moyen plus simple? Devrais-je essayer de traduire les fichiers journaux au format log4j à utiliser avec Chainsaw ou existe-t-il un meilleur journal téléspectateurs pouvant se connecter à des prises distantes? Puis-je utiliser BareTail comme indiqué dans une autre question de journal ? Ce n'est pas un système largement distribué et une modification des implémentations de journalisation actuelles pour toutes les applications. utiliser la diffusion UDP ou placer des messages sur une file d'attente JMS n'est pas une option.

Était-ce utile?

La solution

Options:

  1. Utilisez un SocketAppender pour envoyer tous les journaux directement à un serveur. (Cela risquerait de nuire aux performances et d’ajouter un seul point d’échec.)
  2. Utilisez des scripts pour agréger les données. J'utilise les clés scp, ssh et d'authentification pour permettre à mes scripts d'obtenir des données de tous les serveurs sans aucune invite de connexion.

Autres conseils

La solution la plus légère pour surveiller les journaux en temps réel consiste à utiliser Shell du danseur en mode simultané avec tail -f:

dsh -Mac -- tail -f /var/log/apache/*.log
  • Le -a concerne tous les noms de machine que vous avez définis dans ~ / .dsh / machines.list
  • Le -c sert à l'exécution simultanée de la queue
  • Le -M ajoute le nom d'hôte à chaque ligne de sortie.

Nous utilisons un script shell simple, comme celui ci-dessous. De toute évidence, vous devrez modifier quelque peu les choses pour préciser les différents noms de fichiers et choisir la boîte dans laquelle chercher, mais vous obtenez l’idée de base. Dans notre cas, nous mettons un fichier au même endroit sur plusieurs boîtes. Cela nécessite une authentification SSH via des clés stockées au lieu de taper des mots de passe.

#!/bin/bash
FILE=$1
for box in box1.foo.com box2.foo.com box3.foo.com box4.foo.com; do
     ssh $box tail -f $FILE &
done

À propos du commentaire de Mike Funk sur le fait de ne pas pouvoir tuer le tailing avec ^ C, je stocke ce qui précède dans un fichier appelé multitails.sh et ajouté ce qui suit à la fin de celui-ci. Cela crée un fichier kill_multitails.sh que vous exécutez lorsque vous avez terminé, puis il se supprime.

# create a bash script to kill off 
# all the tails when you're done
# run kill_multitails.sh when you're finished

echo '#!/bin/sh' > kill_multitails.sh
chmod 755 kill_multitails.sh
echo "$(ps -awx | grep $FILE)" > kill_multitails_ids
perl -pi -e 's/^(\d+).*/kill -9 $1/g' kill_multitails_ids
cat kill_multitails_ids >> kill_multitails.sh
echo "echo 'running ps for it'" >> kill_multitails.sh
echo "ps -awx | grep $FILE" >> kill_multitails.sh
echo "rm kill_multitails.sh" >> kill_multitails.sh
rm kill_multitails_ids


wait

Logscape - comme un splunk sans étiquette de prix

multitail ou

" puce est une analyse et une surveillance locales et distantes des journaux. outil pour les administrateurs système et les développeurs.
Il regroupe les fonctionnalités de swatch, tee, tail, grep, ccze et mail, avec quelques extras "

".

Par exemple

puce -f -m0 = 'RUN' -s0 = 'rouge' -m1 = '. *' -s1 utilisateur1 @ distant_ip1: '/ var / log / log1 / var / log / log2 / var / log / log3 utilisateur2 @ remote_ip2: '/ var / log / log1 / var / log / log2 / var / log / log3' '| egrep " RUN | == > / "

Ceci mettra en évidence en rouge les occurrences du motif -m0, pré-filtrer le 'RUN | == > / 'modèle de tous les fichiers journaux.

J'ai écrit vsConsole dans ce but précis - accès facile aux fichiers journaux - puis j'ai ajouté la surveillance des applications et le suivi des versions. Voudrais savoir ce que vous en pensez. http://vs-console.appspot.com/

Awstats fournit un script Perl pouvant fusionner plusieurs fichiers journaux Apache. Ce script s'adapte bien car l'encombrement de la mémoire est très faible, les fichiers journaux ne sont jamais chargés en mémoire. Je sais que ce n’est pas exactement ce dont vous avez besoin, mais vous pouvez peut-être partir de ce script et l’adapter à vos besoins.

Vous pouvez utiliser les différents récepteurs disponibles avec Chainsaw (VFSLogFilePatternReceiver) pour archiver les fichiers via ssh, SocketReceiver, UDPReceiver, CustomSQLDBReceiver, etc.), puis les regrouper en un seul onglet en modifiant l'identificateur d'onglet par défaut ou en créant un panneau de journal des expressions personnalisées. 'en fournissant une expression qui correspond aux événements des différents onglets source.

gltail - visualisation en temps réel du trafic du serveur, des événements et des statistiques avec Ruby, SSH et OpenGL depuis plusieurs serveurs

XpoLog pour Java

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top