rsyslog Filter

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
mfuhrmann
Beiträge: 20
Registriert: 05.11.2012 14:41:34

rsyslog Filter

Beitrag von mfuhrmann » 26.04.2013 08:49:38

Guten Morgen,

ich nutze rsyslog als zentralen Syslogserver und lasse diesen in eine MySQL Tabelle schreiben. Als Frontend nutze ich den LogAnalyzer.
Ich habe einige MySQL Tabellen, die ich unterschiedlich füllen lasse. D.h. z.B. eine für Switches, eine Für Windows Terminalserver, eine für Linux Server usw.

Die rsyslog-Filterregeln dafür sehen dann so aus:

Code: Alles auswählen

if \
$fromhost-ip == '10.4.1.251' or \
$fromhost-ip == '10.4.1.234' or \
$fromhost-ip == '10.4.1.250' or \
$fromhost-ip == '10.4.1.231' or \
$fromhost-ip == '10.4.1.49' or \
$fromhost-ip == '10.4.1.24' or \
$fromhost-ip == '10.2.1.46' or \
$fromhost-ip == '10.2.1.37' or \
$fromhost-ip == '10.4.1.241' or \
$fromhost-ip == '10.4.1.252' or \
$fromhost-ip == '192.168.200.115' \
 then :ommysql:localhost,rsyslogdb,rsyslog,PASSWORT;TABELLENNAME

if \
$fromhost == 'server1' or \
$fromhost == 'server2' or \
$fromhost == 'server3' \
 then :ommysql:localhost,rsyslogdb,rsyslog,PASSWORT;TABELLENNAME
Nun gibt es hier und da doch immer mal Logs (und ich lasse nur die "bösen Kategorien" loggen), die regelmäßig kommen und ich eig. nicht drin haben will. Und das will ich irgendwie unterbinden.

Zwei Ansätze habe ich:

1. Die Filterregel anpassen und Ausschlüsse definieren
2. Der Notfallplan wäre ein MySQL Job und relativ hochfrequent unnötiges raus löschen lassen.

Was habe ich getestet?

Code: Alles auswählen

if \
(($fromhost-ip == '172.27.60.1') or \
($fromhost-ip == '172.27.19.1') or \
($fromhost-ip == '172.27.41.1')) and \
($msg !contains "scheduled daily restart") \
then :ommysql:localhost,rsyslogdb,rsyslog,PASSWORT;TABELLENNAME
Klappt aber leider nicht. Dann kommt keine Meldung mehr rein. Auch wenn man es in einer Zeile schreibt (hatte ich irgendwo mal als Tipp gelesen).

Hat vielleicht jemand eine Idee bzw. Lösungsansatz für mich?

Was mich auch noch stört ist, dass auch alle Logs in /var/log/messages landet. Aber der rsyslog benötigt ja die Daten um sie weitergeben zu können. Keine Ahnung ob man das irgendwie eleganter lösen kann...

Danke für die Hilfe.


--
Marcel

Benutzeravatar
Natureshadow
Beiträge: 2157
Registriert: 11.08.2007 22:45:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Radevormwald
Kontaktdaten:

Re: AW: rsyslog Filter

Beitrag von Natureshadow » 26.04.2013 09:35:59

Nur am Rande: rsyslog hat offene Bugs, die dafür sorgen, dass er blockt wenn dein MySQL mal langsam ist. Einige Dienste, zum Beispiel slapd, stellen dann den Dienst ein.

Nur, falls du den syslogd noch wechseln willst ;).

mfuhrmann
Beiträge: 20
Registriert: 05.11.2012 14:41:34

Re: rsyslog Filter

Beitrag von mfuhrmann » 26.04.2013 10:30:57

Ööhhmm. Keine Ahnung. Hatte den rsyslog genommen, weil der an MySQL angebunden werden kann. So wie ich das verstanden hatte, kann das der normale syslogd nicht.
Natürlich ist mein MySQL so dermaßen schnell, dass ich das Problem sicher nicht bekommen werde :-P Aber Spass beiseite. Ist keine riesige Umgebung. Aus dem Bauch raus, glaube ich nicht, dass ich Probleme bekomme. Aber danke für die Info.

