Neue Protokolldateien beim Erstellen mit Grep einlesen

Neue Protokolldateien beim Erstellen mit Grep einlesen

Der Server erstellt stündlich eine neue Protokolldatei im Format syslog_all.yyyy-mm-dd-hh und archiviert die Datei der vorherigen Stunde.

Was ich brauche, ist eine Möglichkeit, die aktuellen und noch zu erstellenden Protokolldateien nach einer bestimmten Zeichenfolge zu durchsuchen, ohne den Befehl jede Stunde neu starten zu müssen, nur weil sich der Dateiname geändert hat.

Zurzeit mache ich:

tail -f syslog_all.2017-04-25-09 | egrep -i --line-buffered "string1" | egrep -i "(.*first.*|.*second.*|.*third.*)"

Antwort1

Hier ist ein anspruchsvolles Rezept.

  1. Konfigurieren Sie syslogd oder rsyslogd (je nachdem, welches System Ihr System verwendet), um die erforderlichen Facility-/Prioritätsmeldungen zusätzlich zu dem aktuellen Ziel auch an eine benannte Pipe auszugeben. Auszug ausman rsyslog.conf
Named pipes

   This  version  of  rsyslogd(8) has support for logging output to
   named pipes (fifos). A fifo or named pipe can be used as a  des‐
   tination  for  log messages by prepending a pipe symbol ('|') to
   the name of the file. This is handy for debugging. Note that the
   fifo  must  be  created  with the mkfifo(1) command before rsys‐
   logd(8) is started.

Es gibt ein Beispiel in meinem/etc/rsyslog.d/50-default.conf

daemon.*;mail.*;\
    news.err;\
    *.=debug;*.=info;\
    *.=notice;*.=warn       |/tmp/rt_monitor
  1. Erstellen Sie eine benannte Pipe und verwenden Sie „tail“ und „grep“, um in der Pipe zu lesen und zu suchen.

    mkfifo /tmp/rt_monitor; tail -f /tmp/rt_monitor | grep "alert string"

Sie sollten überprüfen, ob das System weiterläuft, wenn die benannte Pipe voll ist, wenn Ihr Verbraucher nicht ausgeführt wird, und verhindern, dass dies geschieht. Ich habe Ihnen ein sehr grobes Rezept gegeben.

verwandte Informationen