remote syslog in eigenes Logfile

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
Benutzeravatar
aquadraht
Beiträge: 33
Registriert: 10.05.2002 21:39:54

remote syslog in eigenes Logfile

Beitrag von aquadraht » 13.02.2008 10:43:01

Hallo,

ich nutze syslog und lasse einen Server (beta) in das syslog eines anderen Servers (alpha) schreiben.

Ich möchte gerne, dass die syslog-Meldungen von beta auf alpha in ein separates Logfile (beta-syslog) geschrieben werden.
Im Internet habe ich eine Konfig

Code: Alles auswählen

+beta
*.* /var/log/beta-syslog
gefunden, leider funktioniert das nicht.

Gibt es einen Weg, für syslog einen entsprechenden Filter zu definieren?
Die Alternativen syslog-ng und ein separater syslogd möchte ich gerne vermeiden.

Grüße,

Ceekay1
Beiträge: 13
Registriert: 19.10.2008 17:47:10

Re: remote syslog in eigenes Logfile

Beitrag von Ceekay1 » 29.12.2008 19:02:29

Ich häng mich da mal mit dran, da ich es auch gerade versuche so zu machen.

Konkret möchte ich das Syslog von meinem Router (Netgear DG834PNB) auf meinem Debian System loggen. Eben auch in einer eigenen Datei, wie von @aquadraht beschrieben.

Das Quellsystem ist eben dieser Netger Router mit der Firmware V1.03.39. Da habe ich einfach unter "Protokolle" den Punkt "An diese Syslog-Server-Adresse senden" angeklickt und die feste IP des Servers angegeben.

Das Zielsystem ist Debian, genauer (uname -a):

Code: Alles auswählen

Linux server1 2.6.18-6-686 #1 SMP Fri Dec 12 16:48:28 UTC 2008 i686 GNU/Linux
"server1" hab ich das Teil getauft.

Ich hab unter /etc/default/syslogd die Zeile abgeändert: von

Code: Alles auswählen

SYSLOGD=""
zu

Code: Alles auswählen

SYSLOGD="-r -m 0"
Außerdem habe ich in der /etc/hosts Datei den Router eingetragen mit

Code: Alles auswählen

192.168.0.1     router1.*meinedomain*       router1
Zuletzt habe ich mal testweise die /etc/syslog.conf gleich in der 5. Zeile das reingepackt:

Code: Alles auswählen

# Syslog for Netgear Router
*.* /home/log/syslog_netgear.log
Jetzt bekomme ich natürlich ALLE Nachrichten in die Datei geschrieben, nicht nur die von router1.
Eine Änderung in dieser Form:

Code: Alles auswählen

# Syslog for Netgear Router
+router1
*.* /home/log/syslog_netgear.log
vor die *.* Zeile bringt keine Änderung.
aquadraht hat geschrieben:Im Internet habe ich eine Konfig

Code: Alles auswählen

+beta
*.* /var/log/beta-syslog
gefunden, leider funktioniert das nicht.
Wo hast Du das gefunden? Ich sehe in keiner Beschreibung zu syslogd etwas von einem "+"?

Ich würde ja einen zweiten syslog Prozess laufen lassen nur für den Router, aber wie würde das weiterhelfen?
Der würde dann doch auch alles loggen, oder nicht?

/*Edit:
Hab noch einen Beitrag zum gleichen Thema gefunden.
Dort und in vielen weiteren Threads wird immer auf syslog-ng verwiesen.

Kann ich denn auf dem Router syslog laufen lassen und auf dem Server syslog-ng?
Sonst müsste ich ja die Firmware vom Router komplett umstricken, was ich lieber nicht anfangen will.
Edit*/

MfG Ceekay1

Ceekay1
Beiträge: 13
Registriert: 19.10.2008 17:47:10

Re: remote syslog in eigenes Logfile

Beitrag von Ceekay1 » 01.01.2009 14:06:33

Frohe Neues Jahr Leute!!!

Also ich hab jetzt eine "unsaubere" Lösung für meinen Fall:

Mein Router ist dem Server über die "hosts" Datei als "router1" bekannt.
Dies steht also auch in jeder Zeile, die vom Router im extra Syslog angelegt wird.
Jeden Tag wird das syslog "rotiert", d.h. aus "syslog_netgear.log" wird "syslog_netgear.log.0".
Ich hab mein crontab so eingerichtet, dass das tägliche Rotieren (nebst allen anderen "cron.daily" Aktionen) um 5:00h gemacht wird.
Stündlich um *:59h lasse ich ein Script laufen (symLink im Ordner /etc/cron.hourly auf das Script), welches einfach aus dem aktuellen Log alle Zeilen mit dem Inhalt "router1" behält und den Rest entfernt.
So kann ich jederzeit im Log die Routermeldungen (bis auf wenige Ausnahmen) sofort erkennen.
Die rotierten Logs haben dann auch nur die Router-Einträge, bis auf die Meldungen, die zwischen 4:59h und 5:00h eintreffen.

Wie gesagt "unsauber", aber mir reicht es so. Das übrige syslog wird so nicht angetastet und wenn ich es nicht mehr brauche dann lösche ich den Link im cron Ordener.
So kann man für jeden extra "syslog-Kunden" eine einzelne Datei erstellen. Der Host muss nur eine feste IP haben und über die "hosts" Datei bekannt sein.

Das Script ist dieses:

Code: Alles auswählen

#!/bin/sh
#
# file can be placed here: /usr/local/bin
# filename can be: netgearlog.clean
#
# Clean the Netgear syslog
# syslog creates log here: /home/log/syslog_netgear.log
# all messages from router contain the string "router1"

cd /home/log
grep "router1" < syslog_netgear.log > tmp0
cat tmp0 > tmp0.tmp
mv -f tmp0.tmp syslog_netgear.log
rm -f tmp0
Edit: Parameter "-f" bei mv und rm zugefügt, klappt sonst nicht... /Edit

Verbesserungsvorschläge / Kritik willkommen :wink:

MfG Ceekay1

Antworten