Benutzeravatar
Natureshadow
Beiträge: 2157
Registriert: 11.08.2007 22:45:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Radevormwald
Kontaktdaten:

Re: AW: rsyslog Filter

Beitrag von Natureshadow » 26.04.2013 10:36:11

Naja, mir hat das Ding wegen langsamem MySQL schon 2 Mal das ganze Netz runter gehauen, weil dann LDAP und in der Folge DHCP und DNS weg waren.

Aber wenn bei dir so ein SPOF kein Problem darstellt :)..

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: rsyslog Filter

Beitrag von rendegast » 26.04.2013 11:46:37

Was mich auch noch stört ist, dass auch alle Logs in /var/log/messages landet.
Bei mir beende ich weitere Bearbeitung so, /etc/rsyslog.d/10_remote.conf

Code: Alles auswählen

:FROMHOST,isequal,"11.22.33.44"           /var/log/11.22.33.44_fromhost
& ~
Ein Aussortieren

Code: Alles auswählen

:msg,isequal," (root) CMD (   cd / && run-parts --report /etc/cron.hourly)"             ~




---------------------------------------------------------------------------------------------
Nebenbei, hier habe ich eine Weile dran gesessen bis ich drauf kam

Code: Alles auswählen

#       diese direkte Kopie der syslog-Nachricht funktioniert nicht:
#:msg,contains,"(root) CMD (  [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -ignore_readdir_race -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete)"          ~
#       Der Backslash ist hier ein Sonderzeichen und muss quotet werden!
:msg,isequal," (root) CMD (  [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -ignore_readdir_race -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \\; -delete)"          ~
War IMO nicht so offensichtlich, da ja auch andere Sonderzeichen drin sind.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

mfuhrmann
Beiträge: 20
Registriert: 05.11.2012 14:41:34

Re: rsyslog Filter

Beitrag von mfuhrmann » 29.04.2013 09:20:12

Hallo,

also momentanter Stand ist der, dass ich zumindest bestimmte Nachrichten, bevor diese in die DB geschrieben werde, herausfiltere.

Code: Alles auswählen

#Ausschluss von bestimmten Nachrichten
:msg, contains, "scheduled daily restart" /dev/null
& ~

$template Domaincontroller,"insert into Domaincontroller (Message, Facility, FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values ('%msg%', %syslogfacility%, '%HOSTNAME%', %syslogpriority%, '%timereported:::date-mysql%', '%timegenerated:::date-mysql%', %iut%, '%syslogtag%')",SQL

# Domaincontroller
if \
$fromhost == 'dc01' or \
$fromhost == 'dc02' or \
$fromhost == 'dc03' \
then :ommysql:localhost,rsyslogdb,rsyslog,PASSWORD;Domaincontroller 
Wie genau läuft das im rsyslog ab? Das Konfigfile wird von oben nach unten abgearbeitet, oder?
D.h. wenn ich "oben" etwas nach /dev/null schieben lasse, ist es weg und keine Regel drunter bekommt diese Daten noch zu greifen, oder?

D.h. diese Reihenfolge:

- Meine Ausschlüsse
- Meine Regeln
- Ausschluss von allem was <> localhost
- Default rsyslog Regeln

sollte also alles bringen was ich brauche. Ich teste mal.
-

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: rsyslog Filter

Beitrag von rendegast » 29.04.2013 09:50:13

D.h. wenn ich "oben" etwas nach /dev/null schieben lasse, ist es weg und keine Regel drunter bekommt diese Daten noch zu greifen, oder?
Erst wenn die Nachricht auf eine "Verfallen"- resp. "Stop"-Anweisung trifft wird die Verarbeitung abgebrochen.


:msg, contains, "scheduled daily restart" /dev/null
& ~
Etwas einfacher wäre nach dem obigen php-Beispiel

Code: Alles auswählen

:msg, contains, "scheduled daily restart" ~
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Antworten