Настройка syslog сервера debian

Обновлено: 06.07.2024

Rsyslog позволяет настроить отправку логов для определенного приложения на централизованный сервер. Это может значительно упростить процесс контроля за событиями на компьютерах в сети. Его настройка на различных системах на базе Linux, практически, не отличается. В данной инструкции мы рассмотрим процесс установки и настройки на примере CentOS и Ubuntu.

Подготовка сервера

На сервере нужно, предварительно, выполнить следующие настройки.

Время

Для правильной фиксации времени логов, необходимо настроить его синхронизацию.

Сначала задаем правильный часовой пояс:

\cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime

* в данном примере мы использовали московское время.

Затем устанавливаем и запускаем chrony.

а) на системе CentOS / Red Hat:

yum install chrony

systemctl enable chronyd

systemctl start chronyd

б) на системе Ubuntu / Debian:

apt-get install chrony

systemctl enable chrony

systemctl start chrony

Брандмауэр

Если используется брандмауэр, необходимо открыть порты TCP/UDP 514.

а) с помощью firewalld:

firewall-cmd --permanent --add-port=514/

б) с помощью iptables:

iptables -A INPUT -p tcp --dport 514 -j ACCEPT

iptables -A INPUT -p udp --dport 514 -j ACCEPT

в) с помощью ufw:

ufw allow 514/tcp

ufw allow 514/udp

SELinux

Проверяем, работает ли в нашей системе SELinux:

Если мы получаем в ответ:

. необходимо либо настроить SELinux:

semanage port -m -t syslogd_port_t -p tcp 514

semanage port -m -t syslogd_port_t -p udp 514

. либо отключить его командами:

Установка и запуск rsyslog

Установить rsyslog необходимо как на сервер, так и клиентские компьютеры. В зависимости от операционной системы сама установка будет выполняться одной из команд.

а) для систем на базе RPM (Red Hat / CentOS):

yum install rsyslog

б) для систем на базе deb (Debian / Ubuntu):

apt-get install rsyslog

После установки разрешаем автозапуск службы и стартуем ее:

systemctl enable rsyslog

systemctl start rsyslog

Настройка сервера

Открываем конфигурационный файл:

Снимаем комментарии со следующих строк:

$ModLoad imudp
$UDPServerRun 514

$ModLoad imtcp
$InputTCPServerRun 514

* в данном примере мы разрешили запуск сервера для соединений TCP и UDP на портах 514. На самом деле, можно оставить только один протокол, например, более безопасный и медленный TCP.

После добавляем в конфигурационный файл строки:

$template RemoteLogs,"/var/log/rsyslog/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs
&

* в данном примере мы создаем шаблон с названием RemoteLogs, который принимает логи всех категорий, любого уровня (про категории и уровни читайте ниже); логи, полученный по данному шаблону будут сохраняться в каталоге по маске /var/log/rsyslog/<имя компьютера, откуда пришел лог>/<приложение, чей лог пришел>.log; конструкция &

говорит о том, что после получения лога, необходимо остановить дальнейшую его обработку.

Перезапускаем службу логов:

systemctl restart rsyslog

Настройка клиента

Устанавливаем и запускаем rsyslog по инструкции, описанной выше. После приступаем к настройке клиента.

Все логи

Для начала можно настроить отправку всех логов на сервер. Создаем конфигурационный файл для rsyslog:

* где 192.168.0.15 — IP-адрес сервера логов. *.* — перенаправлять любой лог.

systemctl restart rsyslog

Для определенных категорий

Если необходимо отправлять только определенные категории логов, создаем конфигурационный файл для соответствующей, например:

Перезапускаем сервис логов:

systemctl restart rsyslog

Возможные категории для логов (facility):

Для определенного уровня

Перезапускаем сервис логов:

systemctl restart rsyslog

Возможные уровни логов:

Возможные категории для логов (severity):

Аудит определенного лог-файла

