This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
uls:agents:log_file_adapter [2023-11-19 13:55] uls [Configuration File] |
uls:agents:log_file_adapter [2025-12-09 10:54] (current) uls [Examples] |
||
|---|---|---|---|
| Line 50: | Line 50: | ||
| Für jede neu hinzukommende Zeile werden folgende Aktionen durchgeführt: | Für jede neu hinzukommende Zeile werden folgende Aktionen durchgeführt: | ||
| * passt die Zeile zum regulären Ausdruck von vreg, dann diese Zeile ignorieren => auf nächste Zeile warten | * passt die Zeile zum regulären Ausdruck von vreg, dann diese Zeile ignorieren => auf nächste Zeile warten | ||
| - | * passt die Zeile zu einem regulären Ausdruck von reg0..reg99 oder reg0+..reg99+, dann die Zeile parsen mit iformat0..99 und entsprechende action0..action99 ausführen => wenn reg0+..reg99+, dann weiter vergleichen, sonst auf nächste Zeile warten | + | * passt die Zeile zu einem regulären Ausdruck der reg oder reg+, dann die Zeile parsen mit iformat und entsprechende action, write oder syslog ausführen |
| - | * ist ereg_all = 1, dann eaction ausführen => auf nächste Zeile warten | + | => wenn reg+, dann weiter vergleichen, sonst auf nächste Zeile warten |
| - | * passt die Zeile zum regulären Ausdruck von ereg, dann die Zeile parsen mit inputformat und eaction ausführen => auf nächste Zeile warten | + | |
| - | * ist wreg_all = 1, dann waction ausführen => auf nächste Zeile warten | + | |
| - | * passt die Zeile zum regulären Ausdruck von wreg, dann die Zeile parsen mit inputformat und waction ausführen => auf nächste Zeile warten | + | |
| * ist lreg_all = 1, dann laction ausführen => auf nächste Zeile warten | * ist lreg_all = 1, dann laction ausführen => auf nächste Zeile warten | ||
| * passt die Zeile zum regulären Ausdruck von lreg, dann die Zeile parsen mit inputformat und laction ausführen => auf nächste Zeile warten | * passt die Zeile zum regulären Ausdruck von lreg, dann die Zeile parsen mit inputformat und laction ausführen => auf nächste Zeile warten | ||
| * wenn keine der obigen Bedingungen erfüllt sind, dann wird die Zeile ignoriert => auf nächste Zeile warten | * wenn keine der obigen Bedingungen erfüllt sind, dann wird die Zeile ignoriert => auf nächste Zeile warten | ||
| - | Zu allen direkt eingetragenen regulären Ausdrücken reg?[+] kann auch eine Datei reg_file?[+] angegeben werden, die mehrere Zeilen mit jeweils einem regulären Ausdruck enthalten können. Die regulären Ausdrücke werden bei der Anwendung von reg_file? logisch ODER verknüpft. Es wird entweder reg? oder reg_file? verwendet, der letzte Eintrag in der Konfigurationsdatei entscheidet. | + | Zu allen direkt eingetragenen regulären Ausdrücken reg[+] kann auch eine Datei reg_file[+] angegeben werden, die mehrere Zeilen mit jeweils einem regulären Ausdruck enthalten können. Die regulären Ausdrücke werden bei der Anwendung von reg_file logisch ODER verknüpft. Es wird entweder reg oder reg_file verwendet, der letzte Eintrag in der Konfigurationsdatei entscheidet. |
| Line 235: | Line 232: | ||
| # es können bis zu 100 Dateien überwacht werden, die als feste Dateinamen oder Suchmuster angeben werden | # es können bis zu 100 Dateien überwacht werden, die als feste Dateinamen oder Suchmuster angeben werden | ||
| - | # d. h. inputfile und inputfilepattern darf mehrfach angegeben werden | + | # d. h. inputfile, inputfiles, inputfilepattern und inputfilepatterns dürfen mehrfach angegeben werden |
| # feste Dateinamen | # feste Dateinamen | ||
| Line 252: | Line 249: | ||
| # Es wird die erste Datei, die zum Muster passt überwacht. | # Es wird die erste Datei, die zum Muster passt überwacht. | ||
| # Wenn die Datei gelöscht oder komprimiert wird, dann wird erneut gesucht. | # Wenn die Datei gelöscht oder komprimiert wird, dann wird erneut gesucht. | ||
| - | # | + | # |
| inputfilepattern = /var/log/prod/logfile*.log | inputfilepattern = /var/log/prod/logfile*.log | ||
| + | |||
| + | # Dateien nach Muster in mehreren Pfaden | ||
| + | # | ||
| + | # Wenn der Name der Logdatei nicht feststeht. | ||
| + | # Es wird in allen Pfaden jeweils die erste Datei, die zum Muster passt überwacht. | ||
| + | # Wenn die Datei gelöscht oder komprimiert wird, dann wird erneut gesucht. | ||
| + | # Der letzte Wildcard gibt an, über welche Dateien die neueste gesucht werden soll. | ||
| + | # Wenn der veränderliche Teil nicht am Ende steht, dann muss der veränderliche Teil | ||
| + | # in {...} eingeschlossen werden. | ||
| + | # | ||
| + | inputfilepatterns = /var/log/*/logfile*.log # jeweils die neueste Datei pro Ordner | ||
| + | inputfilepatterns = /var/log/*_logfile*.log # mehrere Logfiles in einem Ordner | ||
| + | inputfilepatterns = /var/log/logfile_{*}_*.log # mehrere Logfiles in einem Ordner, das Datum steht vorn | ||
| + | |||
| # Die Suchreihenfolge kann geändert werden: | # Die Suchreihenfolge kann geändert werden: | ||
| Line 268: | Line 279: | ||
| # unabhängig von inputfilepatternsort wird auf die neueste Datei gewechselt | # unabhängig von inputfilepatternsort wird auf die neueste Datei gewechselt | ||
| inputfilepatternsearch = 60 | inputfilepatternsearch = 60 | ||
| + | |||
| + | # inputfilereopen | ||
| + | # Bei Linux werden die Logdateien nicht geschlossen | ||
| + | inputfilereopen = 1 # Logdateien schließen, wenn nicht gelesen wird (ist bei Windows standard) | ||
| + | |||
| + | # exit_on | ||
| + | # der lfa4uls kann beendet werden, wenn: | ||
| + | exit_on = EOF # beenden, wenn Datei zu Ende gelesen wurde | ||
| + | exit_on = FNF # wenn keine Datei gefunden wird, bzw. wenn es keine neue Datei gibt | ||
| Line 340: | Line 360: | ||
| %0 bis %9 - freie Variablen | %0 bis %9 - freie Variablen | ||
| # die Variablen %h, %q und %0 - %9 können global vorbelegt werden: | # die Variablen %h, %q und %0 - %9 können global vorbelegt werden: | ||
| - | set <varname>=<value> | + | set <varname> = <value> |
| - | # ----- DIRECTORY ----- | ||
| - | # Für die Directory-Funktionen wird I-Notify verwendet, das unter Windows nicht zur Verfügung steht. | ||
| - | # | ||
| - | # Zu überwachendes Verzeichnis (nicht zusammen mit inputfile oder inputfilepattern) | ||
| - | inputdir = /var/log | ||
| - | # inputdir_num_subdirs wenn auf größer 1 gesetzt, dann werden bis zu inputdir_num_subdirs Unterverzeichniss mit überwacht | + | # ----- date time ----- |
| - | inputdir_num_subdirs = 50 | + | utcin = 1|0 # read timestamps in UTC or localtime |
| + | utcout = 1|0 # write timestamps in UTC or localtime | ||
| - | # inputdir_num_files: Anzahl gleichzeitig offener Dateien, die überwacht werden. | ||
| - | # std ist 300 | ||
| - | inputdir_num_files = 100 | ||
| - | # dirfilepattern legt die Dateien fest, die Zeilenweise ausgewertet werden. Hist und consolidate ist noch nicht möglich. | + | # ----- INPUT LINE FORMAT ----- |
| - | dirfilepattern = *.log | + | |
| - | + | ||
| - | # dirfilepipepattern: Dateien, die nach dem schließen an Kommando gesendet werden | + | |
| - | # dirfilepipecmd: Dateien werden an STDIN des CMDs gesendet. | + | |
| - | # Es können Parameter mit Codes verwendet werden. Die Codes %p, %P und Datumswerte sind gesezt, | + | |
| - | # die anderen Codes sind nur gesetzt, wenn die Datei auch bei dirfilepattern ausgewählt ist. | + | |
| - | dirfilepipepattern = *.dat | + | |
| - | dirfilepipecmd = send_compressed_file %p %P | + | |
| - | + | ||
| - | # dirfileclosepattern Das Schließen von Dateien überwachen | + | |
| - | # dirfileclosecmd CMD ausführen, Parameter siehe dirfilepipecmd | + | |
| - | # dirfileclosewrite angegebenen Text in Ausgabedatei schreiben, Codes wie bei dirfilepipecmd | + | |
| - | dirfileclosepattern = *.info | + | |
| - | dirfileclosecmd = echo "Datei %P wurde geschlossen" | + | |
| - | dirfileclosewrite = V;%F %T;%h;LFA;Dirmon;Close;%P;_ | + | |
| - | + | ||
| - | # dirfilecreatepattern Anlegen von Dateien monitoren | + | |
| - | # dirfilecreatecmd | + | |
| - | # dirfilecreatewrite | + | |
| - | + | ||
| - | # dirfiledeletepattern Löschen von Dateien monitoren | + | |
| - | # dirfiledeletecmd | + | |
| - | # dirfiledeletewrite | + | |
| - | + | ||
| - | # dirfilemodifypattern Ändern von Dateien monitoren | + | |
| - | # dirfilemodifycmd | + | |
| - | # dirfilemodifywrite | + | |
| - | + | ||
| - | # dirfilemovedfrompattern Wegmoven von Dateien monitoren | + | |
| - | # dirfilemovedfromcmd | + | |
| - | # dirfilemovedfromwrite | + | |
| - | + | ||
| - | # dirfilemovedtopattern Hinmoven von Dateien monitoren | + | |
| - | # (Wird eine Datei umbenannt, gibt es ein movedfrom und ein movedto) | + | |
| - | # (Wird eine Datei von einem Verzeichnis in ein anderes gemoved, dann | + | |
| - | # werden movedfrom und movedto nur für überwachte Verzeichnisse generiert) | + | |
| - | # dirfilemovedtocmd | + | |
| - | # dirfilemovedtowrite | + | |
| - | + | ||
| - | # dirfileopenpattern Öffnen von Dateien monitoren | + | |
| - | # dirfileopencmd | + | |
| - | # dirfileopenwrite | + | |
| - | + | ||
| - | + | ||
| - | # ----- LINE FORMAT ----- | + | |
| - | # | + | |
| - | # ----- INPUT FORMAT ----- | + | |
| inputformat = %t %h %q: %sValue1: %1, Value2: %2, %W | inputformat = %t %h %q: %sValue1: %1, Value2: %2, %W | ||
| Line 412: | Line 378: | ||
| inputformat =| %t %h %q: %svalue1: %1, value2: %2, %W | inputformat =| %t %h %q: %svalue1: %1, value2: %2, %W | ||
| + | # Folgende Codes koennen zum Parsen der Zeilen benutzt werden: | ||
| + | |||
| + | %% => % | ||
| + | %[<CHARS>] => ein beliebiges Zeichen aus <CHARS> | ||
| + | %s => ein String (wird verworfen) | ||
| + | %.<n>s => <n> Zeichen (werden verworfen) | ||
| + | %t => Datum im Format: MMM TT hh:mm:ss (Monat Tag Stunde:Minute:Sekunde) | ||
| + | oder im Format: YYYY-MM-DD[T ]hh:mm:ss[.ssssss][+-hh:mm] | ||
| + | %c => ein Zeichen (wird verworfen) | ||
| + | %.<n>c => <n> Zeichen (werden verworfen) | ||
| + | %h => Host | ||
| + | %q => Quelle, Besonderheit bei %q: Ausdrücke, die in '()', '[]' oder '{}' stehen gelten bei der Wiederarlarmierung als identisch. | ||
| + | %W => Meldung (gelesen wird bis zum Zeilenende) | ||
| + | %D => Datum im Format: DD.MM.YY oder DD.MM.YYYY | ||
| + | %F => Datum im Format: YYYY-MM-DD | ||
| + | %T => Zeit im Format: hh:mm:ss | ||
| + | %d => Tag | ||
| + | %m => Monat | ||
| + | %b => Monatsname (erste drei Zeichen) | ||
| + | %y => Jahr (zweistellig) | ||
| + | %Y => Jahr (vierstellig) | ||
| + | %H => Stunde | ||
| + | %M => Minute | ||
| + | %S => Sekunde | ||
| + | %0 => Variable 0 | ||
| + | %.<n>:0 => <n> Zeichen in Variable 0 | ||
| + | %#0 => Nur Zahlen (Float) nach Variable 0 | ||
| + | %1 => Variable 1 | ||
| + | %.<n>:1 => <n> Zeichen in Variable 1 | ||
| + | ... | ||
| + | %9 => Variable 9 | ||
| + | %-0 => Bei Konsolidierung kann so ein Wert aus der %{0,DIST} Liste entfernt werden | ||
| + | ... Kann in Verbindung mit regsplit genutzt werden, um z. B. eine Pfad, der offline geht mit %0 zu setzen und wenn der wieder | ||
| + | %-9 online geht mit %-0 zu löschen. Die Zeile wird dann nach z. B. 10 Minuten nur dann geschrieben, wenn test auf %{0,DIST} > 0 erfüllt ist. | ||
| + | Siehe Example2: Usage %{<n>,DIST} | ||
| + | %.<n>:9 => <n> Zeichen in Variable 9 | ||
| + | %i<[hqVW0-9]> => dieses Feld wird geparst, aber bei der Deduplizierung ignoriert. %s und %c werden bei der Deduplizierung immer ignoriert. | ||
| + | |||
| + | Leerzeichen zwischen den Codes ersetzen soviele white-spaces wie moeglich. | ||
| - | # Folgende Codes koennen zum Parsen der Zeilen benutzt werden: | ||
| - | # %% => % | ||
| - | # %[<CHARS>] => ein beliebiges Zeichen aus <CHARS> | ||
| - | # %s => ein String (wird verworfen) | ||
| - | # %.<n>s => <n> Zeichen (werden verworfen) | ||
| - | # %t => Datum im Format: MMM TT hh:mm:ss (Monat Tag Stunde:Minute:Sekunde) | ||
| - | # oder im Format: YYYY-MM-DD[T ]hh:mm:ss[.ssssss][+-hh:mm] | ||
| - | # %c => ein Zeichen (wird verworfen) | ||
| - | # %.<n>c => <n> Zeichen (werden verworfen) | ||
| - | # %h => Host | ||
| - | # %q => Quelle, Besonderheit bei %q: Ausdrücke, die in '()', '[]' oder '{}' stehen gelten bei der Wiederarlarmierung als identisch. | ||
| - | # %W => Meldung (gelesen wird bis zum Zeilenende) | ||
| - | # %D => Datum im Format: DD.MM.YY oder DD.MM.YYYY | ||
| - | # %F => Datum im Format: YYYY-MM-DD | ||
| - | # %T => Zeit im Format: hh:mm:ss | ||
| - | # %d => Tag | ||
| - | # %m => Monat | ||
| - | # %b => Monatsname (erste drei Zeichen) | ||
| - | # %y => Jahr (zweistellig) | ||
| - | # %Y => Jahr (vierstellig) | ||
| - | # %H => Stunde | ||
| - | # %M => Minute | ||
| - | # %S => Sekunde | ||
| - | # %0 => Variable 0 | ||
| - | # %.<n>:0 => <n> Zeichen in Variable 0 | ||
| - | # %#0 => Nur Zahlen (Float) nach Variable 0 | ||
| - | # %1 => Variable 1 | ||
| - | # %.<n>:1 => <n> Zeichen in Variable 1 | ||
| - | # ... | ||
| - | # %9 => Variable 9 | ||
| - | # %.<n>:9 => <n> Zeichen in Variable 9 | ||
| - | # %i<[schqW0-9]> => dieses Feld wird geparst, aber bei der Deduplizierung ignoriert | ||
| - | # | ||
| - | # Leerzeichen zwischen den Codes ersetzen soviele white-spaces | ||
| - | # wie moeglich. | ||
| - | # | ||
| # Die meisten Codes stehen in den ?action und ?write fuer eine Ausgabe zur Verfuegung, | # Die meisten Codes stehen in den ?action und ?write fuer eine Ausgabe zur Verfuegung, | ||
| # siehe ACTION FORMAT. | # siehe ACTION FORMAT. | ||
| Line 458: | Line 427: | ||
| # alle Codes des Inputfomates ohne %t, %s, %s* und %c | # alle Codes des Inputfomates ohne %t, %s, %s* und %c | ||
| # | # | ||
| - | # %y => Jahr im Format YY | + | |
| - | # %Y => Jahr im Format YYYY | + | %y => Jahr im Format YY |
| - | # %b => Monatsname (erste drei Zeichen) | + | %Y => Jahr im Format YYYY |
| - | # %d => Tag (01..31) | + | %b => Monatsname (erste drei Zeichen) |
| - | # %m => Monat (01..12) | + | %d => Tag (01..31) |
| - | # %N => Anzahl gleicher Zeilen bie (hist_secs > 0) oder Anzahl bei sum_hist | + | %m => Monat (01..12) |
| - | # %F => Datum im Format: YYYY-MM-DD | + | %N => Anzahl gleicher Zeilen bie (hist_secs > 0) oder Anzahl bei sum_hist |
| - | # %z => die ganze Zeile | + | %F => Datum im Format: YYYY-MM-DD |
| - | # %l => Gesamtzahl bisher gelesener Zeilen | + | %z => die ganze Zeile |
| - | # %L => gelesene Zeilen seit letzter Ausgabe mit %L | + | %l => Gesamtzahl bisher gelesener Zeilen |
| - | # %C => Änderungsdatum der Datei im Format YYYY-MM-DD hh:mm:ss | + | %L => gelesene Zeilen seit letzter Ausgabe mit %L |
| - | # %B => Größe der Datei in Bytes (wenn von CMD oder Stdin gelesen wird, dann 0) | + | %C => Änderungsdatum der Datei im Format YYYY-MM-DD hh:mm:ss |
| - | # %p => Dateiname der überwachten Datei - Kann bei consolidate nicht genutzt werden | + | %B => Größe der Datei in Bytes (wenn von CMD oder Stdin gelesen wird, dann 0) |
| - | # %{p,<c>,<start>[,[<end>][,<str>[,<lstr>]]]} => Dateiname nach Zeichen <c> trennen und Teil des Dateinamens | + | %p => Dateiname der überwachten Datei - Kann bei consolidate nicht genutzt werden |
| - | # von <start> bis <end> und ggf. <c> durch <str> ersetzen. | + | %{p,<c>,<start>[,[<end>][,<str>]]} => Dateiname nach Zeichen <c> trennen und Teil des Dateinamens |
| - | # Ist nur <start> angegeben, nur dieses Element des Dateinamens. | + | von <start> bis <end> und ggf. <c> durch <str> ersetzen. |
| - | # 0 als <end> ist bis zum Ende. | + | Ist nur <start> angegeben, nur dieses Element des Dateinamens. |
| - | # -1 als <end> ist bis zum vorletzten | + | 0 oder -1 als <end> ist bis zum Ende. Wenn <start> oder <end> negativ ist, |
| - | # ist <lstr> angegeben, wird das letzte <c> durch <lstr> ersetzt. | + | wird von hinten gezählt. |
| - | # (keine Funktion bei -1 als <end>) | + | Kann bei consolidate nicht genutzt werden |
| - | # Kann bei consolidate nicht genutzt werden | + | %P => kompletter Pfad der überwachten Datei - Kann bei consolidate nicht genutzt werden |
| - | # %P => kompletter Pfad der überwachten Datei - Kann bei consolidate nicht genutzt werden | + | %{P,<start>[,[<end>][,<str>]]} => Teil des Pfades von <start> bis <end> und ggf. '/' durch <str> ersetzen. |
| - | # %{P,<start>[,[<end>][,<str>[,<lstr>]]]} => Teil des Pfades von <start> bis <end> und ggf. '/' durch <str> ersetzen. | + | Ist nur <start> angegeben, nur dieses Element des Pfades. |
| - | # Ist nur <start> angegeben, nur dieses Element des Pfades. | + | 0 oder -1 als <end> ist bis zum Ende. Wenn <start> oder <end> negativ ist, |
| - | # 0 als <end> ist bis zum Ende. | + | wird von hinten gezählt. Ist <start> 0, dann wird der führende '/' mit ausgegeben. |
| - | # -1 als <end> ist bis zum vorletzten | + | Kann bei consolidate nicht genutzt weden |
| - | # 0 als <start> auch am Anfang des Pfades '/' bzw. <str> ausgeben | + | %O => kompletter Pfad der Ausgabedatei, wenn gesetzt |
| - | # ist <lstr> angegeben, wird der letzte '/' durch <lstr> ersetzt. | + | %0 … %9 => Variablen 0-9 |
| - | # (keine Funktion bei -1 als <end>) | + | %{<n>,HASH[,<len>]} => gehaschte Variable 0-9 mit Länge <len> bzw. 8 wenn <len> nicht angegeben |
| - | # Kann bei consolidate nicht genutzt weden | + | %{<n>,LOW[ER]} => Variable 0-9 nach lowercase wandeln |
| - | # %O => kompletter Pfad der Ausgabedatei, wenn gesetzt | + | %{<n>,UPP[ER]} => Variable 0-9 nach uppercase wandeln |
| - | # %0 … %9 => Variablen 0-9 | + | |
| - | # %{<n>,HASH[,<len>]} => gehaschte Variable 0-9 mit Länge <len> bzw. 8 wenn <len> nicht angegeben | + | |
| - | # | + | |
| # ----- Wenn „consolidate“ gesetzt, dann ist ----- | # ----- Wenn „consolidate“ gesetzt, dann ist ----- | ||
| - | # | + | |
| - | # %N => Anzahl der Zeilen | + | %N => Anzahl der Zeilen |
| - | # %{<n>,SUM[,<fmt>]} => Summe über Variable <n> | + | %{<n>,SUM[,<fmt>]} => Summe über Variable <n> |
| - | # %{<n>,AVG[,<fmt>]} => Mittelwert der Variable <n> | + | %{<n>,AVG[,<fmt>]} => Mittelwert der Variable <n> |
| - | # %{<n>,MIN[,<fmt>]} => Minimum der Variable <n> | + | %{<n>,MIN[,<fmt>]} => Minimum der Variable <n> |
| - | # %{<n>,MAX[,<fmt>]} => Maximum der Variable <n> | + | %{<n>,MAX[,<fmt>]} => Maximum der Variable <n> |
| - | # %{<n>,FIR[ST][,<fmt>]} => erster Wert der Variablen <n> | + | %{<n>,FIR[ST][,<fmt>]} => erster Wert der Variablen <n> |
| - | # %{<n>,LAS[T][,<fmt>]} => letzter Wert der Variablen <n> | + | %{<n>,LAS[T][,<fmt>]} => letzter Wert der Variablen <n> |
| - | # %{FIRSTDATE,<datfmt>} => Datum der zuerst gelesenen Zeile | + | %{<n>,DIST} => Anzahl verschiedener gelesener Werte der Variablen <n> |
| - | # %{LASTDATE,<datfmt>} => Datum der zuletzt gelesenen Zeile | + | %{FIRSTDATE,<datfmt>} => Datum der zuerst gelesenen Zeile |
| - | # %{TIMERANGE} => Sekunden von erster bis letzter Zeile | + | %{LASTDATE,<datfmt>} => Datum der zuletzt gelesenen Zeile |
| - | # %{TIMEDIFF} => Zeitdifferenz zur letzten Meldung in Sekunden | + | %{TIMERANGE} => Sekunden von erster bis letzter Zeile |
| - | # <fmt> ist optionales Ausgabeformat im Format [<a>][.<b>]: Mindestbreite <a> und <b> Nachkommastellen | + | %{TIMEDIFF} => Zeitdifferenz zur letzten Meldung in Sekunden |
| - | # <datfmt> Datumsformat wie bei Ausgabe mit %[abdDFHmMsSTwyY] z. B.: "%Y-%m-%d %H:%M:%S" | + | <fmt> ist optionales Ausgabeformat im Format [<a>][.<b>]: Mindestbreite <a> und <b> Nachkommastellen |
| + | <datfmt> Datumsformat wie bei Ausgabe mit %[abdDFHmMsSTwyY] z. B.: "%Y-%m-%d %H:%M:%S" | ||
| # ----- IGNORE ----- | # ----- IGNORE ----- | ||
| Line 538: | Line 507: | ||
| # Jeder Block muss mit einem der folgenden Schlüsselwörter beginnen | # Jeder Block muss mit einem der folgenden Schlüsselwörter beginnen | ||
| - | # reg = zu suchende Reg-EXP | + | |
| - | # reg+ = zu suchende Reg-EXP und weiter mit nächstem Block | + | reg = zu suchende Reg-EXP |
| - | # !reg = nicht zu suchende Reg-EXP | + | reg+ = zu suchende Reg-EXP und weiter mit nächstem Block |
| - | # !reg+ = nicht zu suchende Reg-EXP und weiter mit nächstem Block | + | !reg = nicht zu suchende Reg-EXP |
| - | # regsplit = zu suchende Reg-EXP, mit Blöcken, nach denen getrennt wird | + | !reg+ = nicht zu suchende Reg-EXP und weiter mit nächstem Block |
| - | # regsplit+ = wie regsplit und weiter mit nächsten Block | + | regsplit = zu suchende Reg-EXP, mit Blöcken, nach denen getrennt wird |
| - | # reg_file = zu suchende Reg-EXPs werden aus Datei gelesen | + | regsplit+ = wie regsplit und weiter mit nächsten Block |
| - | # reg_file+ = ... und weiter mit nächstem Block | + | reg_file = zu suchende Reg-EXPs werden aus Datei gelesen |
| - | # !reg_file = nicht zu suchende Reg-EXPs werden aus Datei gelesen | + | reg_file+ = ... und weiter mit nächstem Block |
| - | # !reg_file+ = ... und weiter mit nächstem Block | + | !reg_file = nicht zu suchende Reg-EXPs werden aus Datei gelesen |
| - | # regall es passt alles - folgende Inputformate oder Aktionen werden ignoriert. | + | !reg_file+ = ... und weiter mit nächstem Block |
| - | # regignore = zu suchende Reg-EXP, die ab hier ignoriert werden. Bei vreg wird die Zeile komplett ignoriert. | + | regall es passt alles - folgende Inputformate oder Aktionen werden ignoriert. |
| - | # !regignore = Reg-EXP, die nicht passen werden ab hier ignoriert. | + | regignore = zu suchende Reg-EXP, die ab hier ignoriert werden. Bei vreg wird die Zeile komplett ignoriert. |
| - | # regignore_file = wie regignore, nur die Reg-EXP werde aus Datei gelesen | + | !regignore = Reg-EXP, die nicht passen werden ab hier ignoriert. |
| - | # !regignore_file = wie !regignore, nur die Reg-EXP werden aus Datei gelesen | + | regignore_file = wie regignore, nur die Reg-EXP werde aus Datei gelesen |
| + | !regignore_file = wie !regignore, nur die Reg-EXP werden aus Datei gelesen | ||
| # die folgenden Definitionen beziehen sich auf das Schlüsselwort am Beginn des Blockes | # die folgenden Definitionen beziehen sich auf das Schlüsselwort am Beginn des Blockes | ||
| - | # iformat = Inputformat wenn angegeben, sonst gilt globales inputformat (nicht bei regsplit) | + | iformat = Inputformat wenn angegeben, sonst gilt globales inputformat (nicht bei regsplit) |
| - | # splitvars = Zuordnung der Variablen zum regsplit | + | splitvars = Zuordnung der Variablen zum regsplit |
| # hist_secs = <s> individuelle Einstellung für diesen Block | # hist_secs = <s> individuelle Einstellung für diesen Block | ||
| # gleiche Zeilen werden für <s> Sekunden unterdrückt. Die erste passende Zeile wird ausgegeben. | # gleiche Zeilen werden für <s> Sekunden unterdrückt. Die erste passende Zeile wird ausgegeben. | ||
| # Bei der Prüfung auf gleiche Zeilen werden alle Felder mit Ausnahme der Zeitstempelfelder herangezogen, | # Bei der Prüfung auf gleiche Zeilen werden alle Felder mit Ausnahme der Zeitstempelfelder herangezogen, | ||
| - | # die als Ausgabe genutzt werden können. Also nicht %s (ab Version 5.5). | + | # die als Ausgabe genutzt werden können. Also nicht %s, %c (ab Version 5.5). |
| # Wenn ein Feld nicht beachtet werden soll, dann muss das Feld um ein 'i' erweitert werden: %q -> %iq, %1 -> %i1, ... | # Wenn ein Feld nicht beachtet werden soll, dann muss das Feld um ein 'i' erweitert werden: %q -> %iq, %1 -> %i1, ... | ||
| # Beispiel: | # Beispiel: | ||
| + | |||
| reg = \[ERROR\] | reg = \[ERROR\] | ||
| hist_secs = 300 | hist_secs = 300 | ||
| Line 579: | Line 550: | ||
| # Average über die Variablen ausgegeben werden kann. | # Average über die Variablen ausgegeben werden kann. | ||
| # <CONSFMT>: | # <CONSFMT>: | ||
| - | # <n>/<m>[s|m|h]<SFLE>: <n> 0-59 | + | # <n>/<m>[s|m|h]<SFLEN>: <n> 0-59 |
| # <m> Anzahl s|m|h | # <m> Anzahl s|m|h | ||
| # s|m|h Sekunden, Minuten, Stunden, def. ist m | # s|m|h Sekunden, Minuten, Stunden, def. ist m | ||
| - | # <SFLE> Zeitstempelflag: S: Start, F: First, L: Last, E: End, def. ist E | + | # <SFLEN> Zeitstempelflag: S: Start, F: First, L: Last, E: End, N: Now, def. ist E |
| # Bedeutung: Beginnend mit <n> wird alle <m> s|m|h eine Zeile ausgegeben. | # Bedeutung: Beginnend mit <n> wird alle <m> s|m|h eine Zeile ausgegeben. | ||
| # Beispiele: | # Beispiele: | ||
| - | # 0/5m -> alle 5 Minuten eine Zeile | + | |
| - | # 3/10s -> alle 10 Sekunden (3, 13, 23, 33, 43, 53) eine Zeile | + | consoliate = 0/5m -> alle 5 Minuten eine Zeile |
| + | consolidate = 3/10s -> alle 10 Sekunden (3, 13, 23, 33, 43, 53) eine Zeile | ||
| # | # | ||
| # <CONSFMT2>: | # <CONSFMT2>: | ||
| - | # <m><smh><FL>: <smh> für Sekunden, Minute, Stunden, <m> Anzahl | + | # <m><smh><FLN>: <smh> für Sekunden, Minute, Stunden, <m> Anzahl |
| - | # F|L first/last | + | # F|L|N first/last/now |
| # Bedeutung: Es wird auf pasende Zeilen gewartet, dann wird alle | # Bedeutung: Es wird auf pasende Zeilen gewartet, dann wird alle | ||
| # <m> Sekunden/Minuten/Stunden ein konsolidierter Wert | # <m> Sekunden/Minuten/Stunden ein konsolidierter Wert | ||
| Line 598: | Line 570: | ||
| # ausgegeben oder bei SIGHUP|SIGUSR1 | # ausgegeben oder bei SIGHUP|SIGUSR1 | ||
| # | # | ||
| - | # consolidatenull = 1 # Zeile auch ausgeben, wenn keine Zeilen konsolidiert wurden. | + | consolidatenull = 1 # Zeile auch ausgeben, wenn keine Zeilen konsolidiert wurden. |
| - | # consolidatedistinct = 1 # Es werden nur unterschiedliche Zeilen betrachtet. Z. B. unterschiedliche User zählen. | + | consolidatedistinct = 1 # Es werden nur unterschiedliche Zeilen betrachtet. Z. B. unterschiedliche User zählen. |
| + | consolidatedistinctinit = 100000 # distinct lines Vorbelegung, wenn größer als 10000. | ||
| - | # nread = n Folgezeilen zusätzlich lesen | + | nread = n Folgezeilen zusätzlich lesen |
| - | # nreadreg = Folgezeilen, die Reg-EXP entsprechen lesen | + | nreadreg = Folgezeilen, die Reg-EXP entsprechen lesen |
| - | # nread!reg = Folgezeilen, die Reg-EXP nicht entsprechen lesen | + | nread!reg = Folgezeilen, die Reg-EXP nicht entsprechen lesen |
| - | # nreadtoreg = Folgezeilen lesen, bis Reg-EXP gefunden | + | nreadtoreg = Folgezeilen lesen, bis Reg-EXP gefunden |
| - | # nreadtoreg liest die gefundene Zeile ein, nread!reg nicht | + | nreadtoreg liest die gefundene Zeile ein, nread!reg nicht |
| - | # nreadformat = Inputformat der Folgezeilen | + | nreadformat = Inputformat der Folgezeilen |
| - | # nreadaction = Auszuführende Aktion der Folgenzeilen | + | nreadaction = Auszuführende Aktion der Folgenzeilen |
| - | # nreadwrite = Ausgabemuster der Folgezeilen für Ausgabedatei | + | nreadwrite = Ausgabemuster der Folgezeilen für Ausgabedatei |
| - | # test = <Bedingung> # Die Ausgabeaktion wird nur ausgeführt, wenn die <Bedingung> wahr ist (!= 0) | + | test = <Bedingung> # Die Ausgabeaktion wird nur ausgeführt, wenn die <Bedingung> wahr ist (!= 0) |
| - | # Die Bedingung kann sich auch auf konsolidierte Variablen beziehen. | + | # Die Bedingung kann sich auch auf konsolidierte Variablen beziehen. |
| - | # Ops: + - * / ~ % < > <= >= = != | + | # Ops: + - * / ~ % < > <= >= = != |
| - | # genutzt werden kann %0-%9, %N, | + | # genutzt werden kann %0-%9, %N, |
| - | # %{<n>,SUM}, %{<n>,AVG}, %{<n>,MIN}, %{<n>,MAX}, %{<n>,FIRST}, %{<n>,LAST}, %{<n>,DIST} | + | # %{<n>,SUM}, %{<n>,AVG}, %{<n>,MIN}, %{<n>,MAX}, %{<n>,FIRST}, %{<n>,LAST}, %{<n>,DIST} |
| - | # %{TIMERANGE}, %{TIMEDIFF} | + | # %{TIMERANGE}, %{TIMEDIFF} |
| - | # action = auszuführende Aktion | + | action = auszuführende Aktion |
| - | # write = Ausgabemuster für Ausgabedatei. Wenn mehrere Zeilen geschrieben werden sollen, ist '\n' der Zeilentrenner. | + | write = Ausgabemuster für Ausgabedatei. Wenn mehrere Zeilen geschrieben werden sollen, ist '\n' der Zeilentrenner. |
| - | # Oder durch einschließen der write Zeile in '...' können auch mehrere Zeilen ausgegeben werden: | + | Oder durch einschließen der write Zeile in '...' können auch mehrere Zeilen ausgegeben werden: |
| write = 'V;%F %T;%h;Section;Teststep;%p;%q - %1;_ | write = 'V;%F %T;%h;Section;Teststep;%p;%q - %1;_ | ||
| V;%F %T;%h;Section;Teststep;%p-Anzahl;%N;# | V;%F %T;%h;Section;Teststep;%p-Anzahl;%N;# | ||
| V;%F %T;%h;Section;Teststep;%p-Kennung;"%1";_' | V;%F %T;%h;Section;Teststep;%p-Kennung;"%1";_' | ||
| - | # syslog = an Syslog senden, Format: <priority>, <Ausgabe> | + | syslog = an Syslog senden, Format: <priority>, <Ausgabe> |
| - | # <priority>: LOG_DEBUG|LOG_INFO|LOG_NOTICE|LOG_WARNING|LOG_ERR|LOG_CRIT|LOG_ALERT|LOG_EMERG | + | <priority>: LOG_DEBUG|LOG_INFO|LOG_NOTICE|LOG_WARNING|LOG_ERR|LOG_CRIT|LOG_ALERT|LOG_EMERG |
| - | # store = Ausgabeformat beim Schreiben in Temp-Datei (unter storepath) | + | store = Ausgabeformat beim Schreiben in Temp-Datei (unter storepath) |
| - | # writetopath = Pfad festlegen für "write" | + | writetopath = Pfad festlegen für "writeto" |
| - | # writeto = Ausgabemuster für Datei, die mit writetopath festgelegt wird. | + | writeto = Ausgabemuster für Datei, die mit writetopath festgelegt wird. |
| - | # exit = <exitcode> # lfa4uls beenden mit Exitcode <exitcode> (Der <exitcode> kann auch eine Variable z. B. %3 sein) | + | exit = <exitcode> # lfa4uls beenden mit Exitcode <exitcode> (Der <exitcode> kann auch eine Variable z. B. %3 sein) |
| - | # storesecs = <seconds> - Sekunden, nach denen zwischengespeicherte Zeilen (store) gesendet werden | + | storesecs = <seconds> - Sekunden, nach denen zwischengespeicherte Zeilen (store) gesendet werden |
| - | # storesendreg = <regexp> - oder Regular-Expression, bei der die zwischengespeicherten Zeilen gesendet werden | + | storesendreg = <regexp> - oder Regular-Expression, bei der die zwischengespeicherten Zeilen gesendet werden |
| - | # storesendaction = <cmd> - Befehl zum Senden der gespeicherten Daten | + | storesendaction = <cmd> - Befehl zum Senden der gespeicherten Daten |
| - | # cancelreg = <regexp> - Regular-Expression, bei der zwischengespeicherte Zeilen gelöscht werden und | + | cancelreg = <regexp> - Regular-Expression, bei der zwischengespeicherte Zeilen gelöscht werden und |
| - | # konsolidierte Zeilen zurückgesetzt werden | + | konsolidierte Zeilen zurückgesetzt werden |
| - | # ----- Einschränkung der reg<n> für verschiedene Logdateien ----- | + | # ----- Einschränkung der reg für verschiedene Logdateien ----- |
| # | # | ||
| - | # Die anzuwendenden reg<n> können pro "inputfile" bzw. "inputfilepattern" eingeschränkt werden. | + | # Die anzuwendenden reg können pro "inputfile" bzw. "inputfilepattern" eingeschränkt werden. |
| # Dazu wird vor den entsprechenden "inputfile" und "inputfilepattern" Zeilen der Gültigkeitsbereich definiert: | # Dazu wird vor den entsprechenden "inputfile" und "inputfilepattern" Zeilen der Gültigkeitsbereich definiert: | ||
| # | # | ||
| - | # setregrange = <start> - <end> | + | # setregrange = <start> - <end> # Geht übersichtlicher durch die Bildung von Blöcken. |
| # | # | ||
| # für die nun folgenden "input*" Zeilen gelten nur die reg<start> - reg<end> | # für die nun folgenden "input*" Zeilen gelten nur die reg<start> - reg<end> | ||
| + | # | ||
| + | # Sollte nicht mehr verwendet werden, denn das kann durch entsprechende Blöcke übersichtlicher abgebildet werden: | ||
| + | |||
| + | inputfile = file1 | ||
| + | reg = | ||
| + | write = | ||
| + | |||
| + | reg = | ||
| + | write = | ||
| + | |||
| + | # durch Angabe eines neuen "inputfile*" wird ein neuer Block begonnen. Die vorherigen reg gelten nur für file1 und die folgenden nur für file2. | ||
| + | inputfile = file2 | ||
| + | reg = | ||
| + | write = | ||
| + | |||
| + | reg = | ||
| + | write = | ||
| # ----- SYSLOG ----- | # ----- SYSLOG ----- | ||
| # festlegen der Syslog Parameter | # festlegen der Syslog Parameter | ||
| - | syslogpars = <syslog-ident>, <syslog-facility> # Siehe openlog | + | syslogpars = <syslog-ident>, <syslog-facility> # Siehe "man openlog" |
| # ----- LOG ----- | # ----- LOG ----- | ||
| # | # | ||
| - | # Regulaeren Ausdruck und Aktion fuer "Logging" (Info) | + | # Regulären Ausdruck und Aktion für "Logging" |
| + | # ACHTUNG: lreg_all, lreg, laction und lwrite werden in einer der nächsten Versionen nicht mehr zur Verfügung stehen. | ||
| + | # Die Kombination aus lreg_all = 1 und lwrite kann durch regall und write abgelöst werden. | ||
| lreg_all = 1 | lreg_all = 1 | ||
| Line 671: | Line 663: | ||
| # ----- STAT ----- | # ----- STAT ----- | ||
| # | # | ||
| - | # Ausgabe statistischer Daten nach Zeit | + | # Ausgabe statistischer Daten nach Zeit für alle Dateien |
| ssched = <SCHEDFORMAT> | ssched = <SCHEDFORMAT> | ||
| swrite = | swrite = | ||
| Line 682: | Line 674: | ||
| # Bei mehreren überwachten Dateien wird swrite und saction pro Datei ausgeführt, | # Bei mehreren überwachten Dateien wird swrite und saction pro Datei ausgeführt, | ||
| # so dass zur Unterscheidung %p oder %P im Text enthalten sein sollte. | # so dass zur Unterscheidung %p oder %P im Text enthalten sein sollte. | ||
| + | # | ||
| + | # Ausgabe statistischer Daten für ausgewählte Dateien | ||
| + | isched = <SCHEDFORMAT> | ||
| + | iswrite = | ||
| + | isaction = | ||
| + | # isched bezieht sich nicht auf alle Dateien, sondern nur auf die Dateien über dem isched und nach dem vorherigen isched bzw. dem Anfang. | ||
| # ----- SET ----- | # ----- SET ----- | ||
| set <var> = <value> # Die Variablen %0-%9, %h, %q mit Defaultwert vorbelegen | set <var> = <value> # Die Variablen %0-%9, %h, %q mit Defaultwert vorbelegen | ||
| + | |||
| + | |||
| + | # ----- DIRECTORY ----- | ||
| + | # Für die Directory-Funktionen wird I-Notify verwendet, das unter Windows nicht zur Verfügung steht. | ||
| + | # Da der Nutzen der Directory-Funktionen sehr beschränkt ist, kann es sein, dass die Funktionen in Zukunft entfallen. | ||
| + | # | ||
| + | # Zu überwachendes Verzeichnis (nicht zusammen mit inputfile oder inputfilepattern) | ||
| + | inputdir = /var/log | ||
| + | |||
| + | # inputdir_num_subdirs wenn auf größer 1 gesetzt, dann werden bis zu inputdir_num_subdirs Unterverzeichniss mit überwacht | ||
| + | inputdir_num_subdirs = 50 | ||
| + | |||
| + | # inputdir_num_files: Anzahl gleichzeitig offener Dateien, die überwacht werden. | ||
| + | # std ist 300 | ||
| + | inputdir_num_files = 100 | ||
| + | |||
| + | # dirfilepattern legt die Dateien fest, die Zeilenweise ausgewertet werden. Hist und consolidate ist noch nicht möglich. | ||
| + | dirfilepattern = *.log | ||
| + | |||
| + | # dirfilepipepattern: Dateien, die nach dem schließen an Kommando gesendet werden | ||
| + | # dirfilepipecmd: Dateien werden an STDIN des CMDs gesendet. | ||
| + | # Es können Parameter mit Codes verwendet werden. Die Codes %p, %P und Datumswerte sind gesezt, | ||
| + | # die anderen Codes sind nur gesetzt, wenn die Datei auch bei dirfilepattern ausgewählt ist. | ||
| + | dirfilepipepattern = *.dat | ||
| + | dirfilepipecmd = send_compressed_file %p %P | ||
| + | |||
| + | # dirfileclosepattern Das Schließen von Dateien überwachen | ||
| + | # dirfileclosecmd CMD ausführen, Parameter siehe dirfilepipecmd | ||
| + | # dirfileclosewrite angegebenen Text in Ausgabedatei schreiben, Codes wie bei dirfilepipecmd | ||
| + | dirfileclosepattern = *.info | ||
| + | dirfileclosecmd = echo "Datei %P wurde geschlossen" | ||
| + | dirfileclosewrite = V;%F %T;%h;LFA;Dirmon;Close;%P;_ | ||
| + | |||
| + | # dirfilecreatepattern Anlegen von Dateien monitoren | ||
| + | # dirfilecreatecmd | ||
| + | # dirfilecreatewrite | ||
| + | |||
| + | # dirfiledeletepattern Löschen von Dateien monitoren | ||
| + | # dirfiledeletecmd | ||
| + | # dirfiledeletewrite | ||
| + | |||
| + | # dirfilemodifypattern Ändern von Dateien monitoren | ||
| + | # dirfilemodifycmd | ||
| + | # dirfilemodifywrite | ||
| + | |||
| + | # dirfilemovedfrompattern Wegmoven von Dateien monitoren | ||
| + | # dirfilemovedfromcmd | ||
| + | # dirfilemovedfromwrite | ||
| + | |||
| + | # dirfilemovedtopattern Hinmoven von Dateien monitoren | ||
| + | # (Wird eine Datei umbenannt, gibt es ein movedfrom und ein movedto) | ||
| + | # (Wird eine Datei von einem Verzeichnis in ein anderes gemoved, dann | ||
| + | # werden movedfrom und movedto nur für überwachte Verzeichnisse generiert) | ||
| + | # dirfilemovedtocmd | ||
| + | # dirfilemovedtowrite | ||
| + | |||
| + | # dirfileopenpattern Öffnen von Dateien monitoren | ||
| + | # dirfileopencmd | ||
| + | # dirfileopenwrite | ||
| </file> | </file> | ||
| Line 699: | Line 756: | ||
| <file> | <file> | ||
| - | # ----- FILE ----- | + | # ----- logfile ----- |
| # | # | ||
| # file to search | # file to search | ||
| - | inputfile = /var/log/messages | + | inputfile = /var/log/sample.log |
| - | # ----- LINE FORMAT ----- | + | # ----- write quoting ----- |
| # | # | ||
| - | inputformat = %t %h %q: %W | + | writequoting = \" |
| - | # <inputformat> defines the parsing rule for each line of the <inputfile>. | + | # ----- line format ----- |
| - | # Each line is eaten character by character and you cannot use regular | + | |
| - | # expressions, see 'reg' in the `Advanced Usage 1`_ below. | + | |
| - | + | ||
| - | # You may use the following special directives: | + | |
| - | # %% => % | + | |
| - | # %s => discard an expression up to the next white space | + | |
| - | # %.<n>s => discard <n> non white space characters | + | |
| - | # %t => Date in the format: MMM DD hh:mm:ss | + | |
| - | # or in the format: YYYY-MM-DD[T ]hh:mm:ss[.ssssss][+-hh:mm] | + | |
| - | # %c => discard one character | + | |
| - | # %.<n>c => discard <n> characters | + | |
| - | # %h => set %h to the expression from current position to last non white space character | + | |
| - | # %q => set %q to the expression from current position to last non white space character | + | |
| - | # %W => set %h to the expression from current position to end of line | + | |
| - | # %D => set %D to the date in the format: DD.MM.YY or DD.MM.YYYY | + | |
| - | # %F => set %F to the date in the format: YYYY-MM-DD | + | |
| - | # %T => set %T to the time in the format: hh:mm:ss | + | |
| - | # %d => set %d to the day | + | |
| - | # %m => set %m to the month | + | |
| - | # %b => set %b to the three character month name | + | |
| - | # %y => set %y to the year, two digits | + | |
| - | # %Y => set %Y to the year, four digits | + | |
| - | # %H => set %H to the hour | + | |
| - | # %M => set %M to the minute | + | |
| - | # %S => set %S to the seconds | + | |
| - | # %0 => set %0 to the expression up to last non white space character | + | |
| - | # %.<n>:0 => set %0 to the next <n> characters | + | |
| - | # %1 => set %1 to the expression up to last non white space character | + | |
| - | # %.<n>:1 => set %1 to the next <n> characters | + | |
| - | # ... | + | |
| - | # %9 => set %9 to the expression up to last non white space character | + | |
| - | # %.<n>:9 => set %9 to the next <n> characters | + | |
| # | # | ||
| - | # One white space in the <inputformat> will eat as many white spaces as possible. | + | inputformat = %F %T.%s %V |
| - | FIXME | + | # ----- filter ----- |
| - | + | ||
| - | # Die meisten Codes stehen in den ?action und ?write fuer eine Ausgabe zur Verfuegung, | + | |
| - | # siehe ACTION FORMAT. | + | |
| - | + | ||
| - | # ----- ACTION und WRITE FORMAT ----- | + | |
| - | # In <?action>, <action?>, <?write> und <write?> koennen Ergebnisse des Parsens der | + | |
| - | # Zeilen verwendet werden. Folgende Codes können dafuer verwendet werden: | + | |
| - | # alle Codes des Inputfomates ohne %t, %s, %s* und %c | + | |
| # | # | ||
| - | # %y => Jahr im Format JJ | + | reg =| error|warning |
| - | # %Y => Jahr im Format JJJJ | + | |
| - | # %b => Monatsname (erste drei Zeichen) | + | |
| - | # %d => Tag (01..31) | + | |
| - | # %m => Monat (01..12) | + | |
| - | # %N => Anzahl gleicher Zeilen bei hist_secs > 0 oder Anzahl bei sum_hist | + | |
| - | # %F => Datum im Format: YYYY-MM-DD | + | |
| - | # %z => die ganze Zeile | + | |
| - | # %p => Dateiname der überwachten Datei | + | |
| - | # %P => kompletter Pfad der überwachten Datei | + | |
| - | # %0 … %9 => Variablen 0-9 | + | |
| - | # ----- IGNORE ----- | + | # ----- output ----- |
| - | # | + | # write ULS file-format |
| - | # Regulaeren Ausdruck fuer Zeilen definieren, die verworfen werden. | + | write = V;%F %T;%h;Sample;Logfileadapter;Log;"%V";_ |
| - | # | + | |
| - | # vreg = INFO|MARK | + | |
| - | # | + | |
| - | # Oder Datei mit regulaeren Ausdruecken angeben | + | |
| - | # | + | |
| - | # vreg_file = ignore_regexps_list.txt | + | |
| - | + | ||
| - | # ----- ERROR ----- | + | |
| - | # | + | |
| - | # Regulaeren Ausdruck und Aktion fuer "Fehler" | + | |
| - | + | ||
| - | # ereg_all = 1 | + | |
| - | # ereg = error | + | |
| - | # ereg_file = | + | |
| - | # eaction = echo 'Error: %z' | + | |
| - | # ewrite = | + | |
| - | + | ||
| - | # ----- WARN ----- | + | |
| - | # | + | |
| - | # Regulaeren Ausdruck und Aktion fuer "Warnung" | + | |
| - | + | ||
| - | # wreg_all = 1 | + | |
| - | # wreg = warn | + | |
| - | # wreg_file = | + | |
| - | # waction = echo 'Warnung: %z' | + | |
| - | # wwrite = | + | |
| - | + | ||
| - | # ----- LOG ----- | + | |
| - | # | + | |
| - | # Regulaeren Ausdruck und Aktion fuer "Logging" (Info) | + | |
| - | + | ||
| - | lreg_all = 1 | + | |
| - | # lreg = log | + | |
| - | # lreg_file = | + | |
| - | laction = echo 'Info: %z' | + | |
| - | # lwrite = | + | |
| </file> | </file> | ||
| Line 812: | Line 783: | ||
| - passt die Zeile zum regulären Ausdruck von vreg, dann diese Zeile ignorieren => auf nächste Zeile warten | - passt die Zeile zum regulären Ausdruck von vreg, dann diese Zeile ignorieren => auf nächste Zeile warten | ||
| - | - passt die Zeile zu einem regulären Ausdruck von reg0..reg99 oder reg0+..reg99+, dann die Zeile parsen mit iformat0..99 und entsprechende action0..action99 ausführen => wenn reg0+..reg99+, dann weiter vergleichen, sonst auf nächste Zeile warten | + | - passt die Zeile zu einem regulären Ausdruck von reg[0]..reg[99] oder reg[0]+..reg[99]+, dann die Zeile parsen mit iformat[0..99] und entsprechende action, write oder sylog ausführen => wenn reg+, dann weiter vergleichen, sonst auf nächste Zeile warten |
| - | - ist ereg_all = 1, dann eaction ausführen => auf nächste Zeile warten | + | |
| - | - passt die Zeile zum regulären Ausdruck von ereg, dann die Zeile parsen mit inputformat und eaction ausführen => auf nächste Zeile warten | + | |
| - | - ist wreg_all = 1, dann waction ausführen => auf nächste Zeile warten | + | |
| - | - passt die Zeile zum regulären Ausdruck von wreg, dann die Zeile parsen mit inputformat und waction ausführen => auf nächste Zeile warten | + | |
| - ist lreg_all = 1, dann laction ausführen => auf nächste Zeile warten | - ist lreg_all = 1, dann laction ausführen => auf nächste Zeile warten | ||
| - passt die Zeile zum regulären Ausdruck von lreg, dann die Zeile parsen mit inputformat und laction ausführen => auf nächste Zeile warten | - passt die Zeile zum regulären Ausdruck von lreg, dann die Zeile parsen mit inputformat und laction ausführen => auf nächste Zeile warten | ||
| - wenn keine der obigen Bedingungen erfüllt sind, dann wird die Zeile ignoriert => auf nächste Zeile warten | - wenn keine der obigen Bedingungen erfüllt sind, dann wird die Zeile ignoriert => auf nächste Zeile warten | ||
| - | Zu allen direkt eingetragenen regulären Ausdrücken reg?[+] kann auch eine Datei reg_file?[+] angegeben werden, | + | Zu allen direkt eingetragenen regulären Ausdrücken reg[+] kann auch eine Datei reg_file[+] angegeben werden, |
| die mehrere Zeilen mit jeweils einem regulären Ausdruck enthalten können. | die mehrere Zeilen mit jeweils einem regulären Ausdruck enthalten können. | ||
| - | Die regulären Ausdrücke werden bei der Anwendung von reg_file? logisch ODER verknüpft. | + | Die regulären Ausdrücke werden bei der Anwendung von reg_file logisch ODER verknüpft. |
| - | Es wird entweder reg? oder reg_file? verwendet, der letzte Eintrag in der Konfigurationsdatei entscheidet. | + | Es wird entweder reg oder reg_file verwendet, der letzte Eintrag in der Konfigurationsdatei entscheidet. |
| - | Erklärung für Buchstaben, die verschiedenen Parametern voranstehen: | + | Mit dieser (logischen) Unterscheidung können verschiedene Aktionen für verschiedene reguläre Ausdrücke ausgeführt werden. |
| - | * v = herausfiltern (wie egrep -v) und verwerfen | ||
| - | * e = error | ||
| - | * w = warning | ||
| - | * l = logging | ||
| - | Mit dieser (logischen) Unterscheidung können verschiedene Aktionen für verschiedene reguläre Ausdrücke ausgeführt werden. | + | Über Signale kann das Verhalten eines laufenden lfa4uls beeinflusst werden: |
| + | - SIGTERM - Alle bis jetzt consolidierten oder historifizierten Zeilen ausgeben und lfa4uls beenden. | ||
| + | - SIGUSR1 - Alle bis jetzt consolidierten oder historifizierten Zeilen ausgeben. | ||
| + | - SIGHUP - Alle bis jetzt consolidierten oder historifizierten Zeilen ausgeben und Konfiguration neu einlesen. | ||
| + | - SIGUSR2 - Alle offenen Dateien für 60 Sekunden schließen, damit z. B. das Dateisystem dismounted werden kann. | ||
| Line 874: | Line 841: | ||
| # Alle Zeilen, die ERR enthalten | # Alle Zeilen, die ERR enthalten | ||
| - | ereg = ERR | + | reg = ERR |
| # Gebe die ganze Zeile auf stdout aus | # Gebe die ganze Zeile auf stdout aus | ||
| - | eaction = echo %z | + | action = echo %z |
| </file> | </file> | ||
| - | Test: | + | == Example2: Usage %{<n>,DIST} == |
| + | <file - /etc/uls/lfa4uls_messages.conf> | ||
| + | ... | ||
| + | # multipathd: checker failed nur senden, wenn innerhalb von 30 Sekunden kein | ||
| + | # multipathd: reinstated kommt | ||
| + | reg+ = %t %h multipathd:|%t %h kernel: device-mapper: multipath: | ||
| + | iformat = %t %h | ||
| + | regsplit = multipathd: ((checker failed path ([0-9][^ ]*) in map .*)|(([0-9].*): reinstated)) | ||
| + | splitvars = %s %1 %2 %s %-2 | ||
| + | consolidate = 30sF | ||
| + | test = %{2,DIST} > 0 | ||
| + | write = V;%F %T;%h;System;Logfileadapter;Log;"multipathd: %{1,FIRST}";_;all | ||
| + | ... | ||
| + | </file> | ||
| + | |||
| + | == Test Konfiguration == | ||
| Starte den lfa4uls direkt in der Kommandozeile (nicht als Dämon), | Starte den lfa4uls direkt in der Kommandozeile (nicht als Dämon), | ||
| zeige die Aktionen nur an (-s), starte das Durchsuchen der Datei (<inputfile>) | zeige die Aktionen nur an (-s), starte das Durchsuchen der Datei (<inputfile>) | ||
| Line 888: | Line 871: | ||
| <code bash> | <code bash> | ||
| - | lfa4uls -s -a -c /tmp/lfa4uls_my.conf | + | lfa4uls -S -A -c /tmp/lfa4uls_my.conf |
| </code> | </code> | ||
| Line 919: | Line 902: | ||
| Es sind keine Leerzeichen in der Pfadangabe erlaubt! | Es sind keine Leerzeichen in der Pfadangabe erlaubt! | ||
| - | Und den lfa4uls neu starten:: | + | Und den lfa4uls starten (Systeme mit systemd):: |
| + | |||
| + | <code bash> | ||
| + | systemctl enable lfa4uls@[my] | ||
| + | systemctl start lfa4uls@[my] | ||
| + | </code> | ||
| + | |||
| + | Bei Systemen ohne systemd:: | ||
| <code bash> | <code bash> | ||