Da ich mich erst spät zu dieser Frage geäußert habe und diese Art von Arbeit als einen wichtigen Teil der Überwachungsarbeit betrachte, möchte ich Folgendes sagen (nicht so kurz) Antwort...
Folgende Protokolle mit bash
1. Befehl tail
Dieser Befehl ist etwas mühsamer als die bereits veröffentlichte Antwort zu lesen
-
Der Unterschied zwischen folgen Option tail -f
y tail -F
, von Manpage :
-f, --follow[={name|descriptor}]
output appended data as the file grows;
...
-F same as --follow=name --retry
...
--retry
keep trying to open a file if it is inaccessible
Das bedeutet: durch die Verwendung von -F
anstelle von -f
, tail
öffnet die Datei(en) erneut, wenn sie entfernt wurde(n) (z. B. bei der Protokollrotation).
Dies ist nützlich, um die Logdatei über mehrere Tage hinweg zu beobachten.
-
Fähigkeit zu folgen mehr als eine Datei gleichzeitig
Ich habe sie bereits verwendet:
tail -F /var/www/clients/client*/web*/log/{error,access}.log /var/log/{mail,auth}.log \
/var/log/apache2/{,ssl_,other_vhosts_}access.log \
/var/log/pure-ftpd/transfer.log
Für die Verfolgung von Ereignissen durch Hunderte von Dateien... (beachten Sie den Rest dieser Antwort, um zu verstehen, wie man sie lesbar macht... ;)
-
Verwendung von Schaltern -n
(Verwenden Sie nicht -c
für die Leitungspufferung!).
Standardmäßig tail
werden die letzten 10 Zeilen angezeigt. Dies kann eingestellt werden:
tail -n 0 -F file
Folgt der Datei, aber nur neue Zeilen werden gedruckt
tail -n +0 -F file
Wird gedruckt ganz Datei, bevor er seinen Weg fortsetzt.
2. Pufferprobleme bei Rohrleitungen :
Wenn Sie planen, Ausgänge zu filtern, sollten Sie Pufferung ! Siehe -u
Option für sed
, --line-buffered
para grep
o stdbuf
mando:
tail -F /some/files | sed -une '/Regular Expression/p'
Ist (viel effizienter als die Verwendung von grep
) sehr viel reaktiver, als wenn Sie nicht die -u
zuschalten sed
Befehl.
tail -F /some/files |
sed -une '/Regular Expression/p' |
stdbuf -i0 -o0 tee /some/resultfile
3. Aktuelles Journalsystem
Auf neueren Systemen wird anstelle von tail -f /var/log/syslog
müssen Sie laufen journalctl -xf
auf fast die gleiche Weise...
journalctl -axf | sed -une '/Regular Expression/p'
Aber lesen man page
Dieses Tool wurde für Protokollanalysen entwickelt!
4. Die Integration in eine bash Skript
-
Farbige Ausgabe von zwei Dateien (oder mehr)
Hier ist ein Beispiel für ein Skript, das viele Dateien überwacht und das Ergebnis für die 1. Datei anders einfärbt als für andere:
#!/bin/bash
tail -F "$@" |
sed -une "
/^==> /{h;};
//!{
G;
s/^\\(.*\\)\\n==>.*${1//\//\\\/}.*<==/\\o33[47m\\1\\o33[0m/;
s/^\\(.*\\)\\n==> .* <==/\\o33[47;31m\\1\\o33[0m/;
p;}"
Auf meinem Rechner funktionieren sie einwandfrei:
sudo ./myColoredTail /var/log/{kern.,sys}log
-
Interaktives Skript
Vielleicht beobachten Sie die Protokolle, um auf Ereignisse zu reagieren?
Hier ist ein kleines Skript, das einen Ton abspielt, wenn ein USB-Gerät auftaucht oder verschwindet, aber dasselbe Skript könnte auch Mails senden oder jede andere Interaktion, wie das Einschalten der Kaffeemaschine...
#!/bin/bash
exec {tailF}< <(tail -F /var/log/kern.log)
tailPid=$!
while :;do
read -rsn 1 -t .3 keyboard
[ "${keyboard,}" = "q" ] && break
if read -ru $tailF -t 0 _ ;then
read -ru $tailF line
case $line in
*New\ USB\ device\ found* ) play /some/sound.ogg ;;
*USB\ disconnect* ) play /some/othersound.ogg ;;
esac
printf "\r%s\e[K" "$line"
fi
done
echo
exec {tailF}<&-
kill $tailPid
Sie könnten kündigen durch Drücken von Q Schlüssel.