Мы можем настроить слежение за изменением определенного лога и передавать их на сервер. Для этого нужно настроить и сервер, и клиента.

Настройка клиента

Создаем новый конфигурационный файл:

$ModLoad imfile
$InputFileName /var/log/audit/audit.log
$InputFileTag tag_audit_log:
$InputFileStateFile audit_log
$InputFileSeverity info
$InputFileFacility local6
$InputRunFileMonitor

* в данном примере мы будем отслеживать изменения лог-файла /var/log/audit/audit.log; нас интересуют события от уровня info и выше; все события будет отмечены категорией local6 и переданы на сервер 192.168.0.15.

Перезапускаем сервис на клиенте:

systemctl restart rsyslog

Создаем новый шаблон для захвата логов:

$template HostAudit, "/var/log/rsyslog/%HOSTNAME%/audit.log"
local6.* ?HostAudit

* в данном примере мы создаем шаблон HostAudit; rsyslog будет принимать логи категории local6 и сохранять в файле /var/log/rsyslog/<имя компьютера, откуда пришел лог>/audit.log.

systemctl restart rsyslog

Лог определенного приложения

Некоторые приложения умеют отправлять лог напрямую на syslog. Например, nginx (начиная с версии 1.7.1). Для этого открываем конфигурационной файл (основной или конфиг виртуального домена):

Добавляем или редактируем соответствующие настройки для логов:

.
access_log syslog:server=192.168.0.15:514 info;
error_log syslog:server=192.168.0.15:514 warn;
error_log /var/log/nginx/error.log warn;
.

* в данном примере мы настроили хранение логов для nginx на сервере 192.168.0.15. Для ошибок также сохраняется локальный лог в файле /var/log/nginx/error.log.

Проверяем корректность конфигурационного файла nginx:

systemctl restart nginx

Чтение логов на сервере

В нашем примере сервер настроен на хранение логов по маске /var/log/rsyslog/%HOSTNAME%/%PROGRAMNAME%.log. Это значит, что в каталоге /var/log/rsyslog должны появляться папки с именами компьютеров, которые отправляют на сервер свои логи. Посмотреть список данных папок можно командой:

Чтение логов выполняется обычной командой cat или tail, например:

* здесь мы прочитаем лог для cron на компьютере comp1.

Приветствую, читатель моего блога. Давненько я не писал статей. Много жизненных перемен. Сегодняшняя статья будет посвящена syslog, а точнее rsyslog, который активным образом внедряется вместо старенького syslogd (он же sysklogd) в последних версиях дистрибутивов (например, Suse, Debian, RedHat и др.). Базовое описание работоспособности syslog и logrotate я приводил в соответствующей статье. Поэтому перед прочтением нижеописанного я очень советую прочитать статью о syslog и logrotate. На текущий момент для меня стоит задача собирать системные журналы syslog с сетевого оборудования в количестве

100 хостов с последующим увеличением их количества. Реализацией данного функционала я и постараюсь заняться в данной статье, предварительно описав структуру конфига и принцип работы rsyslog. Все это дело будет описано на базе Debian 6, в других дистрибутивах, при наличии опыта, с минимумом движений напильником, думаю что тоже не составит большого труда настроить. Итак, начнем.

Введение rsyslog

Установка rsyslogd

Установка rsyslog (если по какой-то причине он не установлен по умолчанию) сводится к одной команде:

Если, конечно, нет желания устанавливать из исходников. Тогда необходимо прочитать install manual . После установки в Debian, мы будем иметь следующее размещение файлов (показаны наиболее важные):

Как видно, все элементарно. rsyslog состоит из бинарника и файла конфигурации. Кроме указанных файлов, rsyslog так же использует:

rsyslog настройка

  1. Модули (Modules)
  2. Конфигурационные директивы (не знаю, как перевести более доступно) (Configuration Directives)
  3. Шаблоны (template)
  4. Правила сортировки (Rule line)

