Die Datei /var/log/wtmp speichert jeden Login an System, ist eine Binärdatei und kann mit last
lesbar gemacht werden.
Paket
sysklogd - Syslog Daemon
syslog-ng - Next generation logging Daemon
rsyslog - Erweiterter Syslog Daemon
/etc/syslog.conf
Facilities (Nachrichtentypen ) | |
auth | Authorisierung aller Art |
authpriv | Authorisierung aller Art |
cron | Cron-Dämon |
daemon | Verschiedene Dämonen |
kern | Kernel-Nachrichten (unter Debian Woody ist der Facility-Name für "kern" "user") |
lpr | Drucker-Subsystem |
E-Mail-Subsystem | |
mark | Zeitstempel (--MARK--) Option -m [Minuten] gibt an, wann die Markierung gesetzt werden soll |
news | News-Subsystem |
security | Sicherheitsmeldungen |
syslog | Syslog-interne Nachrichten |
user | Nachrichten von Usern |
uucp | UUCP-Subsystem (Unix-to-Unix-Copy) Datenübertragung Mail, News u.a. |
local0 - 7 | Reserviert für lokalen Bedarf |
Priorität nach schwere aufsteigend geordnet | |
emerg | Das System ist unbrauchbar |
alert | Es müssen dringend Aktionen eingeleitet werden |
crit | Kritische Nachricht |
err | Normaler Fehler |
warn | Warnung |
notice | Normale, aber bedeutende Nachricht |
info | Normale Nachricht |
debug | Meist unwichtige Nachricht |
Ausgabemöglichkeiten | |
/pfad/datei | Schreibe in die Protokolldatei |
-/pfad/datei | Schreibe in die Protokolldatei, diese wird aber nicht synchronisiert, nachdem die Nachricht geschrieben wurde (steigert Performance durch geringere Plattenauslastung, bei einem stark ausgelasteten System, kann es aber sein, das einzellne Protokolleinträge nicht vollständig oder gänzlich fehlen können.) |
| /pfad/pipe | in eine Pipe protokollieren |
| /dev/tty8 | Schreibt auf die TTY8 Konsole |
|/dev/xconsole | Schreibt Meldungen auf eine X-Konsole |
@hostname | Leite die Nachrichten zu am angegebenen Rechner weiter (Option -r muss gesetzt sein, bei Debian im init-Script SYSLOGD="-r" eintragen) |
user | Schreibe auf das Terminal des angegebenen Users |
* | wall: Schreibe auf alle benutzten Terminals |
Variable | Bedeutung |
---|---|
$FACILITY | Quelle: auth(priv),cron,daemon,ftp,kern,lpr,mail,mark,news,security(=auth, nicht!),syslog,user,uucp,local0-7 |
$PRIORITY | Priorität: debug,info,notice,warn(ing),err(or),crit,alert,emerg/panic |
$LEVEL | Priorität: debug,info,notice,warn(ing),err(or),crit,alert,emerg/panic |
$TAG | Quelle+Priorität als 2-stellige Hexzahl |
$DATE | Datum im Standardformat |
$FULLDATE | Datum im Standardformat |
$ISODATE | Datum im Standardformat |
$YEAR | Jahr (4-stellig) |
$MONTH | Monat (2-stellig) |
$DAY | Tag (2-stellig) |
$WEEKDAY | Wochentag (3-stellig: Mon, Tue, ..., Sat, Sun) |
$HOUR | Stunde (2-stellig) |
$MIN | Minute (2-stellig) |
$SEC | Sekunde (2-stellig) |
$TZ | Zeitzone (3-stellig) |
$TZOFFSET | Zeitzonen-Differenz zu GMT (5-stellig) |
$FULLHOST | Hostname (FQHN, mit Domain) |
$HOST | Hostname (ohne Domain) |
$PROGRAM | Programm von dem Meldung stammt |
$MESSAGE | Eigentlicher Nachrichteninhalt (Text inkl. Programmname + PID) |
$MSG | Eigentlicher Nachrichteninhalt (Text inkl. Programmname + PID) |
$MSGONLY | Nur Nachrichtentext |
Beispiel
template("[$YEAR/$MONTH/$DAY $HOUR:$MIN:$SEC] $PRIORITY $FACILITY $MESSAGE\n") destination sql { program("/usr/local/sbin/log2mysql.sh" template("$HOUR $MIN $HOST $MSG") template_escape(yes) };in einem Selektor kann man mehrere Facilities durch Kommata getrennt angeben. Das gilt aber nicht für Prioritäten, es kann in einem Selektor nur eine Priorität angegeben werden. Dafür kann man mehrere Selektoren durch Semikola getrennt angeben. Enthält eine Zeile mehrere Selektoren, so wird diese von links nach rechts ausgewertet. Ein Reihe von Selektoren fungiert so wie ein Filter, erst werden allgemeine Selektoren angegeben, gefolgt von spezifischeren.
logger -p kern.notice "Testnachricht kern.notice"- Testnachricht mit allen Prioritäten
for p in {debug,info,notice,warn,err,crit,alert,emerg} do logger -p kern.$p "Testnachricht kern Priorität $p" done- Testnachricht an alle Facilities mit Priorität senden
for f in {auth,authpriv,cron,daemon,kern,lpr,mail,mark,news,syslog,security,user,uucp, local0,local1,local2,local3,local4,local5,local6,local7} # eine Zeile do for p in {debug,info,notice,warn,err,crit,alert,emerg} do logger -p $f.$p "Testnachricht Facility $f Priorität $p" done doneFifo-Puffer einrichten
Datei | Beschreibung |
---|---|
logrotate /etc/logrotate.conf | Logrotate ausführen (Standard ist Täglich mit cron Job) |
logrotate -f /etc/logrotate.d/apache2 | Logrotate von Hand ausführen, nur die Konfiguration für Apache2 |
logrotate -df /etc/logrotate.d/apache2 | wie oben, nur im Debuggmodus |
/etc/logrotate.conf | Konfigurationsdatei |
/etc/logrotate.d | Konfigurationsdateien für einzelne Programme und deren LOGs |
/var/lib/logrotate/status | Statusinfo |
Kommandos | Aktion |
---|---|
compress | Benutzt gzip zur Kompression alter Dateien |
nocompress | Alte Logs werden nicht komprimiert |
copytruncate | Kopiert das Log und kürzt dann das alte Log |
nocopytruncate | Logs werden nicht kopiert und gekürzt |
create 774 User Group | Benutzt die angegebenen Rechte fürs neue Log; sind keine Rechte angegeben, werden die Rechte des alten Logs übernommen. |
nocreate | Gegenteil von create |
daily | Logs rotieren täglich |
weekly | Logs rotieren wöchentlich |
monthly | Logs rotieren monatlich |
delaycompress | Kompression bei der nächsten Rotation |
errors MAILTO | Sendet Fehler an die angegebene Mailadresse |
ifempty | Rotiert auch leere Logs |
include DATEI | Fügt die angegebene Datei in die Konfigurationsdatei ein |
mail MAILTO | Sendet Logs zur angegebenen Mailadresse, wenn sie gelöscht werden. |
nodelaycompress | Alte Logs werden sofort komprimiert |
olddir VERZEICHNIS | Alte Logs werden in das angegebene Verzeichnis verschoben. |
noolddir | Alte Logs werden nicht in ein anderes Verzeichnis verschoben |
notifempty | Leere Logs werden nicht komprimiert |
postrotate | Startet Skript nach der Rotation |
prerotate | Startet Skript vor der Rotation |
rotate N | Gibt die Anzahl der alten Logs an, die archivert werden. |
size N | Rotation, wenn das Log die angegebene Größe erreicht hat.(k für kB und M für MB) |
# Globale Optionen # Wöchentliche Rotation weekly # Haltbarkeit der archivierten Logs: # Vier Wochen rotate 4 # Erstellt ein neues Logfile nachdem das alte gesichert wurde create # Logfiles komprimieren #compress # Archiv der alten LOG Files olddir /var/log/OLD # Externe Konfigurationen include /etc/logrotate.d
# Datei Optionen # besondere Einstellung für die Dateien /var/log/wtmp und /var/log/btmp /var/log/wtmp { # Monatliche Rotation monthly # erstellt eine neue Datei /var/log/wtmp mit den Zugriffsbits 0664, dem Eigentümer root und der Gruppe utmp create 0664 root utmp # eine Alte-Version behalten rotate 1 # die älteste LOG Datei an die Mail ADR "user@online.de" versenden und löscht diese dann. mail user@domain.tld }
Rsyslog Projekt
Rsyslog Wiki
rsyslog.conf
PHPlogCon
Systemüberwachung mit rsyslog
/etc/default/rsyslog - Daemon Konfigurationsdatei
/etc/rsyslog.conf - Konfigurationsdatei
/etc/rsyslog.d/ - Verzeichnis für .conf Dateien
# /etc/default/rsyslog RSYSLOGD_OPTIONS="-c3"
# /etc/rsyslog.conf ################# #### MODULES #### ################# $ModLoad imuxsock # provides support for local system logging $ModLoad imklog # provides kernel logging support (previously done by rklogd) #$ModLoad immark # provides --MARK-- message capability # provides UDP syslog reception #$ModLoad imudp #$UDPServerRun 514 # provides TCP syslog reception #$ModLoad imtcp #$InputTCPServerRun 514 ########################### #### GLOBAL DIRECTIVES #### ########################### # # Use traditional timestamp format. # To enable high precision timestamps, comment out the following line. # $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat # # Set the default permissions for all log files. # $FileOwner root $FileGroup adm $FileCreateMode 0640 $DirCreateMode 0755 # # Include all config files in /etc/rsyslog.d/ # $IncludeConfig /etc/rsyslog.d/*.conf ############### #### RULES #### ############### # # First some standard log files. Log by facility. # auth,authpriv.* /var/log/auth.log *.*;auth,authpriv.none -/var/log/syslog #cron.* /var/log/cron.log daemon.* -/var/log/daemon.log kern.* -/var/log/kern.log lpr.* -/var/log/lpr.log mail.* -/var/log/mail.log user.* -/var/log/user.log # # Logging for the mail system. Split it up so that # it is easy to write scripts to parse these files. # mail.info -/var/log/mail.info mail.warn -/var/log/mail.warn mail.err /var/log/mail.err # # Logging for INN news system. # news.crit /var/log/news/news.crit news.err /var/log/news/news.err news.notice -/var/log/news/news.notice # # Some "catch-all" log files. # *.=debug;\ auth,authpriv.none;\ news.none;mail.none -/var/log/debug *.=info;*.=notice;*.=warn;\ auth,authpriv.none;\ cron,daemon.none;\ mail,news.none -/var/log/messages # # Emergencies are sent to everybody logged in. # *.emerg * # # I like to have messages displayed on the console, but only on a virtual # console I usually leave idle. # #daemon,mail.*;\ # news.=crit;news.=err;news.=notice;\ # *.=debug;*.=info;\ # *.=notice;*.=warn /dev/tty8 # The named pipe /dev/xconsole is for the `xconsole' utility. To use it, # you must invoke `xconsole' with the `-file' option: # # $ xconsole -file /dev/xconsole [...] # # NOTE: adjust the list below, or you'll go crazy if you have a reasonably # busy site.. # daemon.*;mail.*;\ news.err;\ *.=debug;*.=info;\ *.=notice;*.=warn |/dev/xconsole
Befehl | Erläuterung |
---|---|
invoke-rc.d rsyslog reload | Daemon neustarten |
- Paket rsyslog-mysql installieren
- MySQL Datenbank Syslog mit Benutzer rsyslog manuell erzeugen.
dpkg-reconfigure rsyslog-mysql
- MySQL Benutzer rsyslog an der Datenbank Syslog alle Rechte zuweisen
mysql -u root -p Syslog Enter password: > grant ALL ON Syslog.* to rsyslog@localhost identified by 'passwort'; > flush privileges;
- Änderung der conf Datei
# /etc/rsyslog.conf $ModLoad MySQL mail.* >localhost,Syslog,rsyslog,passwort
Beispiel für ein tägliches MailLogfile
$template dailyMail, "/var/log/%fromhost:::lowercase, secpath-drop%/mail-%$day%.log"
%fromhost - der HostNamen des Senders
$day - aktueller Tag des Monats
- Selbstdefiniertes LogFormat benutzen
$template MyLogFormat,"%facility% %timestap:::rfc-3339% %msg%\n" mail.* -/var/log/mail.log;MyLogFormat
rfc-3339 - Zeitstempel mit bis zu Mikrosekunden Genauigkeit
- Beispiel für die Nutzung zweier Templates
$template dailyMail, "/var/log/%fromhost:::lowercase, secpath-drop%/mail-%$day%.log" $template MyLogFormat,"%facility% %timestap:::rfc-3339% %msg%\n" mail.* ?;MyLogFormat;dailyMail
? - gibt an das es sich um ein Dynafile handelt, hier stehen die Dateinamen nicht fest, er wird erst aus dem Nachrichtentext generiert.
- Filtern nach einen bestimmten Hostname, bei ErrorMessage in ein bestimmtes LogFile schreiben
if $fromhost == 'server.domain.tld' and $msg contains 'error' then /var/log/server.log
- Filter schreibt SSH Authentifizierungsfehler in die /var/log/sshd Datei.
if $syslogfacility-text == 'auth' and ($msg contains 'Failed' or $msg contains 'Accepted') then /var/log/sshd
Filter Parameter | Erläuterung |
---|---|
$syslogfacility-text | Facility Name |
$msg | sucht nach der Zeichenkette in der Meldung |
contains | Groß- und Kleinschreibung wird beachtet |
contains_i | Groß- und Kleinschreibung wird nicht beachtet |
and | und |
or | oder |
# /etc/rsyslog.conf $SystemLogRateLimitInterval 30 $SystemLogRateLimitBurst 2000