- Настройка rsyslog для хранения логов на удаленном сервере
- Подготовка сервера
- Время
- Брандмауэр
- SELinux
- Установка и запуск rsyslog
- Настройка сервера
- Настройка клиента
- Все логи
- Для определенных категорий
- Для определенного уровня
- Аудит определенного лог-файла
- Настройка клиента
- Настройка сервера (фильтрация сообщений)
- Лог определенного приложения
- Чтение логов на сервере
- Централизованный сбор, хранение и просмотр Syslog в Debian Linux
- Отправка с клиентских машин на центральный сервер
- Протокол доставки
- Приём на сервере
- Хранение в MySQL
- Просмотр в LogAnalyzer
- Подготовка SQL-баз для LogAnalyzer
- Настройка LogAnalyzer
Настройка rsyslog для хранения логов на удаленном сервере
Опубликовано: 19.07.2019
Rsyslog позволяет настроить отправку логов для определенного приложения на централизованный сервер. Это может значительно упростить процесс контроля за событиями на компьютерах в сети. Его настройка на различных системах на базе Linux, практически, не отличается. В данной инструкции мы рассмотрим процесс установки и настройки на примере CentOS и Ubuntu.
Подготовка сервера
На сервере нужно, предварительно, выполнить следующие настройки.
Время
Для правильной фиксации времени логов, необходимо настроить его синхронизацию.
Сначала задаем правильный часовой пояс:
\cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
* в данном примере мы использовали московское время.
Затем устанавливаем и запускаем chrony.
а) на системе CentOS / Red Hat:
б) на системе Ubuntu / Debian:
Брандмауэр
Если используется брандмауэр, необходимо открыть порты TCP/UDP 514.
firewall-cmd —permanent —add-port=514/
iptables -A INPUT -p tcp —dport 514 -j ACCEPT
iptables -A INPUT -p udp —dport 514 -j ACCEPT
SELinux
Проверяем, работает ли в нашей системе SELinux:
. необходимо либо настроить SELinux:
semanage port -m -t syslogd_port_t -p tcp 514
semanage port -m -t syslogd_port_t -p udp 514
. либо отключить его командами:
sed -i ‘s/^SELINUX=.*/SELINUX=disabled/g’ /etc/selinux/config
Установка и запуск rsyslog
Установить rsyslog необходимо как на сервер, так и клиентские компьютеры. В зависимости от операционной системы сама установка будет выполняться одной из команд.
а) для систем на базе RPM (Red Hat / CentOS):
б) для систем на базе deb (Debian / Ubuntu):
После установки разрешаем автозапуск службы и стартуем ее:
Настройка сервера
Открываем конфигурационный файл:
Снимаем комментарии со следующих строк:
$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):
№ | Категория | Описание |
---|---|---|
0 | kern | Сообщения, отправляемые ядром |
1 | user | Пользовательские программы |
2 | Почта | |
3 | daemon | Сервисы (демоны) |
4 | auth | Безопасность/вход в систему/аутентификация |
5 | syslog | Сообщения от syslog |
6 | lpr | Логи печати |
7 | news | Новостные группы (usenet) |
8 | uucp | Unix-to-Unix CoPy (копирование файлов между компьютерами) |
9 | cron | Планировщик заданий |
10 | authpriv | Безопасность/вход в систему/аутентификация — защищенный режим |
11 | ftp | Логи при передачи данных по FTP |
12 | ntp | Лог службы синхронизации времени (существует не везде) |
13 | security, log audit | Журнал аудита (существует не везде) |
14 | console, log alert | Сообщения, отправляемые в консоль (существует не везде) |
15 | solaris-cron, clock daemon | Cron в solaris (существует не везде) |
16-23 | local0 — local7 | Зарезервированы для локального использования. Уровень серьезности определяется числом от 0 до 7. |
Для определенного уровня
Если мы хотим передавать только сообщения об ошибках, добавляем строку в файл конфигурации rsyslog:
Перезапускаем сервис логов:
systemctl restart rsyslog
Возможные категории для логов (severity):
№ | Уровень | Расшифровка |
---|---|---|
0 | emerg | Система не работает (PANIC) |
1 | alert | Серьезная проблема, требующая внимания |
2 | crit | Критическая ошибка |
3 | err | Ошибка (ERROR) |
4 | warning | Предупреждение (WARN) |
5 | notice | Важное информационное сообщение |
6 | info | Информационное сообщение |
7 | debug | Отладочная информация |
Аудит определенного лог-файла
Мы можем настроить слежение за изменением определенного лога и передавать их на сервер. Для этого нужно настроить и сервер, и клиента.
Настройка клиента
Создаем новый конфигурационный файл:
$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
Настройка сервера (фильтрация сообщений)
На сервере нам нужно фильтровать все сообщения категории local6 (такую категорию мы выбрали, когда настроили клиента) и перенаправлять их в нужных нам файл. Открываем на редактирование конфигурационный файл 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:
Чтение логов на сервере
В нашем примере сервер настроен на хранение логов по маске /var/log/rsyslog/%HOSTNAME%/%PROGRAMNAME%.log. Это значит, что в каталоге /var/log/rsyslog должны появляться папки с именами компьютеров, которые отправляют на сервер свои логи. Посмотреть список данных папок можно командой:
Чтение логов выполняется обычной командой cat или tail, например:
* здесь мы прочитаем лог для cron на компьютере comp1.
Централизованный сбор, хранение и просмотр Syslog в Debian Linux
В качестве стандартного syslog-сервиса в Debian используется rsyslog. Дальше рассказывается, как отправлять копии журналов на сервер, сохранять их в SQL-базе и просматривать через удобный Веб-интерфейс.
Отправка с клиентских машин на центральный сервер
Создаём файл /etc/rsyslog.d/send2server со строкой:
*.* @hostname-или-fqdn-или-ip-адрес-сервера
Например:
*.* @netlog.lan
Чтобы не собирать отладочный мусор, можно заменить «*.*» на «*.notice» или «*.warning».
Перечитываем настройки: /etc/init.d/rsyslog restart
Протокол доставки
- по умолчанию используется udp/514
- если указать «@@» вместо «@», то вместо стандартного UDP станет использоваться TCP (нестандартное расширение!).
- если нужна 100% надёжность доставки, вместо udp/tcp следует использовать модули omrelp на клиенте и imrelp на сервере.
Приём на сервере
В /etc/rsyslog.conf должны быть раскомментированы строки:
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
Перечитываем настройки: /etc/init.d/rsyslog restart
Хранение в MySQL
- apt-get install rsyslog-mysql
- аккуратно отвечаем на все задаваемые вопросы,
- если не считать паролей, достаточно подтверждать предлагаемые значения,
- настройки сохраняются в /etc/rsyslog.d/mysql.conf
Просмотр в LogAnalyzer
- Страница скачивания: loganalyzer.adiscon.com/downloads (в пакетах Debian отсутствует)
- Установка зависимостей: apt-get install libapache2-mod-php5
- Из архива с исходными текстами внутрь /var/www требуется скопировать папку ./src и переименовать её в «loganalyzer».
- Рекомендуемое исправление для ./include/functions_common.php, чтобы убрать предупреждения из логов Apache:
— loganalyzer/include/functions_common.php.orig 2011-11-14 14:32:32.000000000 +0200
+++ loganalyzer/include/functions_common.php 2011-11-16 02:05:58.982834986 +0200
@@ -1163 +1163,2 @@
— $content[‘EXTRA_METATAGS’] .= ‘/>’;
+ if (array_key_exists($content[‘HeaderDefaultEncoding’]))
+ $content[‘EXTRA_METATAGS’] .= ‘/>’; - Создание пустого файла конфигурации, будет заполнен инсталлятором:
touch config.php
chmod 666 config.php
Подготовка SQL-баз для LogAnalyzer
SQL-таблицу Syslog.SystemEvents стандартного формата LogAnalyzer автоматически дополняет собственными столбцами, но для этого потребуется давать ему слишком большие привилегии. Чтобы разрешить ему только SELECT, создадим столбцы вручную:
ALTER TABLE `SystemEvents` ADD `processid` varchar(60) NOT NULL DEFAULT »;
ALTER TABLE `SystemEvents` ADD `checksum` int(11) UNSIGNED NOT NULL DEFAULT ‘0’;
Настройка LogAnalyzer
- Открываем netlog.lan/loganalyzer/install.php и проходим все шаги.
- Формат syslog-базы = MonitorWare.
- Имя базы Syslog и таблицы SystemEvents являются регистрозависимыми.