Rsyslog настройка на прием логов centos

Обновлено: 08.07.2024

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

Данное руководство рассматривает различные части механизма журналирования Linux.

Примечание: Команды данного руководства были протестированы на простых установках CentOS 6.4, Ubuntu 12 и Debian 7.

Стандартные логи

По умолчанию журналы в Linux хранятся в /var/log.

Для просмотра списка журналов, находящихся в данном каталоге, используйте команду ls -l /var/log.

В системе CentOS это выглядит так:

Просмотр логов

В каталоге /var/log находится несколько общих журналов:

  • wtmp
  • utmp
  • dmesg
  • messages
  • maillog или mail.log
  • spooler
  • auth.log или secure

Файлы wtmp и utmp отслеживают пользователей, вошедших и покинувших систему. Содержимое данных журналов нельзя читать с помощью простой команды «cat», для этого есть специальные команды, с которыми теперь нужно ознакомиться.

Чтобы узнать, кто в текущий момент находится на сервере Linux, нужно использовать команду «who». Она извлекает информацию из /var/run/utmp (в CentOS и Debian) или из /run/utmp (в Ubuntu).

Это пример ее работы в CentOS:

Команда «sysadmin» выводит историю входа пользователей:

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

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

Результат имеет примерно такой вид:

reboot system boot 2.6.32-358.el6.x Mon Dec 9 10:27 - 10:47 (00:19)
reboot system boot 2.6.32-358.el6.x Fri Dec 6 16:37 - 10:47 (2+18:10)
reboot system boot 2.6.32-358.el6.x Fri Dec 6 16:28 - 16:36 (00:08) reboot system boot 2.6.32-358.el6.x Fri Dec 6 11:06 - 16:36 (05:29)
reboot system boot 2.6.32-358.el6.x Mon Dec 2 17:00 - 16:36 (3+23:36)
reboot system boot 2.6.32-358.el6.x Fri Nov 29 16:01 - 16:36 (7+00:34)
reboot system boot 2.6.32-358.el6.x Fri Nov 29 15:43 - 16:36 (7+00:53)
.
.
wtmp begins Fri Nov 15 16:11:54 2013

Чтобы узнать время последнего входа в систему, используйте lastlog:

Результат на CentOS выглядит примерно так:

Username Port From Latest
root tty1 Mon Dec 9 10:44:30 +1100 2013
bin **Never logged in**
daemon **Never logged in**
adm **Never logged in**
lp **Never logged in**
sync **Never logged in**
shutdown **Never logged in**
halt **Never logged in**
mail **Never logged in**
uucp **Never logged in**
operator **Never logged in**
games **Never logged in**
gopher **Never logged in**
ftp **Never logged in**
nobody **Never logged in**
vcsa **Never logged in**
saslauth **Never logged in**
postfix **Never logged in**
sshd **Never logged in**
sysadmin pts/1 10.0.2.2 Mon Dec 9 10:31:50 +1100 2013
dbus **Never logged in**
joeblog pts/2 10.0.2.2 Mon Dec 9 10:39:24 +1100 2013

Для просмотра содержимого текстовых журналов можно использовать команды «cat», «head» или «tail».

В приведенном ниже примере просматриваются последние 10 строк журнала /var/log/messages на Debian:

$ sudo tail /var/log/messages

Dec 16 01:21:08 debian kernel: [ 9.584074] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
Dec 16 01:21:08 debian kernel: [ 9.584074] Bluetooth: BNEP filters: protocol multicast
Dec 16 01:21:08 debian kernel: [ 9.648220] Bridge firewalling registered
Dec 16 01:21:08 debian kernel: [ 9.696728] Bluetooth: SCO (Voice Link) ver 0.6
Dec 16 01:21:08 debian kernel: [ 9.696728] Bluetooth: SCO socket layer initialized
Dec 16 01:21:08 debian kernel: [ 9.832215] lp: driver loaded but no devices found
Dec 16 01:21:08 debian kernel: [ 9.868897] ppdev: user-space parallel port driver
Dec 16 01:21:11 debian kernel: [ 12.748833] [drm] Initialized drm 1.1.0 20060810
Dec 16 01:21:11 debian kernel: [ 12.754412] pci 0000:00:02.0: PCI INT A -> Link[LNKB] -> GSI 11 (level, low) -> IRQ 11
Dec 16 01:21:11 debian kernel: [ 12.754412] [drm] Initialized vboxvideo 1.0.0 20090303 for 0000:00:02.0 on minor 0

