Da ich das auch nicht weis ... hier mal ein kleines Beispiel oder How-To.
Zunächst mal bauen wir uns einen echt coolen wahnsinns Web Server! Namens "foo". Der ist in /usr/local/bin/foo zu finden und sieht so aus:
|
Quellcode
|
1
2
3
|
#! /bin/bash
echo "This is foo@"`hostname` "on "`date`
logger "for the log: foo@"`hostname` "on "`date` "has been touched"
|
Vergiß nicht das Ding auf Executable zu setzen (chmod u+x /usr/local/bin/foo).
Dieses Wahnsinns-Ding läßt sich dann natürlich von der shell sofort aufrufen. Bsp.:
|
Quellcode
|
1
2
|
# foo
This is foo@n3tq007 on Sat Jun 9 08:46:07 CEST 2007
|
Jetzt verheiraten wir xinet mit foo. Dazu erstellen wir mal für diesen Wahnsins-Server eine xinet-conf Datei. Und zwar als /etc/xinet.d/foo. Die sieht so aus:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
|
# cat /etc/xinetd.d/foo
service foo
{
port = 9876
socket_type = stream
wait = no
user = root
server = /usr/local/bin/foo
log_on_failure += USERID
disable = no
}
|
Also auf port 9876 ... oder sonst wo ...
Weiters müssen wir dem System noch sagen, das eben auf diesen Port tcp reinkommt. Das geht so:
|
Quellcode
|
1
|
# echo "foo 9876/tcp" >> /etc/services
|
Neustart von xinet:
|
Quellcode
|
1
|
# /etc/init.d/xinetd restart
|
und TATAT! wir haben einen echt Hammer-Server fertig. Test:
|
Quellcode
|
1
2
3
4
5
6
|
$ telnet localhost 9876
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
This is foo@n3tq007 on Sat Jun 9 08:49:56 CEST 2007
Connection closed by foreign host.
|
Zu beachten ist die Zeile
"This is foo@n3tq007 on Sat Jun 9 08:49:56 CEST 2007" welche von unserem Schnucki kommt.
Jetzt müssen wir noch den syslog-ng dazu bringen, ordentliche log-files dafür zu generieren. Nun syslog-ng hat das Konzept:
- Es gibt log-Sourcen, welche logs erstellen.
- Es gibt log-Filter, welche aus den Sourcen bestimmte logs herausnehmen
- Es gibt log-Destinations, wo letztendlich logs landen.
Alle diese drei muß man erstellen, wobei allerdings Source ohnehin immer das gleiche ist.
Wenn wir nun die Teile von unserem SUPER-WAHNSINNS-SERVER foo (hehehehehe) in ein /var/log/foo schreiben wollen, dann muß die syslog-ng.conf so aussehen:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# cat /etc/syslog-ng/syslog-ng.conf
...
source src { unix-stream("/dev/log"); internal(); pipe("/proc/kmsg"); };
destination messages { file("/var/log/messages"); };
...
filter f_foo { program("logger"); };
destination d_foo { file("/var/log/foo"); };
log { source(src); filter(f_foo); destination(d_foo); };
log { source(src); destination(messages); };
log { source(src); destination(console_all); };
|
Die wichtigen Zeilen sind die in der Mitte, wo f_foo (der foo Filter) und d_foo (Das Ziel für die Log-Messages) definiert wird.
Mit "log { source(src); filter(f_foo); destination(d_foo); };" steht dann (in Prosa):
Nimm mal alles was aus der 'src' source rauskommt, wende dann den Filter 'f_foo' an und schreib alles was übrig bleibt in das Ziel 'd_foo'."
Neustart vom syslog-ng:
|
Quellcode
|
1
|
# /etc/init.d/syslog-ng restart
|
und mit dem telnet von oben produzieren wir dann eine Menge Meldungen in
/var/log/foo:
|
Quellcode
|
1
2
3
4
5
|
# cat /var/log/foo
Jun 9 08:42:20 n3tq007 logger: for the log: foo@n3tq007 on Sat Jun 9 08:42:20 CEST 2007 has been touched
Jun 9 08:42:42 n3tq007 logger: for the log: foo@n3tq007 on Sat Jun 9 08:42:42 CEST 2007 has been touched
Jun 9 08:42:46 n3tq007 logger: for the log: foo@n3tq007 on Sat Jun 9 08:42:46 CEST 2007 has been touched
Jun 9 08:49:56 n3tq007 logger: for the log: foo@n3tq007 on Sat Jun 9 08:49:56 CEST 2007 has been touched
|
ABER HALLO! Werden dann einige sagen. Der Filter lautet ja auf "program("logger")" !!
Stimmt. Denn das foo-script schreibt ja nicht direkt, sondern benützt den logger Befehl, also sieht der syslog-ng in seinen Sourcen als ausführenden Prozess nicht "foo" sondern "logger".
Das mußt du halt bei adaptieren ...
Ich hoffe, in dem da oben geschriebenen Blabla findest du etwas verwendbares ...