web-dev-qa-db-fra.com

Meilleure façon d'agréger plusieurs fichiers journaux de plusieurs serveurs

J'ai besoin d'un moyen simple de surveiller plusieurs fichiers journaux de texte répartis sur un certain nombre de 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 utilisons simplement ssh pour les serveurs et utilisons tail -f et grep , mais cela ne s'adapte pas lorsque vous avez de nombreux journaux à suivre.

Étant donné que les journaux sont dans différents formats et uniquement des fichiers dans des dossiers (tournés automatiquement lorsqu'ils atteignent une certaine taille), je dois les collecter à distance et les analyser chacun différemment.

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

Quel format de journal dois-je essayer de convertir si je veux l'implémenter de cette façon?

Existe-t-il un autre moyen plus simple? Dois-je essayer de traduire les fichiers journaux au format log4j à utiliser avec Tronçonneuse ou existe-t-il de meilleurs visualiseurs de journaux qui peuvent se connecter à des sockets distants? Puis-je utiliser BareTail comme suggéré dans ne autre question de journal ? Ce n'est pas un système distribué massivement et changer les implémentations de journalisation actuelles pour toutes les applications pour utiliser la diffusion UDP ou placer des messages dans une file d'attente JMS n'est pas une option.

40
Claes Mogren

Options:

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

La solution la plus légère pour regarder les journaux en temps réel est probablement d'utiliser Dancer's Shell en mode simultané avec tail -f:

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

Nous utilisons un script Shell simple comme celui ci-dessous. Vous auriez, bien sûr, à le modifier quelque peu pour lui parler des différents noms de fichiers et décider quelle case rechercher, mais vous avez l'idée de base. Dans notre cas, nous suivons 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

En ce qui concerne le 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 j'ajoute ce qui suit à la fin. 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
12
masukomi

Logscape - comme splunk sans le prix

5
JzJ

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

2
prule

multitail ou

" chip est un outil d'analyse et d'analyse de journaux local et distant pour les administrateurs système et les développeurs.
Il regroupe les fonctionnalités de swatch, tee, tail, grep, ccze et mail en un, avec quelques extras "

Par exemple.

chip -f -m0 = 'RUN' -s0 = 'red' -m1 = '. *' -s1 user1 @ remote_ip1: '/ var/log/log1/var/log/log2/var/log/log3 user2 @ remote_ip2 : '/ var/log/log1/var/log/log2/var/log/log3' '| egrep "RUN | ==> /"

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

2
Joao Figueiredo

Vous pouvez utiliser les différents récepteurs disponibles avec Chainsaw (VFSLogFilePatternReceiver pour exécuter des fichiers sur ssh, SocketReceiver, UDPReceiver, CustomSQLDBReceiver, etc.), puis agréger les journaux dans un seul onglet en modifiant l'identificateur d'onglet par défaut ou en créant un `` panneau d'affichage d'expression personnalisée '' en fournissant une expression qui correspond aux événements dans les différents onglets source.

1
Scott

XpoLog pour Java

1
tom

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

1
Albert T. Wong

Awstats fournit un script Perl qui peut fusionner plusieurs fichiers journaux Apache ensemble. Ce script évolue bien car l'empreinte 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.

1
Alexandre Victoor