Давайте разберем каждый раздел.

Модули (Modules) rsyslog

Rsyslog имеет модульную архитектуру. Это позволяет удобно расширять функциональность. Модули подразделяются на группы, например некоторые из них:

Модули постоянно добавляются разработчиками и могут быть написаны любым желающим, со списком основных модулей можно ознакомиться на официальном сайте.

Конфигурационные директивы (Configuration Directives)

Конфигурационные директивы иногда называют глобальными директивами, они задают общие параметры работы демона rsyslogd. Директива имеет формат $Директива параметр

С наиболее полным списком глобальных директив можно ознакомиться тут .

Шаблоны (Templates) rsyslog

Cинтаксис template

В целом, структуру шаблона можно представить в следующем виде синтаксисе:

Применение переменных в шаблонах rsyslog

Давайте разгребем структуру значений, указываемых в %процентах%.

Как видно, некоторые свойства начинаются с знака доллара - они считаются локальными\системными.

Значения начало_строки : конец_строки - мозговыносящие. Победить их можно где-то тут . Кратко - они используются для регулярных выражений.

Далее - опции. Опции позволяют модифицировать переменную в границе от знака процента до знака процента. Можно применять одновременно несколько опций, через запятую. Если указать несколько противоречащих (например uppercase, lowercase), то будет применена последняя указанная (lowercase). Вот некоторые опции:

  • uppercase - преобразование к верхнему регистру
  • lowercase - преобразование к нижнему регистру
  • date-mysql - преобразовать в формат даты MySQL
  • space-cc - заменить управляющие символы пробелами
  • drop-cc - удалить управляющие символы
  • и еще куча

fieldname - данное поле доступно с версии 6.3.9+ и имеет очень специфичный характер. Можно ее забыть.

Как видно из приведенного выше шаблона переменной, значения из фигурных скобок указываются по желанию, то есть можно указать просто, например %hostname%. Но если будут применяться опции , то необходимо указать и предыдущие пустые поля, например %hostname. lowercase%. Между двоеточиями пропущены поля начало_строки и конец_строки . При этом, fieldname почему-то в качестве пустого - не указывается.

Шаблоны, которые хардово запрограммированы в rsyslog (но которые можно изменить директивой $ActionFileDefaultTemplate):

RSYSLOG_SyslogProtocol23Format - формат, определённый в проекте стандарта IETF ietf-syslog-protocol-23, соответствует шаблону:

RSYSLOG_FileFormat - традиционный формат журнала, с добавлением долей секунды и зоны, соответствует шаблону:

RSYSLOG_TraditionalFileFormat - традиционный формат журнала для записи в файл, соответствует следующему шаблону:

RSYSLOG_ForwardFormat - традиционный формат журнала для передачи с добавлением долей секунды и зоны, соответствует шаблону:

RSYSLOG_TraditionalForwardFormat - традиционный формат журнала для передачи на удалённый сервер

Правила сортировки rsyslog (Rule line)

Фильтрация RainerScript (RainerScript-based filters)

Как я уже сказал, RainerScript - это классический язык на основе if then else. В rsyslog RainerScript поддерживает вложенность условий, арифметические, логические и строковые операции. В целом, синтаксис следующий:

  1. логические выражения (and, or, not), а так же группировку данных выражений в виде: not условие0 and (условие1 and условие2).
  2. переменные (properties) - переменные указываются в виде $имя_переменной (например $hostname или $msg)
  3. операции сравнения (== - равно, != - не равно, > - больше, < - меньше, <= - меньше или равно, >= - больше или равно, (!)contains - (не)содержит, (!)startswith - (не)начинается с)
  4. комментарии /* комментарии */ (сомнительный пункт . нужно ли его экранировать как в bash . )

Описание языка есть на сайте . Маленький пример фильтра на основе RainerScript:

if $syslogfacility-text == 'local7' and $msg startswith 'CISCO' and ($msg contains 'warn' or $msg contains 'emer') then /var/log/cisco-alarm

