- Системное администрирование Linux
- Настройка Rsyslog сервера
- Фильтры источников и приоритета
- Фильтры базирующиеся на свойствах
- Фильтры основанные на выражениях:
- Шаблоны
- Цетрильный сервер Rsyslog
- Настройка rsyslog для хранения логов на удаленном сервере
- Подготовка сервера
- Время
- Брандмауэр
- SELinux
- Установка и запуск rsyslog
- Настройка сервера
- Настройка клиента
- Все логи
- Для определенных категорий
- Для определенного уровня
- Аудит определенного лог-файла
- Настройка клиента
- Настройка сервера (фильтрация сообщений)
- Лог определенного приложения
- Чтение логов на сервере
Системное администрирование Linux
2017-12-22 17:41:04 15312 2
Настройка Rsyslog сервера
Логирование одно из самых важных задач системного администрирования.В Линукс системах логи принято хранить в файлах, так называемых файлах логов.Файлы логов — это файлы ,которые хранят сообщения о событиях произошедших в системе и обычно используются системными администраторами для определения проблем произошедших на машине. Обычно все лог файлы хранятся в директории /var/log. Там находятся несколько типов лог файлов хранящих различные сообщения, такие как файлы с системными событиями, файлы относищиеся к сообщения безопасности, пользовательские логи, логи планировщика и многие другие. Большинство лог файлов контролируется демоном rsyslog. Однако в новых дистрибутивах основанных на systemd, за логирование отвечает демон journald, который хранит логи в бинарном формате в оперативной памяти, хотя есть возможность сохраниния логов и на постоянной основе на жестком диске.
Мы будем рассматривать настройку и использование демона Rsyslog.
Rsyslog сервер может быть сконфигурирован в виде клиент-серверной модели, отправлять на другие сервера и получать с других удаленных серверов логи по сети по протоколам TCP и UDP. В качестве удаленных серверов могут использоваться не только Линукс машины, но и различные сетевые устройства, роктеры, свитчи и т.д. При этом Rsyslog может работать как сервер и как клиент одновременно. По-умолчанию используется порт — 514.
Rsyslog фильтрует сообщения для дальнейшего управления. Используются следующие фильтры:
- facility and priority (Источники и приоритеты);
- Фильтры свойств;
- Фильтры основанные на выражениях
Фильтры источников и приоритета
- auht/authpriv — сообщения процессов аутентификации;
- cron — логи имеющие отношения к планировщику;
- daemon — логи запущенных демонов (сервисов);
- kernel — логи ядра;
- mail — логи почты;
- syslog — логи имеющике отношение к syslog и другим сервисам;
- lpr — логи печати;
- local0-local7 — выделенные для административных целей.
Priority (Приоритеты) — уровень приоритетности (важности) сообщений
- emerg (0) — экстренные;
- alert (1) — тревожные;
- err (3) — ошибки;
- warn (4) — предупреждения;
- notice (5) — уведомления;
- info (6) — информация;
- debug (7) — наивысший уровень (отладка)
Примеры использования фильтров:
Все лог сообщения сгенерированные подсистемой ядра с любым уровнем важности записывать в файл /var/log/kernel.log
Отбрасывает все лог сообщения и прекращает их обработку.
Фильтровать и записывать в файл все лог сообщения от источника «daemon» с уровнем важности «err»
Фильтры базирующиеся на свойствах
- contains — проверяет содержится ли строка, представленная в значении, в свойстве;
- isequal — проверяет значение и свойство, они должные быть полностью идентичны;
- startswith — проверяет находится ли значение в «value» в начале свойства;
- regex — сравнение с помощью регулярных выражений;
- ereregex — использование расширенных регулярных выражений;
- isempty — является ли свойство пустым (не имеющим значения).
Наиболее полезные типы свойств:
- msg — тело сообщения;
- hostname — имя хоста отправившего сообщение;
- source — алиас hostname;
- fromhost — имя хоста от которого было полученно сообщение (если имя удалось разрешить);
- fromhost-ip — тоже самое, что и fromhost только всегда ip-адрес;
- syslogtag — TAG сообщения;
- programname — имя программы;
- syslogfacility — источник лог сообщения в форме цифры;
- syslogfacility-text — источник лог сообщения в текстовой форме;
- syslogseverity — уровень важности в цифровом виде;
- syslogseverity-text — уровень важности в текстовом виде;
- pri — источник и приоритет в виде числа;
- pri-text — источник и приоритет в текстовом формате;
- timegenerated — время когда сообщение было полученно.
Если в теле сообщения встречается данный текст «DHCPREQUEST(lxdbr0)», то записывать сообщение в файл /var/log/syslog
Если ip-адрес [хоста от которого полученно сообщение «192.168.1.1», то записать сообщение в файл /var/log/router.log
Если имя хоста содержит текст «ubuntu», то записать его в файл /var/log/ubuntu-servers.log
Вообщем можно создавать большое разнообразие различных фильтров, для обработки лог сообщений
Фильтры основанные на выражениях:
Если facility равно «local1» и cообщение содержит «mysql» то записывать его в файл /var/log/db.log
Если сообщение содержит в себе текст «666» то записать его в файл «/var/log/666.log», если нет содержит то записать в файл «/var/log/non_666.log»
Шаблоны
Шаблоны можно использовать для динамической генерации имен лог файлов
Сначала задаем шаблон с именем «remote_logs» потом указываем что запись лог сообщений необходимо вести в файл «/var/log/%HOSTNAME%/%PROGRAMNAME%.log», где %HOSTNAME% и %PROGRAMNAME% это свойства, грубо говоря переменные, которые зависят от источника лог сообщений. Потом с помощью знака ? и имени шаблона указываем, привязываем шаблон к фильтру сообщений. Получаем, что сообщения с источником сервисов писать в лог файл с названием как у службы и находящийся в директории с именем как у соответсвующего хоста.
Цетрильный сервер Rsyslog
Rsyslog сервер можно настроить на прием лог сообщений от других хостов. Для этого необходимо внести изменения в конфигурационный файл /etc/rsyslog.conf
Для работы по протоколу UDP, раскоментировать строки
Для работы по протоколу TCP
Возможно работа одновременного по обоим протоколам.
После перезапуска сервер сможет принимать логи от удаленных хостов и обрабатывать их согласно настроенным фильтрам.
Отправка логов на кдаленный Rsyslog сервер.
Для отправки логов на другой сервер необходимо вместо лог файла указать конструкцию с @ или @@ и ip-адрес сервера и порт:
Отправлять все логи на 172.20.1.58 по протоколу UDP
Отправлять все логи на 172.20.1.58 по протоколу TCP
Источник
Настройка rsyslog для хранения логов на удаленном сервере
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
. либо отключить его командами:
sed -i ‘s/^SELINUX=.*/SELINUX=disabled/g’ /etc/selinux/config
Установка и запуск 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):
| № | Категория | Описание |
|---|---|---|
| 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:
systemctl restart nginx
Чтение логов на сервере
В нашем примере сервер настроен на хранение логов по маске /var/log/rsyslog/%HOSTNAME%/%PROGRAMNAME%.log. Это значит, что в каталоге /var/log/rsyslog должны появляться папки с именами компьютеров, которые отправляют на сервер свои логи. Посмотреть список данных папок можно командой:
Чтение логов выполняется обычной командой cat или tail, например:
* здесь мы прочитаем лог для cron на компьютере comp1.
Источник