Демон rsyslog

Конфигурационный файл rsyslog

Демон rsyslog получает конфигурации из файла «rsyslog.conf», который находится в каталоге /etc.

Этот файл можно найти в rsyslog.d/50-default.conf в Ubuntu.

Под двумя частями строк подразумеваются селектор и действие (selector и action). Они разделяются пробельным символом.

Вот отрывок из файла rsyslog.conf на CentOS:

Чтобы понять, что все это значит, нужно рассмотреть типы объектов, которые распознает Linux:

Ниже приведен список приоритетов по возрастанию:

Изучите следующую строку из файла:

Объекты и приоритеты могут быть связаны в несколькими способами.

Несколько объектов в одной строке нужно разделить запятой.

Несколько селекторов в одной строке также разделяются запятой.

Отмеченное звездочкой действие объединяет всех пользователей.

К примеру, об этом говорит запись в файле rsyslog.conf на CentOS:

По возможности проверьте, что говорит rsyslog.conf на других системах Linux. Вот отрывок из Debian:

Конфигурации для rsyslog могут исходить также от других пользовательских файлов. Эти файлы пользовательских конфигураций, как правило, расположены в разных каталогах в /etc/rsyslog.d. Файл rsyslog.conf включает эти каталоги, используя директиву «$IncludeConfig».

Так это выглядит в Ubuntu:

Для этого нужно будет сделать следующее:

  • Задать спецификацию в файле /etc/rsyslog.conf;
  • Перезапустить демон rsyslog;
  • Проверить конфигурацию с помощью утилиты «logger».

В следующем примере внесены две строки в файл rsyslog.conf на CentOS. Как видите, обе они исходят от объекта local4 и имеют разные приоритеты.

Затем нужно перезапустить сервис, чтобы обновить данные файла:

.
.
-rw------- 1 root root 0 Dec 9 11:21 local4crit.log
-rw------- 1 root root 72 Dec 9 11:22 local4info.log

Ротация лог-файлов

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

Linux использует понятие «ротации» журналов вместо их очистки или удаления. При ротации создается новый каталог, а старый переименуется и при необходимости сжимается. Таким образом, журналы имеют несколько старых версий. Эти файлы будут возвращаться в течение определенного периода времени в виде так называемых backlog-ов. Как только будет получено определенное количество backlog-ов, новая ротация удалит самый старый журнал.

Ротация выполняется при помощи утилиты «logrotate».

Конфигурационный файл logrotate

Как и rsyslog, logrotate зависит от конфигурационного файла по имени logrotate.conf, который находится в /etc.

Вот что находится в данном файле на Debian:

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

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

Пользовательские конфигурации ротации журналов содержатся в каталоге «etc/logrotate.d». также они включены в logrotate.conf с помощью директивы include. К примеру, Debian показывает такое содержание данного каталога:

$ ls -l /etc/logrotate.d
total 44
-rw-r--r-- 1 root root 173 Apr 15 2011 apt
-rw-r--r-- 1 root root 79 Aug 12 2011 aptitude
-rw-r--r-- 1 root root 135 Feb 24 2010 consolekit
-rw-r--r-- 1 root root 248 Nov 28 2011 cups
-rw-r--r-- 1 root root 232 Sep 19 2012 dpkg
-rw-r--r-- 1 root root 146 May 12 2011 exim4-base
-rw-r--r-- 1 root root 126 May 12 2011 exim4-paniclog
-rw-r--r-- 1 root root 157 Nov 16 2010 pm-utils
-rw-r--r-- 1 root root 94 Aug 8 2010 ppp
-rw-r--r-- 1 root root 515 Nov 30 2010 rsyslog
-rw-r--r-- 1 root root 114 Nov 26 2008 unattended-upgrades

