Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: GentooForum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

08.06.2007, 21:17

[gelöst] Service nicht in messages loggen lassen

Ich suche eine Möglichkeit gentoo (syslog_ng) dazu zu bringen, ein Programm das als Service eingetragen ist und über xinetd läuft, nicht in /var/log/messages loggen zu lassen.
Irgendwie ist es mir noch nicht geglückt diese logs nicht darin zu haben.

Das einzige was ich bisher geschafft habe, mit einem Filter logs des Programs in eine andere datei zu leiten, jedoch logt er immer noch in /var/log/messages

Hoffe das war verständlich und jemand weiß eine Lösung

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Korban« (09.06.2007, 12:14)


2

09.06.2007, 07:13

Wenn Du jetzt noch sagen würdest was für ein Service das ist, kann Dir vielleicht sogar jemand helfen, aber ohne dieser Info ist das fraglich.

Viele Grüße

3

09.06.2007, 09:02

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):

Zitat

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 ...

=)
http://www.dyle.org
IM-Account (Jabber!) sind auf meiner HP ...
There is no place like /home

http://www.gentooforum.de
http://www.gentoofreunde.org

<div>how to annoy a web developer?</span>

4

09.06.2007, 11:44

in exakt dieser beschriebenen weiße habe ich das auch getan, stimmt zu 99 % mit dem vom oben überein... nur nach deiner beschreibung wird ja immer noch in die /var/log/messages geschrieben, genau das ist es ja was nicht passieren soll

5

09.06.2007, 12:01

Gut, dann hast du ja einen Filter für deinen Server.

Warum bastelst du dir dann nicht einen Rest-Filter für alles übrige?

Quellcode

1
2
3
4
5
6
7
8
9
...
filter f_foo { program("logger"); };
destination d_foo { file("/var/log/foo"); };
log { source(src); filter(f_foo); destination(d_foo); };

filter f_rest { not filter(f_foo) and not filter(....)  };

log { source(src); filter(f_rest); destination(messages); };
log { source(src); filter(f_rest); destination(console_all); };


(Gebe zu, das ist aus der Hüfte geschossen ... aber http://www.balabit.com/dl/html/syslog-ng…html#filterfunc legt das nahe ...)
http://www.dyle.org
IM-Account (Jabber!) sind auf meiner HP ...
There is no place like /home

http://www.gentooforum.de
http://www.gentoofreunde.org

<div>how to annoy a web developer?</span>

6

09.06.2007, 12:12

omg, das war zu einfach um drauf zu kommen...

genau das was ich gesucht habe, vielen Dank an dyle, manchmal sind die einfachsten Dinge doch die schwersten...

somit kann geclosed werden

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Korban« (09.06.2007, 12:12)