RSS-Feed anzeigen

jahlives

Ein paar nützliche Dinge für syslog-ng

Bewerten
Mit dem syslog-ng Paket kommt ein sehr flexibler Logger an Bord. Hier mal ein paar Tipps dazu. Die Konfiguration erfolgt über /etc/syslog-ng (wird also ein FW-Upgrade kaum überleben!)

Wenn man an der Konfig etwas anpasst muss man danach immer den syslog-ng neustarten
Code:
/usr/syno/etc.defaults/rc.d/S22syslogng.sh stop
/usr/syno/etc.defaults/rc.d/S22syslogng.sh start

ALLES Loggen
wenn man wirklich alles Loggen will, dann muss man die von Synology gesetzten Filter entfernen
Code:
#vorher
log { source(src); filter(f_messages); destination(messages); };
#nachher
log { source(src); destination(messages); };
der default Filter würde viele Meldungen unterdrücken
Code:
filter f_messages { level(warn..emerg) and not facility(auth, authpriv, mail, news, cron) and not program(syslog-ng) \
 and not filter(f_local) and not filter(f_synology); };

Maillogs in ein eigenes File
will man die Logs zum Thema Mail zentral in einem File haben dann kann man das so erreichen
Code:
destination d_mail { file("/var/log/mail.log"); };
filter f_mail { facility(mail); };
log { source(src); filter(f_mail); destination(d_mail); };
will man die Logs je nach Level in eigenen Files haben geht das z.B. so
Code:
destination d_mailinfo { file("/var/log/mail/mail.info"); };
destination d_mailwarn { file("/var/log/mail/mail.warn"); };
destination d_mailerr { file("/var/log/mail/mail.err"); };
filter f_info { level(info); };
filter f_warn { level(warn); };
filter f_err { level(err); };
filter f_mail { facility(mail); };
log { source(s_src); filter(f_mail); filter(f_info); destination(d_mailinfo); };
log { source(s_src); filter(f_mail); filter(f_warn); destination(d_mailwarn); };
log { source(s_src); filter(f_mail); filter(f_err); destination(d_mailerr); };
Logs nach Remote
will man die eigenen Logs der DS nach extern schicken geht das recht einfach
Code:
destination d_net { udp("IP.DES.LOG.SERVERS" port(514) log_fifo_size(10000)); };
log { source(src);  destination(d_net); };
Logs von Remote
will man hingegen einen eigenen Logserver dann erreicht man das mit syslog-ng z.B. so
Code:
source s_external { udp ( ip(0.0.0.0) port(514)); };
destination d_hosts { file("/var/log/ext/$HOST/$FACILITY.log"
 owner(root)
 group(root)
 perm(0600)
 dir_perm(0751)
 create_dirs(yes)
);
};
log { source(s_external); destination(d_hosts); };
/var/log/ext müsste man zuerst manuell erstellen. Zudem könnte es sinnvoll sein die Files z.B. unter /volume1, wo mehr Platz ist, abzulegen. Sonst müllt man sich die Systempartition u.U. recht schnell zu. Also den Pfad bei d_hosts anpassen

Logs in mysql
wenn man die Logmeldungen in einer Datenbank (mysql) haben will, dann bietet syslog-ng dazu einen recht komfortablen Weg
Code:
destination d_mysql {
          program("/usr/syno/mysql/bin/mysql --user=USER --password=PASSWORT syslog" template("INSERT INTO logs (host, facility, priority, level, tag, datetime, program, msg) VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG', '$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC','$PROGRAM', '$MSG' );\n")
          template-escape(yes)); 
};
# wenn man Logs von extern in Files und in mysql haben will
log { source(s_external); destination(d_hosts); destination(d_mysql); };
# lokale Logs nach mysql
log { source(src); destination(d_mysql); };
dann muss man die entsprechende mysql Datenbank und Tabelle erstellen
Code:
/usr/syno/mysql/mysql -uroot -peuerMysqlRootPasswort
CREATE DATABASE syslog;
USE syslog;
CREATE TABLE `logs` (
  `host` varchar(32) DEFAULT NULL,
  `facility` varchar(10) DEFAULT NULL,
  `priority` varchar(10) DEFAULT NULL,
  `level` varchar(10) DEFAULT NULL,
  `tag` varchar(10) DEFAULT NULL,
  `datetime` datetime DEFAULT NULL,
  `program` varchar(32) DEFAULT NULL,
  `msg` text,
  `seq` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`seq`),
  KEY `host` (`host`),
  KEY `program` (`program`),
  KEY `datetime` (`datetime`),
  KEY `priority` (`priority`),
  KEY `facility` (`facility`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE USER 'syslogfeeder'@'localhost' IDENTIFIED BY 'syslogfeederPasswort';
GRANT ALL on syslog.* TO 'syslogfeeder'@'localhost';
FLUSH PRIVILEGES;
\q
danach den syslog-ng neustarten und die Logs sollten in der mysql-Tabelle landen
Kategorien
Diskstation , Linux

Kommentare