
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.
- 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 aus
man 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
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.