Содержание rsyslog показывает, как вернуть логи в исходное состояние:

$ cat /etc/logrotate.d/rsyslog
/var/log/syslog
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
invoke-rc.d rsyslog reload > /dev/null
endscript
>
/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
rotate 4
weekly
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
invoke-rc.d rsyslog reload > /dev/null
endscript
>

Как видите, файл «syslog» будет повторно инициализирован каждый день. Другие журнальные файлы ротируются каждую неделю.

Также стоит упомянуть директив postrotate. Она указывает действие, которое происходит после того, как ротация журналов завершена.

Тестирование ротации

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

Чтобы продемонстрировать, как это работает, ниже приведен неполный список журнальных файлов в каталоге /var/log на CentOS:

Неполное содержимое файла logrotate.conf выглядит так:

Затем запустите команду logrotate:

Заключение

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

Но рано или поздно файлы логов становятся слишком большими, они занимают все место на диске и это приводит к новым ошибкам. Поэтому важно контролировать, как и куда сохраняются файлы журналов. На протяжении многих лет в операционной системе Linux используется сервис Syslog для управления логами. В современных версиях применяется его модификация - rsyslog.

В этой статье мы рассмотрим как выполняется установка и настройка rsyslog, рассмотрим основы настройки локального логирования в Linux, а также пойдем дальше и настроем удаленный сбор логов. Эта информация также поможет вам улучшить свои навыки поиска ошибок и неисправностей.

Что такое Rsyslog?

Развитие rsyslog началось в 2004 году, в качестве форка используемого тогда сервиса Syslog. Программа очень быстро набрала популярность среди пользователей и сейчас она поставляется по умолчанию во многих дистрибутивах Linux.

Вот основные возможности:

  • Многопоточность;
  • TCP, SSL, TLS, RELP;
  • Поддержка MySQL, PostgreSQL, Oracle;
  • Фильтрация журналов;
  • Полностью настраиваемый формат вывода.

Как происходит логирование?

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

Например, ядро Linux определяет такие уровни логов, или как мы будем называть их ниже - приоритеты:

Подобные уровни лога поддерживаются в большинстве программ, которые ведут логи.

Настройка Rsyslog в Linux

Все настройки Rsyslog находятся в файле /etc/rsyslog.conf и других конфигурационных файлах из /etc/rsyslog.d/. Вы можете посмотреть существуют ли у вас эти файлы выполнив:

Основной конфигурационный файл - /etc/rsyslog.conf, в нем подключены все файлы из папки /etc/rsyslog.d/ с помощью директивы IncludeConfig в самом начале файла:

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

Синтаксис конфигурационного файла очень прост:

$ переменная значение

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

В этом участке загружаются все необходимые модули программы. Существуют четыре типа модулей:

Дальше идут глобальные директивы:

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

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

FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022

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

Выше была более общая настройка syslog, ну а теперь самое интересное - правила сортировки логов. Вот набор правил по умолчанию:

Источник и приоритет нечувствительны к регистру. Также заметьте, что приоритеты уровней error, warn и panic больше не используются, так как считаются устаревшими. В целом, в качестве источников вы можете использовать:

  • auth;
  • authpriv;
  • cron;
  • daemon;
  • kern;
  • lpr;
  • mail;
  • mark;
  • news;
  • security (эквивалентно auth);
  • syslog;
  • user;
  • uucp;
  • local0 . local7;

А в качестве приоритетов вы можете применить:

  • emerg (раньше panic);
  • alert;
  • crit;
  • error (раньше err);
  • warn (раньше warning);
  • notice;
  • info;
  • debug;

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

: поле, сравнение, "значение" путь_к_файлу

