Обновлена 5.11.2009
После долгого юзания ОС возникает такой момент, когда хочется всё контроллировать, в смысле писать события в файл. Для этих целей предназначен демон syslog. И так, всё по порядку.
Дело в том, что полной документации по syslogd вообще нет. Есть только общая, наиболее используемая. Поэтому по чуть-чуть с разных форумов, с гугла насобирал всё в кучу. 🙂
Все изменения будут производится в файле /etc/syslog.conf. После любых изменений нужно перегружать конфигурацию демона syslog:
#/etc/rc.d/syslog reload
1) Выбираем, что нужно писать.
– писать по “ключевому слову”. Наример, вы хотите писать все события связанные с ppp, tftpd, dhcpdили smbd_audit (аудит самбы). Для этого применяем такую конструкцию
!ppp
*.* /var/log/ppp.log
!tftpd
*.* /var/log/tftpd.log
!dhcpd
*.* /var/log/dhcpd.log
!smbd_audit
*.* /var/log/samba/audit/audit.log
– категория журналирования local0-local7. Для этого применяем такое
local7.* /var/log/local7.log
если нужно принимать журналирование с удалённого сервера, то применяем такую конструкцию (для того, что бы это заработало, syslogd должен стартовать с параметром “-a“):
#grep syslog /etc/rc.conf
syslogd_enable="YES"
syslogd_flags="-a 10.10.10.0/24 -a 10.11.11.0/24" # означает принимать логи для любых машин с подсети 10.10.10.0/24, 10.11.11.0/24
а это добавляем уже в /etc/syslog.conf
+10.10.10.10
local7.* /var/log/10.10.10.10.log
+*
сочетание +* означает конец привязки к хосту, с которого забираем логи.
– логгированние только на локальную машину: +@
Это сочетание ставится в начале зоны логгирования и означает, что всё, что логгироваться на локальную машину будет только то, что расположенно ниже.
– логгированние на удалённую машину.
*.info @domain.com.ua
– альтернативное логгирование (если вы не хотите использовать syslog для логгирование, а будете использовать другую программу)
mail.* | /usr/local/bin/mailstat.pl
– отправка сообщения в логи из консоли
#logger -sp [средство].[уровень] [-t имя_процесса] "текст"
Пример 1:
mycomp# logger 111111
после этой команды в файле /var/log/messages появится запись:
Feb 8 14:57:15 mycomp root: 111111
Пример 2:
mycomp# logger -p cron.debug this is test message 222222
после этой команды в файлах /var/log/cron и /var/log/debug.log появится запись:
Feb 8 15:07:02 msinhome root: this is test message 222222
Пример 3:
mycomp# logger -ps debug this is test message 333333
после этой команды в файлах /var/log/debug.log появится запись:
Feb 8 15:15:52 msinhome root: this is test message 333333, а также сообщение выведется на
консоль:
root: this is test message 3333333
2) Исключаем из логгирования.
– исключение по категориям (auth, authpriv,console,cron,daemon,ftp,kern,lpr,mail,mark,news,ntp,security,syslog,user,uucp,local0-local7).
Если ваши логи попадают под одну из этих категорий, добавляем уровень none
*.*;authpriv.none /var/log/all.log
либо так
*.*;authpriv.!=* /var/log/all.log
приведёт к тому, что записи из категории authpriv в общий лог писатся не будут.
– исключение по ключевому слову.
Для исключения применяем такую констукцию.
!ppp
*.* /var/log/ppp.log
!-ppp ### ОБРАТИТЕ ВНИМАНИЕ
...
!-ppp ### ОБРАТИТЕ ВНИМАНИЕ
где место под точки выделены те участки, куда пишется лог, если не “вырезать” его.
Мы как бы заключаем в своеобразные кавычки то, что не нужно включать. В данном примере всё упоминание про ppp логгируется в ppp.log и больше никуда не пишется.
Если нужно “вырезать” несколько ключей, тогда используем такую конструкцию
!dhcpd
*.* /var/log/dhcpd.log
!tftpd
*.* /var/log/tftpd.log
!smbd_audit
*.* /var/log/samba/audit/audit.log
!-dhcpd,tftpd,smbd_audit
… всё остальное, кудо не должно оно сыпаться.
Заключения
В качестве заключения приведу полный конфиг, в котором присутствует логгирования с удалённых машин, логирование по ключевому слову, альтернативное логирование и локальное логирование самого сервака. И каждый тип логов пишется только в отдельный файл.
#server1
+10.0.10.1
*.* /var/log/remote/server1/all.log
+*
#server2
+10.0.10.2
*.* /var/log/remote/server2/all.log
+*
# Выборка логов только локальной машины, +@ - только логи с текущей машины.
#Дальше будут идти только логи с локальной машины.
+@
!dhcpd
*.* /var/log/dhcpd.log
!-dhcpd
*.err;kern.warning;auth.notice;mail.crit /dev/console
*.notice;authpriv.none;kern.debug;lpr.info;mail.crit;news.err /var/log/messages
security.*;auth.*;authpriv.* /var/log/security
auth.info;authpriv.info /var/log/auth.log
auth.info;authpriv.info | exec /usr/local/sbin/bruteblock -f /usr/local/etc/bruteblock/ssh.conf
mail.info /var/log/maillog
lpr.info /var/log/lpd-errs
Приведу краткую памятку:
# Правила применяются ко всем сообщениям с my.host
+my.host
# Правила применяются к сообщениям от logger
# (фильтр хоста продолжает действовать)
!logger
# Правила применяются от su к my.host
!+su
# Правила применяются к сообщениям от su с любых хостов
# (фильтр хоста отменён, фильтр программы продолжает действовать)
+*
# Правила применяются ко всем сообщениям (фильтр программы так же отменён)
!*
2 коментарі “FreeBSD syslog: выбираем, что писать”
Привет. Почитал статью сейчас – все хорошо расписано, но есть вопросик один: У меня не получается записать лог самбы в отдельный лог. Требуется логирование удаления, изменения и перемещения файлов в шаре в отдельный файл, который содержит информацию о IP компа, пути к папке или файлу, и действия совершенные с ними. Может есть у тебя ссылка на статью по подробной настройке или сам знаешь? Хотелось бы самому разобраться что и как там – но что-то не получается у меня нифига. На Убунту получилось.
https://skeletor.org.ua/?p=95