Давайте рассмотрим данный вид фильтрации.

: переменная , [!] операция_сравнения , " искомое_значение " действие

  • contains - проверяет соответствие искомое_значение с любой частью строки в переменная
  • isequal - проверяет, совпадает (целиком) ли искомое_значение с переменной
  • isempty - проверяет, является ли переменная пустой (доступна с 6.6.2)
  • startswith - проверяет, начинается ли переменная с искомое_значение
  • regex или ereregex - сравнивает содержимое переменной, заданному в искомое_значение регулярному выражению в соответствии с regular и Extended Regular Expression соответственно

Например: :msg, contains, "syslog" будет искать слово syslog в теле.

Существует так же, специальный символ &, который повторяет выполнение прошлого фильтра и запускает действие, указанное после данного символа. Это очень удобно для фильтрации или экономии системных ресурсов, например:

Действия (actions)

Действия rsyslog полностью совместимы с действиями syslog. Так же, стоит учитывать, что в действии rsyslog, кроме стандартный значений syslog, добавились дополнительные (выделены цветом ):

rsyslog в картинках

После всего прочтенного хотелось бы все это лицезреть в понятном виде. Попробую ка я все это обрисовать.

Вот, собственно и вся схема.

Централизованный сервер rsyslog в Debian

После задания указанных параметров, необходимо перезапустить\перечитать конфигурационный файл (service rsyslog restart). При этом, netstat нам должен показать, что сислог стал слушать соответствующий порт:

Настройка клиентов syslog

Linux (rsyslog)

Cisco

VMware ESXi

Для старенького гипервизора:

В /etc/syslog.conf необходимо добавить следующее:

В последних версиях гипервизора все делается через гуишного клиента. В настройках гипервизора Advansed -> Syslog -> remote указать адрес rsyslog сервера.

Хранение журнала rsyslog в СУБД MySQL

В Debian настройка хранения в базе данных мега простая (почти как в вендовозе ) ). В целом, достаточно установить пакет rsyslog-mysql. При этом, установщик кладет модуль ommysql.so в каталог /usr/lib/rsysloul/spang/ и запускает мастер настройки, который запрашивает пароль администратора MySQL, создает отдельного пользователя и просит указать для него пароль. Создает соответствующую базу из скрипта /usr/share/dbconfig-common/data/rsyslog-mysql/install/mysql. Получившиеся настройки кладет в /etc/rsyslog.d/mysql.conf. Конфиг получается из 2х строчек::

Веб интерфейс для rsyslog

В текущем каталоге появится каталог loganalyzer-3.5.6, который содержит некоторую информацию, достойную прочтения:

rsyslog web интерфейс

установка rsyslog на дебиан

Видим, для чего мы давали права 666, нажимаем Next

настройка rsyslog.conf

Здесь выбираем желаемые настройки. Отдельного внимания требует параметр Enable User Database. Если выбрать его, то будет создана отдельная база для хранения настроек Веб-интерфейса. Так же, будет доступна возможность создавать пользователей и группы. Жмем next.

настройка источников syslog

установлен rsyslog

Это все. Ниже пару скриншотов того, что получилось:

rsyslog отчеты

Есть маленькое дополнение - веб сервер не имеет доступа к обычным файлам в каталоге /var/log/. Поэтому, журнал может не отображаться. Чтобы решить данную проблему, необходимо добавить пользователя www-data в группу adm:

Кроме Loganalyzer существует так же - Logzilla, обладающая тем же функционалом. Ее тоже стоит попробовать установить, если есть желание.

Некоторые типсы и триксы для rsyslog

Для того чтобы разрешить в нетфильтре прохождение udp пакетов, необходимо использовать команду:

Некоторые примеры правил с комментариями:

Траблешуттинг

Для диагностики работы syslog отлично помогает tcpdump, пример команды для мониторинга:

