Syslog-ng, Logfile mit nur einem Eintrag
Syslog-ng, Logfile mit nur einem Eintrag
Hallo Leute,
ich habe eine Frage zu dem neuen Syslog-Daemon "Syslog-NG".
Ich verwende ihn in einem neuen Projekt und muss hier ein neues seperates Logfile erzeugen. Das funktioniert auch soweit ganz gut.
Jedoch soll in dieses Logfile immer nur ein Eintarg drinnen stehen. Es werden Meldungen von einem IDS an den Server geschickt, er erkennt die externe Ressource und schreibt ein Logeintrag mit einem Template versehen in ein neues File. Das funktioniert auch sowiet.
Nur hätte ich gerne, dass immer nur ein Eintrag im Log steht und zwar der aktuellste. Sobald ein neuer Event auftritt, soll der allte Eintrag rausgelöscht werden und nur der aktuelle soll im Log stehen bleiben. Ein Skript prüft in einer Endlosscheife das Logfile und meldet den Inhalt weiter.
Ich hoffe Ihr könnte mit helfen.
Vielen Dank schon mal und Gruss,
Matthias
ich habe eine Frage zu dem neuen Syslog-Daemon "Syslog-NG".
Ich verwende ihn in einem neuen Projekt und muss hier ein neues seperates Logfile erzeugen. Das funktioniert auch soweit ganz gut.
Jedoch soll in dieses Logfile immer nur ein Eintarg drinnen stehen. Es werden Meldungen von einem IDS an den Server geschickt, er erkennt die externe Ressource und schreibt ein Logeintrag mit einem Template versehen in ein neues File. Das funktioniert auch sowiet.
Nur hätte ich gerne, dass immer nur ein Eintrag im Log steht und zwar der aktuellste. Sobald ein neuer Event auftritt, soll der allte Eintrag rausgelöscht werden und nur der aktuelle soll im Log stehen bleiben. Ein Skript prüft in einer Endlosscheife das Logfile und meldet den Inhalt weiter.
Ich hoffe Ihr könnte mit helfen.
Vielen Dank schon mal und Gruss,
Matthias
-
- Beiträge: 2186
- Registriert: 18.09.2005 15:52:02
- Lizenz eigener Beiträge: GNU Free Documentation License
-
Kontaktdaten:
Das Problem ist folgendes, ich möchte die Meldungen vom IDS an Nagios weitergeben. Da habe ich auch ein Skript im Nagios-Buch gefunden. Aber das funktioniert leider nicht unter Debian und ich hab keine Ahnung warum.
Hier das Skript
Edit by Snoopy:
Code-Tags für die Leserlichkeit eingefügt.
Hier das Skript
Code: Alles auswählen
#!/bin/bash
while read -r line; do
echo $line | /usr/sbin/send_nsca -H 10.227.100.15 -p 5667 -d ';' \
-c /etc/send_nsca.cfg \
1>/var/log/nagios/send_syslog.log 2>&1
done
Code-Tags für die Leserlichkeit eingefügt.
Bekommt das Programm denn überhaupt eine Eingabe?
kann das Programm etwas versenden?
Zu deiner Frage:
lass den syslogd in ein FIFO schreiben, den Du dann endlos in dein readline-script "cattest":Obwohl syslog-ng vermutlich auch direkt an /usr/sbin/send_nsca übergeben kann.
EDIT:sorry, Semikolon ";" falsch gesetzt, so ist's besser:
Code: Alles auswählen
#!/bin/bash
while read -r line; do
echo $line
done
Code: Alles auswählen
#!/bin/bash
echo Laberrabarber | /usr/sbin/send_nsca -H 10.227.100.15 -p 5667 -d ';' \
-c /etc/send_nsca.cfg \
1>/var/log/nagios/send_syslog.log 2>&1
done
lass den syslogd in ein FIFO schreiben, den Du dann endlos in dein readline-script "cattest":
Code: Alles auswählen
mkfifo /var/log/FIFO
in syslog.conf: IDS-Quelle mit FIFO verbinden
while true do; cat /var/log/FIFO | Dein-readline-Skript ;done
EDIT:sorry, Semikolon ";" falsch gesetzt, so ist's besser:
Code: Alles auswählen
while true; do cat /var/log/FIFO | Dein-readline-Skript ;done
Zuletzt geändert von rendegast am 12.07.2006 20:21:32, insgesamt 1-mal geändert.
Ich habe mal versucht, mein Skript nach euren Vorgaben zu definieren, aber leider habe ich noch Schwierigkeiten. Bin nicht der Skript-Schreiber.
Wie muss ich das Skript aufbauen ?
So geht es leider nicht.
Vielen Dank für Eure Hilfe.
Matze
Edit by Snoopy:
Code-Tags für die Leserlichkeit eingefügt.
Wie muss ich das Skript aufbauen ?
So geht es leider nicht.
Code: Alles auswählen
#!/bin/bash
while true; do cat /var/log/nagios/FIFO | "read -r line" \
"echo $line" | /usr/sbin/send_nsca -H 10.227.100.15 -p 5667 -d ';' c /etc/send_nsca.cfg; done
Matze
Edit by Snoopy:
Code-Tags für die Leserlichkeit eingefügt.
der Teil ab "read" entspricht nicht dem, was Du als Readline-Script gepostet hast:while true; do cat /var/log/nagios/FIFO | "read -r line" \
"echo $line" | /usr/sbin/send_nsca -H 10.227.100.15 -p 5667 -d ';' c /etc/send_nsca.cfg; done
Code: Alles auswählen
while read -r line; do
echo $line | /usr/sbin/send_nsca -H 10.227.100.15 -p 5667 -d ';' \
-c /etc/send_nsca.cfg \
1>/var/log/nagios/send_syslog.log 2>&1
done
Der Vorschlag von mir
Code: Alles auswählen
while true; do cat /var/log/FIFO | Dein-readline-Skript ;done
Die while-Schleife hier ist nur dazu da, am FIFO zu warten, ob etwas neues an Dein Readline-Skript zu übergeben ist. Dieses wird dann innerhalb Deiner while-Schleife an 'send_nsca' übergeben.
EDIT: solange, bis alle Zeilen des FIFO-"Pakets" abgearbeitet sind.
EDIT: Ist bei Deiner Version (falls das mit "-c" nur ein Cut+Paste-Fehler ist) nur die erste Zeile der Meldung weitergegeben worden?
Wenn Du beides in einem Script schreiben willst, müssten dann zwei while-Schleifen auftauchen:
Code: Alles auswählen
#!/bin/bash
while true; do
cat /var/log/FIFO | while read -r line; do
echo $line | /usr/sbin/send_nsca -H 10.227.100.15 -p 5667 -d ';' -c /etc/send_nsca.cfg \
1>/var/log/nagios/send_syslog.log 2>&1
done
done
Code: Alles auswählen
#!/bin/bash
function DEIN-TEIL () {
while read -r line; do
echo $line | /usr/sbin/send_nsca -H 10.227.100.15 -p 5667 -d ';' -c /etc/send_nsca.cfg \
1>/var/log/nagios/send_syslog.log 2>&1
done
}
while true; do
cat /var/log/FIFO | DEIN-TEIL
done
Zuletzt geändert von rendegast am 27.07.2006 15:59:28, insgesamt 1-mal geändert.
Danke für deine Idee und Hilfe.
Ich habe das Skript nach deinen Vorgaben umgestzt, aber leider klappt es nicht.
Wenn ich ein cat /var/log/nagios/FIFO mache, sehe ich die kommenden Einträge. Doch er übergibt nichts. Deshalb habe ich das Skript wie folgt geändert und versuche die Logeinträge in ein neues File einzutragen. Das geht leider nicht.
Ich vermuste, dass bei dem Read-Line iregend etwas schief geht.
Muss ich unter Debian für die Read-Line-Anweisung noch irgend eine Erweiterung installieren ?
Hab ich irgend etwas vergessen ?
Gruss
Matthias
Edit by Snoopy:
Code-Tags für die Leserlichkeit eingefügt.
Ich habe das Skript nach deinen Vorgaben umgestzt, aber leider klappt es nicht.
Wenn ich ein cat /var/log/nagios/FIFO mache, sehe ich die kommenden Einträge. Doch er übergibt nichts. Deshalb habe ich das Skript wie folgt geändert und versuche die Logeinträge in ein neues File einzutragen. Das geht leider nicht.
Ich vermuste, dass bei dem Read-Line iregend etwas schief geht.
Muss ich unter Debian für die Read-Line-Anweisung noch irgend eine Erweiterung installieren ?
Hab ich irgend etwas vergessen ?
Code: Alles auswählen
#!/bin/bash
while true; do
cat /var/log/nagios/FIFO | while read -r line; do
echo $line > /blubb
done
done
Matthias
Edit by Snoopy:
Code-Tags für die Leserlichkeit eingefügt.
in der Form
Mit Doppelpfeilwird jedoch angefügt und alles taucht in der Datei auf.
Hier habe ich mit dieser Änderung getestet, und beitaucht dann der komplette Text in blubb auf.
Allerdings gilt dies jetzt nur für diesen Testfall des Schreibens in eine Datei,
Die Form der Pipe in Deinem Ursprungsscript sollte das nicht berühren:Duch die "while read"-Schleife wird jede Zeile einzeln als Eingabe über die Pipe an /usr/sbin/send_nsca übergeben, welches es dann weiterleitet.
überschreibt jede neue Zeile die Datei....
echo $line > /blubb
...
Mit Doppelpfeil
Code: Alles auswählen
...
echo $line >> /blubb
...
Hier habe ich mit dieser Änderung getestet, und bei
Code: Alles auswählen
cat irgendein.txt > FIFO
Allerdings gilt dies jetzt nur für diesen Testfall des Schreibens in eine Datei,
Die Form der Pipe in Deinem Ursprungsscript sollte das nicht berühren:
Code: Alles auswählen
...
echo $line | /usr/sbin/send_nsca ...
...