В качестве операции сравнения вы можете использовать такие варианты:

  • contains — поле содержит указанное значение;
  • isequal — поле должно быть идентичным значению;
  • startswith — поле должно начинаться со значения;
  • regex — сравнивает поле с регулярным выражением.

:syslogtag, isequal, "giomanager:" /var/log/giomanager.log
& stop

Кроме того, можно использовать более простой синтаксис, в виде выражения if. Вот основной синтаксис:

if $поле сравнение 'значение' then файл

Здесь используются те же самые компоненты, только выглядит немного проще. Например:

if $syslogtag == 'giomanager' then /var/log/giomanager.log

Настройка syslog для удаленного логирования

Здесь 514 - это порт, на котором слушает rsyslog. Настройка rsyslog на прием логов заключается в запуске сервиса с модулями imtcp и imudp. Далее, все что нужно для того чтобы получить логи с определенной машины, отфильтровать их из общего потока с помощью фильтров:

if $fromhost-ip contains '192.168.1.10' then /var/log/proxyserver.log

Выводы

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

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

На завершение видео на английском про настройку Logrotate:

Логирование с помощью Rsyslog и Loganalyzer

В статье рассматривается настройка централизованного сбора логов и графического отображения статистики по ним в веб-интерфейсе с помощью пакетов Rsyslog и Loganalyzer на CentOS 7.

Для настройки использовались две машины:

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

Перед установкой Rsyslog установить пакеты libestr и libee.

Установка репозитория mysql

Установка необходимых пакетов.

Добавление в автозагрузку и запуск служб:

Теперь можно установить пакеты rsyslog:

Добавляем в автозагрузку rsyslog и запускаем сервис.

После установки mysql для того, чтобы найти временный пароль для входа с правами администратора выполнить команду:

Т.к. временный пароль хранится в простом текстовом файле /var/log/mysqld.log, для изменения пароля пользователя root в консоли mysql ввести:

Смена пароля пользователя mysql

Смена пароля пользователя mysql

Также, в консоли mysql:

Создание пользователя rsyslog

Создание пользователя rsyslog

Создание базы данных rsyslog

Создание базы данных rsyslog

Создание таблиц

Создание таблиц

Предоставление пользователю rsyslog права доступа к базе данных

Предоставление пользователю rsyslog права доступа к базе данных

Настройка конфигурационного файла /etc/rsyslog.conf.

Открываем файл для редактирования:

Чтобы проверить конфигурационный файл rsyslog, запустите: sudo rsyslogd -N1 В случае возникновения проблем, rsyslog будет о них писать в /var/log/messages, либо о них будет указано в выводе команды service rsyslog status.

Проверка конфигурационного файла rsyslog

Проверка конфигурационного файла rsyslog

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

Установка LogAnalyzer

Скачивание, распаковка loganalyzer

Скачивание, распаковка loganalyzer

Создаем директорию, копируем файлы LogAnalyzer.

Последняя команда создаст пустой файл config.php и предоставит право записи в него. Далее необходимо запустить

для проверки создания файла config.php. Настройка через браузер внесет изменения в этот файл.

Создание пользователя и базы данных в mysql:

Создание базы данных LogAnalyzer

Создание базы данных LogAnalyzer

Дальнейшие настройки производятся в веб. В браузере необходимо перейти по адресу ip_адрес_сервера/log.

Нажать далее (Next)

Проверка прав на запись для файла config.php

Настройка базовой конфигурации

Проверка создания таблиц

Создание учетной записи для входа в LogAnalyzer

Переходим по ссылке для авторизации и вводим данные ранее созданной учетной записи для входа в LogAnalyzer

Авторизация LogAnalyzer

Авторизация LogAnalyzer На сервере и клиенте в файерволе также необходимо будет разрешить прохождение udp и tcp трафика по 514 порту, отключить selinux, установить часовой пояс:

И проверить установленное время и часовой пояс:

Синхронизация времени

Синхронизация времени

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

На клиенте также устанавливаем Rsyslog

Для отправки всех логов.

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

Добавляем в конфигурационный файл

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

Просмотр статистики в веб-интерфейсе LogAnalyzer

Просмотр статистики в веб-интерфейсе LogAnalyzer

Filter ‘client1’ only – Фильтровать вывод только по значению ‘client1’

Show all except ‘client1’ – Вывести все, исключая ‘client1’

Список доступных вариантов фильтрации по хосту

Список доступных вариантов фильтрации по хосту

Возврат к выводу без фильтров

Возврат к выводу без фильтров

date

17.09.2019

directory

Linux

comments

Один комментарий

LogAnalyzer – это web приложение, которое предназначено для просмотра логов системных событий, полученных от syslog, при помощи веб-браузера. Rsyslog – это приложение, представляющее собой расширение стандартного демона syslog, одной из особенностью которого является возможность сохранять события в БД MySQL. При помощи этих двух замечательных программ, возможно создать централизованный сервер, куда будут перенаправляться все события от различных устройств в сети, который бы реализовывал функции по удобному архивированию и поиску событий по всем событиям на всех сетевых устройствах в периметре сети. В данной статье я опишу процедуру установки на Linux CentOS службы rsyslog (сбор и агрегирование событий syslog) и LogAnalyzer (предоставляет дружественный интерфейс для просмотра и поиска по собранным логам).

Сначал необходимо установить ряд дополнительных пакетов RPM. Т.к. службы LogAnalyzer, Rsyslog и MySQL будут работать на одном сервере, нужно установить следующие пакеты с помощью yum:

Теперь нужно удостоверится, что MySQL и Apache настроены на автоматический запуск, после чего запустим их:

По умолчанию, пользователь root БД MySQL, имеет пустой пароль, поэтому следует обезопасить конфигурацию, задав новый пароль:

Далее импортируем схему базы данных rsyslog в MySQL. В зависимости от версии rsyslog, измените путь к файлу “createDB.sql”.

Хорошим тоном считается ограничение доступа приложений к базе данных, поэтому мы создадим специального пользователя для доступа к БД rsyslog. Для ещё большего затягивания настроек безопасности, можно создать отдельные учетные записи для rsyslog и LogAnalyzer. Необходимо предоставить доступ пользователя rsyslog к базе MySQL только с локального интерфейса localhost. Также мы должны выполнить MySQL команду “flush privileges” для немедленного применения всех прав.

Сейчас нужно выключить существующую службу syslog и включить rsyslog:

Или скачать LogAnalyzer прямо с Linux сервера (должен быть установлен wget):

Распакуем файлы LogAnalyzer:

Теперь нужно скопировать файлы LogAnalyzer в каталог веб-сервера Apache (стандартный конфиг).

Перейдите в созданный каталог LogAnalyzer, запустите скрипт configure.sh. В результате создастся пустой файл конигурации config.php, который наполнится в следующих шагах.

В середине окна выберите ссылку “Click here to Install”.

Настройте параметры отображения журналов и опять нажмите Next.

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

В том случае, если вы настроили все правильно, перед вами появится главная страница LogAnalyzer, на которой по мере получения будут отображаться логи. Можете попробовать сгенерировать различные системные события и посмотреть что будет происходить на страничке LogAnalyzer. Т.к. я настроил логирование событий типа “authpriv”, это означает, что в лог будут попадать такие события, как вход/выход пользователя, или же вызов команды переключения пользователя (su).

Настройка Rsyslog для удаленного сбора логов

Не забудьте перезапустить службу rsyslog на центральном сервере ведения логов:

Следующий этап – настройка удаленных клиентов для отправки событий на центральный сервер rsyslog. Если на клиенте запущен rsyslog, в файл “/etc/rsyslog.conf” необходимо добавить, например, следующую строку:

Перезапустите сервер rsyslog на клиенте и попробуйте зайти/выйти на данную систему. Если вы ничего не упустили, на веб странице LogAnalyzer появится соответствующее событие!

Также рекомендую познакомится со статьей об организации центрального сервера логов на базе Windows Server 2008

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