Ну и, конечно же сам /var/log/syslog.

Что еще почитать

Резюме

Статья получилась мега большая. В перспективе, наверно разделю ее на 2 более подробные. В целом, думаю, что прочитав материал - удастся получить достаточный объем базового понимания принципов работы rsyslog, чтобы реализовать своё более сложное и интересное решение. До новых статей!

infoitcomua1

Файлы журналов имеют решающее значение для выявления и устранения ошибок. Это первые файлы, которые системные администраторы изучают, чтобы сузить круг возможных причин ошибки и тем самым найти решения для устранения проблемы. В инфраструктуре с десятками или сотнями серверов и других устройств управление файлами журналов может быть проблемой. И здесь на помощь приходит rsyslog.

Лабораторная установка

Чтобы продемонстрировать, как Rsyslog можно использовать для отправки файлов журнала из клиентской системы на сервер Rsyslog, у нас будет простая лабораторная установка, как показано

Как настроить сервер Rsyslog на Debian 11 (Bullseye)

  • Сервер Rsyslog: Debian 11 IP: 192.168.1.151
  • Клиент Rsyslog: Ubuntu 20.04 IP: 10.20.0.170

Шаг 1. Настройте Rsyslog на сервере

Как упоминалось ранее, Rsyslog работает по модели клиент-сервер, и мы начнем с настройки Rsyslog на сервере Debian 11. В Debian 11 по умолчанию устанавливается Rsyslog. Если по какой-то причине Rsyslog отсутствует, вы можете установить его с помощью команды:

После установки вы можете проверить его рабочий статус следующим образом:

Продолжите и раскомментируйте следующие строки, которые разрешают прием системного журнала UDP и TCP от удаленных клиентов.

Как настроить сервер Rsyslog на Debian 11 (Bullseye) 1

После этого вставьте следующие строки, чтобы определить шаблон, который демон Rsyslog будет использовать для хранения входящих журналов от клиентских систем.

Как настроить сервер Rsyslog на Debian 11 (Bullseye) 2

Файлы журнала будут использовать следующее соглашение об именах:

Чтобы применить изменения, перезапустите демон rsyslog.

По умолчанию rsyslog прослушивает порт 514. Вы можете подтвердить, что это порт, который прослушивает демон rsyslog, выполнив команду ss .

Как настроить сервер Rsyslog на Debian 11 (Bullseye)3

Шаг 2. Настройте правила брандмауэра для rsyslog

Затем перезагрузите брандмауэр, чтобы применить правило брандмауэра, как показано ниже.

Следующим шагом будет настройка клиентской системы Ubuntu для отправки файлов журнала на сервер rsyslog.

Шаг 3. Настройте клиентскую систему rsyslog

Затем отредактируйте файл конфигурации rsyslog.

Перейдите в самый конец файла и добавьте эти строки.

Если на удаленном сервере произойдет какой-либо простой и вы хотите сохранить свои журналы, вы можете установить буфер дисковой очереди, добавив показанные строки.

Ниже приводится сводка всех изменений в конфигурации клиента.

Как настроить сервер Rsyslog на Debian 11 (Bullseye) 5

Сохраните и выйдите из файла. Теперь перезапустите службу rsyslog, чтобы изменения вступили в силу.

На этом этапе клиентская система должна отправлять файлы журнала на сервер rsyslog. Вернемся к серверу и узнаем.

Шаг 4. Просмотрите файлы журнала клиента

Все файлы журналов (включая серверы) хранятся в каталоге /var/log/ . Чтобы просмотреть журналы клиента, выполните следующую команду:

Файлы журнала клиента будут сохранены в каталоге, соответствующем имени хоста клиентской системы, как показано ниже.

Как настроить сервер Rsyslog на Debian 11 (Bullseye) 6

Вы можете дополнительно просмотреть файлы журналов, содержащиеся в главном каталоге журналов.

Как настроить сервер Rsyslog на Debian 11 (Bullseye) 7

