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 [2024-04-19 09:47] uls [Usage] |
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 282: | 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 357: | Line 363: | ||
| - | # ----- LINE FORMAT ----- | + | # ----- date time ----- |
| - | # | + | utcin = 1|0 # read timestamps in UTC or localtime |
| - | # ----- INPUT FORMAT ----- | + | utcout = 1|0 # write timestamps in UTC or localtime |
| + | |||
| + | |||
| + | # ----- INPUT LINE FORMAT ----- | ||
| inputformat = %t %h %q: %sValue1: %1, Value2: %2, %W | inputformat = %t %h %q: %sValue1: %1, Value2: %2, %W | ||
| Line 368: | Line 377: | ||
| 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: | # Folgende Codes koennen zum Parsen der Zeilen benutzt werden: | ||
| Line 401: | Line 409: | ||
| ... | ... | ||
| %9 => Variable 9 | %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 | %.<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. | %i<[hqVW0-9]> => dieses Feld wird geparst, aber bei der Deduplizierung ignoriert. %s und %c werden bei der Deduplizierung immer ignoriert. | ||
| Line 432: | Line 444: | ||
| von <start> bis <end> und ggf. <c> durch <str> ersetzen. | von <start> bis <end> und ggf. <c> durch <str> ersetzen. | ||
| Ist nur <start> angegeben, nur dieses Element des Dateinamens. | Ist nur <start> angegeben, nur dieses Element des Dateinamens. | ||
| - | 0 als <end> ist bis zum Ende. | + | 0 oder -1 als <end> ist bis zum Ende. Wenn <start> oder <end> negativ ist, |
| - | -1 als <end> ist bis zum vorletzten | + | wird von hinten gezählt. |
| 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>]]} => 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 als <end> ist bis zum Ende. | + | 0 oder -1 als <end> ist bis zum Ende. Wenn <start> oder <end> negativ ist, |
| - | -1 als <end> ist bis zum vorletzten | + | wird von hinten gezählt. Ist <start> 0, dann wird der führende '/' mit ausgegeben. |
| Kann bei consolidate nicht genutzt weden | Kann bei consolidate nicht genutzt weden | ||
| %O => kompletter Pfad der Ausgabedatei, wenn gesetzt | %O => kompletter Pfad der Ausgabedatei, wenn gesetzt | ||
| Line 457: | Line 469: | ||
| %{<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> | ||
| + | %{<n>,DIST} => Anzahl verschiedener gelesener Werte der Variablen <n> | ||
| %{FIRSTDATE,<datfmt>} => Datum der zuerst gelesenen Zeile | %{FIRSTDATE,<datfmt>} => Datum der zuerst gelesenen Zeile | ||
| %{LASTDATE,<datfmt>} => Datum der zuletzt gelesenen Zeile | %{LASTDATE,<datfmt>} => Datum der zuletzt gelesenen Zeile | ||
| Line 520: | Line 533: | ||
| # 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: | ||
| Line 537: | 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 556: | 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. | ||
| Line 586: | Line 601: | ||
| <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) | ||
| Line 598: | Line 613: | ||
| 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 629: | 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 640: | 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. | ||
| Line 808: | Line 848: | ||
| </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>) | ||