# # Konfigurationsdatei für lfa4uls # # Der Input kann aus mehreren Dateien gelesen werden # * "inputfile": Dateipfad # * "inputfilepattern": Suchmuster (Es sind nur * und ? als Wildcards erlaubt, aber auch für Directories) # # oder einem Programm # * "inputcommand" # # oder es koennen # * ganze Verzeichnisse "inputdir", optional mit allen Unterverzeichnissen überwacht werden # # Die Möglichkeiten können nicht kombiniert werden. # ----- FILE ----- # es können bis zu 100 Dateien überwacht werden, die als feste Dateinamen oder Suchmuster angeben werden # d. h. inputfile, inputfiles, inputfilepattern und inputfilepatterns dürfen mehrfach angegeben werden # feste Dateinamen # # Zu überwachende Dateien, jede Datei mit "inputfile = " inputfile = /var/log/messages # Dateinamen nach Muster (alle) # # Alle Dateien, die dem Muster entspreche werden gescannt inputfiles = /var/log/m* # Dateien nach Muster (nur eine) # # Wenn der Name der Logdatei nicht feststeht. # Es wird die erste Datei, die zum Muster passt überwacht. # Wenn die Datei gelöscht oder komprimiert wird, dann wird erneut gesucht. # 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: # inputfilepatternsort = U|FN|O|N # U : unsortier - Reihenfolge des Betriebssysstems # FN: bei Restart die neueste, dann chronologisch aufsteigend # O : Bei Restart die äteste, dann chronologisch aufsteigend # N : bei Restart die neueste, dann die neueste inputfilepatternsort = FN # zyklische Suche nach neuen Dateien: # inputfilepatternsearch = # es wird alle Sekunden nach neueren Dateien als die aktuelle gesucht. # unabhängig von inputfilepatternsort wird auf die neueste Datei gewechselt 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 # ----- Protokolldatei ---- # # logfile: Ausgabedatei # logfile = logfile = /tmp/lfa4uls_test.log # # loglevel: Aktionen, die geloggt werden sollen # loglevel = # mögliche Aktionen: # NONE Nichts # ERROR Errors # WARNING Warnings # FILE öffnen und schließen von Dateien # MATCH gefundene Zeilen # ACTION ausgelöste Aktionen # WRITE geschriebene Zeilen # SYSLOG Zeilen an Syslog # STORE gespeicherte Daten # STORESEND versenden der gespeicherten Daten # CANCEL ausgelöste "cancel" # SCHEDULEACTION ausgeführte Schedule Aktionen # SCHEDULEWRITE geschriebene Schedule Zeilen # ALL Alles loglevel = ERROR WARNING # ----- Ausgabedatei ----- # # Daten können direkt im ULS Format in eine Ausgabedatei geschrieben werden. outputfile = /tmp/lfaulsdata.uls # # outputfileheader: jede Ausgabedatei mit einem Header versehen. Z. B. um den Zeichensatz zu setzen outputfileheader = L;;;;;;latin1 # # writequoting: Sonderzeichen in Variablen quoten. Das erste Zeichen ist das Quotingzeichen, das allen # Zeichen aus writequoting bei Variablenersetzungen und "write" vorangestellt wird. writequoting = \" # ----- automatisches Versenden der Ausgabedatei ----- # # Es kann eine Aktion definiert werden, die zeitgesteuert ausgeführt wird, # nachdem Daten in die Ausgabedatei geschrieben wurden # # sendoutputfilesecs: Zeit in Sekunden, die nach dem ersten Schreiben gewartet wird, # bis die Datei versendet wird sendoutputfilesecs = 180 # # sendoutputfile: auszuführendes Programm, es können die gleichen Codes wie bei der Ausgabe verwendet werden sendoutputfile = send2uls "%O" # ----- zwischenspeichern von Zeilen ----- # storepath: Pfad, unter dem Zeilen mit "store" zwischengespeichert werden storepath = /tmp/lfa4uls_store # ----- PROGRAM ----- # # Es wird von stdout eines Programmes gelesen. inputcommand = netstat -nlt # ----- Variablen ----- # # Beim Parsen von Zeilen stehen folgende Variablen zur Verfügung: %h - Hostname %q - Quelle %W - String bis zum Zeilenende %V - String bis zum Zeilenende, bei der Erkennung von Dubletten werden Zahlen ignoriert %0 bis %9 - freie Variablen # die Variablen %h, %q und %0 - %9 können global vorbelegt werden: set = # ----- date time ----- utcin = 1|0 # read timestamps in UTC or localtime utcout = 1|0 # write timestamps in UTC or localtime # ----- INPUT LINE FORMAT ----- inputformat = %t %h %q: %sValue1: %1, Value2: %2, %W # beschreibt, wie die Zeilen des zu interpretieren sind. # Dabei sind KEINE regulaeren Asdruecke moeglich, nur feste Strings. # Die Groß-/Kleinschreibung kann durch das Anfügen des Zeichens '|' ans '=' ignoriert werden: inputformat =| %t %h %q: %svalue1: %1, value2: %2, %W # Folgende Codes koennen zum Parsen der Zeilen benutzt werden: %% => % %[] => ein beliebiges Zeichen aus %s => ein String (wird verworfen) %.s => 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) %.c => 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 %.:0 => Zeichen in Variable 0 %#0 => Nur Zahlen (Float) nach Variable 0 %1 => Variable 1 %.:1 => Zeichen in Variable 1 ... %9 => Variable 9 %.:9 => 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. # Die meisten Codes stehen in den ?action und ?write fuer eine Ausgabe zur Verfuegung, # siehe ACTION FORMAT. # ----- ACTION und WRITE FORMAT ----- # # In , , und 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 YY %Y => Jahr im Format YYYY %b => Monatsname (erste drei Zeichen) %d => Tag (01..31) %m => Monat (01..12) %N => Anzahl gleicher Zeilen bie (hist_secs > 0) oder Anzahl bei sum_hist %F => Datum im Format: YYYY-MM-DD %z => die ganze Zeile %l => Gesamtzahl bisher gelesener Zeilen %L => gelesene Zeilen seit letzter Ausgabe mit %L %C => Änderungsdatum der Datei im Format YYYY-MM-DD hh:mm:ss %B => Größe der Datei in Bytes (wenn von CMD oder Stdin gelesen wird, dann 0) %p => Dateiname der überwachten Datei - Kann bei consolidate nicht genutzt werden %{p,,[,[][,]]} => Dateiname nach Zeichen trennen und Teil des Dateinamens von bis und ggf. durch ersetzen. Ist nur angegeben, nur dieses Element des Dateinamens. 0 als ist bis zum Ende. -1 als ist bis zum vorletzten Kann bei consolidate nicht genutzt werden %P => kompletter Pfad der überwachten Datei - Kann bei consolidate nicht genutzt werden %{P,[,[][,]]} => Teil des Pfades von bis und ggf. '/' durch ersetzen. Ist nur angegeben, nur dieses Element des Pfades. 0 als ist bis zum Ende. -1 als ist bis zum vorletzten Kann bei consolidate nicht genutzt weden %O => kompletter Pfad der Ausgabedatei, wenn gesetzt %0 … %9 => Variablen 0-9 %{,HASH[,]} => gehaschte Variable 0-9 mit Länge bzw. 8 wenn nicht angegeben %{,LOW[ER]} => Variable 0-9 nach lowercase wandeln %{,UPP[ER]} => Variable 0-9 nach uppercase wandeln # ----- Wenn „consolidate“ gesetzt, dann ist ----- %N => Anzahl der Zeilen %{,SUM[,]} => Summe über Variable %{,AVG[,]} => Mittelwert der Variable %{,MIN[,]} => Minimum der Variable %{,MAX[,]} => Maximum der Variable %{,FIR[ST][,]} => erster Wert der Variablen %{,LAS[T][,]} => letzter Wert der Variablen %{FIRSTDATE,} => Datum der zuerst gelesenen Zeile %{LASTDATE,} => Datum der zuletzt gelesenen Zeile %{TIMERANGE} => Sekunden von erster bis letzter Zeile %{TIMEDIFF} => Zeitdifferenz zur letzten Meldung in Sekunden ist optionales Ausgabeformat im Format [][.]: Mindestbreite und Nachkommastellen Datumsformat wie bei Ausgabe mit %[abdDFHmMsSTwyY] z. B.: "%Y-%m-%d %H:%M:%S" # ----- IGNORE ----- # # Regulaeren Ausdruck fuer Zeilen definieren, die verworfen werden. # # vreg = INFO|MARK # # mit "ignore case" # # vreg =| info|warn # # Oder Datei mit regulaeren Ausdruecken angeben # # vreg_file = ignore_regexps_list.txt # vreg_file =| ignore_regexps_list_ignore_case.txt # ------ identische Zeilen ignorieren ----- # Sekunden, in denen gleiche Zeilen nicht noch einmal auslösen # # hist_secs = # # ----- REG[] ----- # # 100 Moeglichkeiten mit einem regulaeren Ausdruck bestimmte Zeilen # herauszusuchen, diese mit eigenem Format (Standard ist ) # zu Parsen und eine eigene Aktion auszuloesen. Wird eine Zeile # gefunden, wird abgebrochen, außer das Schlüsselwort endet mit einem '+' # 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 = nicht zu suchende Reg-EXP !reg+ = nicht zu suchende Reg-EXP und weiter mit nächstem Block regsplit = zu suchende Reg-EXP, mit Blöcken, nach denen getrennt wird regsplit+ = wie regsplit und weiter mit nächsten Block reg_file = zu suchende Reg-EXPs werden aus Datei gelesen reg_file+ = ... und weiter mit nächstem Block !reg_file = nicht zu suchende Reg-EXPs werden aus Datei gelesen !reg_file+ = ... und weiter mit nächstem Block regall es passt alles - folgende Inputformate oder Aktionen werden ignoriert. regignore = zu suchende Reg-EXP, die ab hier ignoriert werden. Bei vreg wird die Zeile komplett ignoriert. !regignore = Reg-EXP, die nicht passen werden ab hier ignoriert. 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 iformat = Inputformat wenn angegeben, sonst gilt globales inputformat (nicht bei regsplit) splitvars = Zuordnung der Variablen zum regsplit # hist_secs = individuelle Einstellung für diesen Block # gleiche Zeilen werden für Sekunden unterdrückt. Die erste passende Zeile wird ausgegeben. # 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, %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, ... # Beispiel: reg = \[ERROR\] hist_secs = 300 iformat = %F %T%s %iq: %V write = V;%F %T;%h;Section;Teststep;%p;%q - %V;_ # hinter der Uhrzeit stehen noch Millisekunden, die bei der Deduplizierung ignoriert werden sollen. # sum_hist = bestimmt Anzahl identischer Zeilen gruppiert nach den Variablen. (count distinct mit %N als Anzahl) # consolidate = fasst alle Zeilen des Musters zu einer Meldung zusammen. Es wird über alle Eingabedateien aufsummiert. # Zusätzlich werden dann die Variablen aufsummiert, so dass Min, Max, Count, Sum und # Average über die Variablen ausgegeben werden kann. # : # /[s|m|h]: 0-59 # Anzahl s|m|h # s|m|h Sekunden, Minuten, Stunden, def. ist m # Zeitstempelflag: S: Start, F: First, L: Last, E: End, def. ist E # Bedeutung: Beginnend mit wird alle s|m|h eine Zeile ausgegeben. # Beispiele: consoliate = 0/5m -> alle 5 Minuten eine Zeile consolidate = 3/10s -> alle 10 Sekunden (3, 13, 23, 33, 43, 53) eine Zeile # # : # : für Sekunden, Minute, Stunden, Anzahl # F|L first/last # Bedeutung: Es wird auf pasende Zeilen gewartet, dann wird alle # Sekunden/Minuten/Stunden ein konsolidierter Wert # ausgegeben. Der Zeitstempel des Wertes ist der der ersten # Zeile bei = F und der der letzten Zeile bei = L # wenn consolidate gesetzt, dann wird Zeile erst nach Ablauf der Sekunden # ausgegeben oder bei SIGHUP|SIGUSR1 # consolidatenull = 1 # Zeile auch ausgeben, wenn keine Zeilen konsolidiert wurden. 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 nreadreg = Folgezeilen, die Reg-EXP entsprechen lesen nread!reg = Folgezeilen, die Reg-EXP nicht entsprechen lesen nreadtoreg = Folgezeilen lesen, bis Reg-EXP gefunden nreadtoreg liest die gefundene Zeile ein, nread!reg nicht nreadformat = Inputformat der Folgezeilen nreadaction = Auszuführende Aktion der Folgenzeilen nreadwrite = Ausgabemuster der Folgezeilen für Ausgabedatei test = # Die Ausgabeaktion wird nur ausgeführt, wenn die wahr ist (!= 0) # Die Bedingung kann sich auch auf konsolidierte Variablen beziehen. # Ops: + - * / ~ % < > <= >= = != # genutzt werden kann %0-%9, %N, # %{,SUM}, %{,AVG}, %{,MIN}, %{,MAX}, %{,FIRST}, %{,LAST}, %{,DIST} # %{TIMERANGE}, %{TIMEDIFF} action = auszuführende Aktion 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: 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-Kennung;"%1";_' syslog = an Syslog senden, Format: , : 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) writetopath = Pfad festlegen für "writeto" writeto = Ausgabemuster für Datei, die mit writetopath festgelegt wird. exit = # lfa4uls beenden mit Exitcode (Der kann auch eine Variable z. B. %3 sein) storesecs = - Sekunden, nach denen zwischengespeicherte Zeilen (store) gesendet werden storesendreg = - oder Regular-Expression, bei der die zwischengespeicherten Zeilen gesendet werden storesendaction = - Befehl zum Senden der gespeicherten Daten cancelreg = - Regular-Expression, bei der zwischengespeicherte Zeilen gelöscht werden und konsolidierte Zeilen zurückgesetzt werden # ----- Einschränkung der reg für verschiedene Logdateien ----- # # 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: # # setregrange = - # Geht übersichtlicher durch die Bildung von Blöcken. # # für die nun folgenden "input*" Zeilen gelten nur die reg - reg # # 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 ----- # festlegen der Syslog Parameter syslogpars = , # Siehe "man openlog" # ----- LOG ----- # # 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 = log # lreg_file = laction = echo 'Info: %z' # lwrite = # alle [nread][!]reg[_file][+], iformat, nreadformat # und lreg[_file] # konnen durch anfügen eines '|' ans '=' auf "ignore case" geschaltet werden. # ----- STAT ----- # # Ausgabe statistischer Daten nach Zeit ssched = swrite = saction = # : /[s|m|h] # : Startzeitpunkt # : Intervall in Einheite s/m/h, def. ist m # : Zeitstempelflag: S: Start, E: End, def. ist E # Bedeutung: Beginnend mit wird alle s|m|h eine Zeile ausgegeben. Siehe auch # Bei mehreren überwachten Dateien wird swrite und saction pro Datei ausgeführt, # so dass zur Unterscheidung %p oder %P im Text enthalten sein sollte. # ----- SET ----- set = # 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