Для просмотра журналов в реальном времени используйте команду tail, как показано. Здесь мы просматриваем журналы пользователя sudo.

Мы успешно установили rsyslog и настроили его, чтобы разрешить отправку файлов журнала на сервер rsyslog из клиентской системы. Теперь вы можете настроить столько клиентских систем, сколько хотите, для отправки журналов на сервер rsyslog, чтобы получить централизованную структуру управления журналами.

Это все из этого поста, надеюсь, вы нашли его информативным. Пожалуйста, поделитесь своими запросами и отзывами в разделе комментариев ниже.

Favorite

Добавить в избранное

Главное меню » Операционная система Debian » Как настроить на сервере Debian Linux Syslog

Как настроить на сервере Debian Linux Syslog

Обратите внимание, что файл использует стандартные сокращения для уровня серьезности, а не количества. Отметим также, что вы можете указать любой путь и имя файла для целевого файла журнала. Вы даже можете указать разные файлы журнала с разными степенями тяжести или услуг или любой их комбинации.

Обычно мы создаем большой раздел с именем монтирования точки «logs» только для системного журнала файлов. Вышеперечисленные записи в файле /etc/syslog.conf будут выглядеть примерно так:

Сервер Syslog

Есть две вещи, которые вы должны сделать, чтобы настроить вашу систему Debian в качестве журнала хоста. К счастью, это простые изменения в пару текстовых файлов. это:

Демон Syslog запускается при старте операционной системы по умолчанию, поскольку он также обрабатывает все локальные файлы журнала. Если вы пролистаете файлы в каталоге /var/log вы увидите, о чем мы говорим.

Читать Как узнать, какую версию Linux вы используете

Для того, чтобы выполнить первый пункт выше, мы должны изменить сценарий запуска, который запускает демон SyslogD при загрузке системы. Откройте сценарий с помощью команды:

и найдите линию на верху:

и изменить ее на:

Для того, чтобы заботиться о втором пункте, откройте следующий файл:

и добавьте следующие строки вверху:

Поздравляем, вы получили себе сервер системного журнала! Вы можете проверить это путем перечисления файлов в каталоге /var/log . Вы должны увидеть файл andreyex.log там в настоящее время.

Клиент Syslog

Устройства Cisco

Для коммутаторов Cisco работающих под управлением CatOS вы можете использовать консоль или телнет в коммутаторе и введите следующие команды для достижения этой цели :

Обратите внимание, что 3 , это вы установите уровень серьезности. Для маршрутизаторов Cisco и коммутаторов работает IOS командами являются:

Обратите внимание, где errors , вы установите уровень серьезности.

Системы Linux

Ротация файлов журнала

Основными параметрами в файле /etc/logrotate.conf являются:

Вы даже можете настроить разделы таким образом, что различные файлы журналов имели различные настройки. Обратитесь к странице LogRotate для деталей.

Просмотр файлов журналов

Если вы указать в файле /etc/syslog.conf , записывать все в файл, вы получите записи всех клиентских устройств, и вы будете иметь только один файл журнала для проверки всех устройств в сети.

Вместо того, чтобы перейти к самой системе Debian, чтобы посмотреть на центральном журнале FLE, вы можете сделать его доступным из любой точки сети через браузер, если Вы имеете установленный Apache на сервере системного журнала. В дополнение к установке Apache вы должны настроить его для обработки SSI (Server-Side Includes).

Затем с помощью редактора nano, создайте новую домашнюю страницу с помощью команды:

(заметим , что s в расширении файла требуется для SSI) и введите в него следующее:

и изменение линии (в разделе 2):

и выйти из редактора с сохранением файла. Обязательно, чтобы переместить index.shtml в раздел / logs и измените файл /etc/syslog.conf , так чтобы файл журнала andreyex также сохраняkcz в раздел /logs . Для целb тестирования сделать cktle.ott:

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Читайте также: