syslog-server
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| syslog-server [2016-04-12 22:49:59] – Externe Bearbeitung 127.0.0.1 | syslog-server [2017-12-08 10:59:59] (aktuell) – [Problembeschreibung] manfred | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== syslog-Server (logserver) ====== | ||
| + | * [[http:// | ||
| + | |||
| + | Logdaten sind wichtig und lästig. Man muss sie oft aufheben und genauso oft stört der Platzbedarf. | ||
| + | |||
| + | Um Logdaten effizienter speichern zu können, wurde der Log-Server entwickelt. Auf ihm werden die Logdaten übers Netz (gewöhnlich per UDP) abgelegt, da es sich oft aber auch um sehr wichtige Daten handelt, will man sie nicht per UDP auf die Reise schicken! | ||
| + | |||
| + | Leider gibt es zur Zeit nur zwei Log-Daemon die Logdaten per TCP senden und empfangen können: | ||
| + | |||
| + | - **syslog-ng** | ||
| + | - **rsyslog** | ||
| + | |||
| + | Große Linux-Distributionen stellen aus Kompatibilitätsgründen zunehmend auf rsyslogd um: | ||
| + | |||
| + | * seit SUSE Linux Version 9.3 (16. April 2005) ist // | ||
| + | * seit openSUSE Version 11.2 (7. Dezember 2006) ist //rsyslog// der Standard-Syslogd; | ||
| + | * seit Fedora 8 (8. November 2007) ist //rsyslog// der Standard-Syslogd; | ||
| + | * seit Debian (Lenny) GNU/Linux 5 (14. Februar 2009) wurden //syslogd// und //klogd// durch den //rsyslog// als Standard-Syslogd abgelöst; | ||
| + | * seit Ubuntu (Karmic Koala) 9.10 (29. Oktober 2009) wurde der // | ||
| + | |||
| + | Anleitungen für TCP-Log-Server mit Datenbank-Back-End: | ||
| + | |||
| + | * [[syslog-ng]] | ||
| + | * [[rsyslog]] | ||
| + | |||
| + | |||
| + | ===== Apache soll nach syslog loggen ===== | ||
| + | |||
| + | Die Direktive // | ||
| + | |||
| + | Die Verwendung von syslog anstelle eines Dateinamens aktiviert die Protokollierung mittels syslogd(8), sofern das System es unterstützt. Als Voreinstellung wird der syslog-Typ (syslog facility) //local7// verwendet, Sie können dies jedoch auch überschreiben, | ||
| + | |||
| + | |||
| + | ==== Konfiguration ==== | ||
| + | |||
| + | ErrorLog syslog: | ||
| + | |||
| + | |||
| + | * [[http:// | ||
| + | |||
| + | |||
| + | Leider kann // | ||
| + | |||
| + | * [[http:// | ||
| + | |||
| + | Bei Ubuntu müssen dazu (mindestens) in den folgenden Dateien die unten genannte Änderung vorgenommen werden: | ||
| + | |||
| + | * / | ||
| + | * / | ||
| + | * / | ||
| + | |||
| + | < | ||
| + | ... | ||
| + | ErrorLog syslog: | ||
| + | CustomLog "| cat $@ | logger -p local7.notice -t apache2" | ||
| + | ... | ||
| + | </ | ||
| + | |||
| + | Möchte man zusätzlich noch eine Log-Datei schreiben lassen, dann muss // | ||
| + | |||
| + | CustomLog "| cat $@ | tee -a / | ||
| + | |||
| + | Hat man mehrere Webserver, die in die selbe DB loggen, dann ist es sinnvoll die Bezeichnung //apache2// gegen die Domain (z.B. www.domain.de) auszutauschen oder besser, mit der Domain zu kombinieren: | ||
| + | |||
| + | CustomLog "| cat $@ | tee -a / | ||
| + | |||
| + | |||
| + | ==== DB-Abfragen ==== | ||
| + | |||
| + | # echo " | ||
| + | |||
| + | |||
| + | ==== Problem ==== | ||
| + | |||
| + | |||
| + | === Problembeschreibung === | ||
| + | |||
| + | Laut RFC ist es nämlich so, dass eine " | ||
| + | wenn du dir die inhalte der Tabelle " | ||
| + | |||
| + | hier gibt es auch eine disskussion zu diesem Thema: | ||
| + | * [[http:// | ||
| + | |||
| + | hier ist der RFC: | ||
| + | * [[http:// | ||
| + | |||
| + | in dem es heißt: | ||
| + | 4.1 syslog Message Parts | ||
| + | | ||
| + | The full format of a syslog message seen on the wire has three | ||
| + | | ||
| + | is the HEADER, and the third part is the MSG. The total length of | ||
| + | the packet MUST be 1024 Byte or less." | ||
| + | |||
| + | |||
| + | === der logger === | ||
| + | |||
| + | Da wir die Apache-Access-Log' | ||
| + | |||
| + | |||
| + | === Problemlösung === | ||
| + | |||
| + | |||
| + | == MaxMessageSize == | ||
| + | |||
| + | Laut Doku sollte der Default von derzeit 2k über den Parameter $MaxMessageSize in der rsyslog.conf modifizierbar sein: [[http:// | ||
| + | |||
| + | # echo ' | ||
| + | # / | ||
| + | |||
| + | |||
| + | == stdin2syslogd == | ||
| + | |||
| + | Da der " | ||
| + | |||
| + | Hier liegt unsere leicht modifizierte Alternative zum " | ||
| + | |||
| + | #include < | ||
| + | #define SYSLOG_NAMES | ||
| + | #include < | ||
| + | #include < | ||
| + | #include < | ||
| + | | ||
| + | | ||
| + | int main(int argc, const char *argv[]) | ||
| + | { | ||
| + | if (3 != argc) | ||
| + | { | ||
| + | fprintf(stderr, | ||
| + | exit (1); | ||
| + | } | ||
| + | | ||
| + | const char *priority_name = argv[1]; | ||
| + | const char *tag_name = argv[2]; | ||
| + | | ||
| + | int priority = -1; | ||
| + | int i; | ||
| + | | ||
| + | for (i = 0; prioritynames[i].c_name; | ||
| + | { | ||
| + | if (! strcmp(prioritynames[i].c_name, | ||
| + | { | ||
| + | priority = prioritynames[i].c_val; | ||
| + | break; | ||
| + | } | ||
| + | } | ||
| + | | ||
| + | if (priority < 0) | ||
| + | { | ||
| + | fprintf(stderr, | ||
| + | priority_name); | ||
| + | exit (1); | ||
| + | } | ||
| + | | ||
| + | // Log-Level wurde hier mit " | ||
| + | openlog(tag_name, | ||
| + | | ||
| + | // max. Zeilenlänge wurde hier mit 64kB festgelegt: | ||
| + | char buffer[65536]; | ||
| + | | ||
| + | while (NULL != fgets(buffer, | ||
| + | { | ||
| + | syslog(priority, | ||
| + | } | ||
| + | return 0; | ||
| + | } | ||
| + | |||
| + | # gcc -o / | ||
| + | |||
| + | # tail -f / | ||
| + | |||
| + | # echo "Das ist ein Logger-Test!" | ||
| + | |||
| + | |||
| + | ==== Apache loggt jetzt mit voller Länge nach syslogd ==== | ||
| + | |||
| + | CustomLog "| / | ||
| + | |||
| + | |||
| + | ===== Datei nach rsyslog pumpen ===== | ||
| + | |||
| + | * [[http:// | ||
| + | * [[http:// | ||
