Rsyslog на Debian, настройка сервера сбора логов

22 сентября, 2012 Рубрики: Linux, Syslog, Настройка сервера Linux

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

Введение rsyslog

Как я уже сказал, rsyslog стал дефолтным пакетом в большинстве дистрибутивов Linux (возможно, во всех). Rsyslog полностью соответствует протоколу syslog, описанному в RFC syslog, а так же содержит некоторые дополнительные фичи. Такие как TCP транспорт, фильтрацию и сортировку сообщений, хранение сообщения в СУБД, шифрование  и мн.др. В статье я постараюсь рассмотреть описание конфигурационного файла, описание управления демоном rsyslogd и типовые примеры конфигураций.

Установка rsyslogd

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

aptitude install rsyslog
# в красной шляпе возможен вариант
yum install rsyslog

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

# файл задает опции, передаваемые демону rsyslogd при запуске
/etc/default/rsyslog
# стартовый скрипт
/etc/init.d/rsyslog
# настройки ротации логов
/etc/logrotate.d/rsyslog
# основной конфиг
/etc/rsyslog.conf
# библиотеки для работы сислога
/usr/lib/rsyslog/*
# бинарник демона, который работает в фоне
/usr/sbin/rsyslogd
# файлы документации
/usr/share/doc/rsyslog/*

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

/dev/log - unix сокет для получения локальных логов
/var/run/rsyslogd.pid - pid файл для хранения id процесса rsyslogd

rsyslog настройка

Перед настройкой какой-либо конфигурации, отличной от той, что используется по умолчанию, необходимо понять логику конфигурационного файла (rsyslog.conf). Структура rsyslog.conf классическая: пустые строки и строки, начинающиеся с # являются комментариями и игнорируются, остальное – параметры в виде $параметр значение. При этом, символ \ в конце строки говорит нам, что это не конец строки и строка продолжается на следующей. Строки, которые содержат ошибки в конфигурации – пропускаются и демон пытается обработать остальные строки (это поведение можно изменить). Итак, конфигурационный файл rsyslog.conf в Debian структурирован по следующему принципу:

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

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

Модули (Modules) rsyslog

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

  • модули ввода – применяются для использования различных источников сообщений, имена начинаются на im (imfile, etc)
  • модули вывода – используются для записи мессаг в различные места (файл, сокет, СУБД…), имена начинаются на om (omsnmp, ommysql, etc)
  • модули парсинга (анализа содержимого) – используются для анализа содержимого (не понял назначение данных модулей…), имена начинаются на pm (pmrfc5424, etc)
  • фильтрационные (фильтрующие) модули – позволяют фильтровать сообщения в соответствии со специальными правилами, имена начинаются на fm
#################
#### MODULES ####
#################
$ModLoad imuxsock # обеспечивает поддержку локальной системы логирования (читай - из /dev/log)
$ModLoad imklog   # обеспечивает поддержку журналирования ядра
#$ModLoad immark  # обеспечивает возможности маркирования сообщений --MARK--
# обеспечивает получение сислог-сообщений через сеть по UDP
#$ModLoad imudp
#$UDPServerRun 514
# обеспечивает получение по TCP
#$ModLoad imtcp
#$InputTCPServerRun 514
<...>

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

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

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

###########################
#### GLOBAL DIRECTIVES ####
###########################
# Задает использование классического timestamp формата (Мес ДД ЧЧ:ММ:СС).
# Для включения unix-формата timestamps, необходимо закомментировать строку.
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
#
# Устанавливает права доступа, владельца и группу по умолчанию для лог-файлов.
$FileOwner root
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
#
# Задает размещение spool и статических файлов (для хранения таких файлов, как очередь сообщений)
$WorkDirectory /var/spool/rsyslog
#
# Инклюдит все конфиги в формате *.conf из каталога /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf

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

Шаблоны (Templates) rsyslog

Очень важной и ключевой особенностью rsyslogd является возможность использования шаблонов. Template позволяет: 1. задавать формат выводимой информации, 2. использовать динамические имена файлов логов на основании какого-либо правила.  На самом деле, все выходные сообщения в rsyslogd формируются на основе шаблонов. Тут может возникнуть соответствующий вопрос – как же вывод формируется, если не указать никаких шаблонов в rsyslog.conf (ведь по умолчанию не указано никаких шаблонов)? Все просто. Имеются некоторые шаблоны (взятые из совместимые со старой версии syslog и статично прописанные в исходники rsyslog). Подтверждение этого дела можно найти в файле исходного кода syslogd.c, поиском по строке “template_” (наткнетесь на /* hardcoded standard templates (used for defaults) */). Шаблоны должны быть заданы до использования в правилах.

Cинтаксис template

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

$template имя_шаблона,описание_шаблона[,опции(по_необходимости)]

Давайте разберем каждый пункт. $template – указывает, что далее пойдет описание шаблона. имя_шаблона – произвольное значение понятно описывающее, что за шаблон и для чего (имя будет использоваться в правилах для обращения к шаблону). опции – может принимать значение sql и sqlstd,  это заставляет отформатировать конечный результат выполнения шаблона в вид, пригодный для MySQL или стандартный SQL соответственно (фактически – заменяет некоторые спецсимволы в syslog сообщении в формат, поддерживаемый SQL-сервером). Опции применяются только для шаблонов для вывода  в sql.

описание_шаблона заключается в кавычки. В шаблонах в кавычках любой текст воспринимается буквально (как есть), кроме того текста, который заключен в знаки процентов (%текст%). Такой текст является переменной и позволяет “получить доступ” к внутреннему содержимому пришедшего сообщения и тем самым добиться всяких веселых фич по модификации ). Так же, в кавычках может использоваться т.н. escape-последовательности в виде обратной косой черты и некоего символа за чертой (например, \n – новая строка, \7 – …).

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

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

%имя_proper[:начало_строки:конец_строки:опции[:fieldname]]%

имя_proper (оно же имя_свойства, оно же имя_переменной) – задает имя свойства (свойство в данном контексте можно рассматривать как некоторое свойство\поле syslog сообщения, проходящего сквозь демона), вот некоторые наиболее используемые свойства rsyslog:

  • msg – тело сообщения
  • hostname – имя хоста\ip из сообщения
  • fromhost – имя хоста, от которого пришло сообщение
  • fromhost-ip – адрес хоста, от которого пришло сообщения (127.0.0.1 для локальных сообщений)
  • syslogtag – имя и номер процесса (” rsyslogd[12125]:”), который выдал сообщение (извлекается из сообщения)
  • programname – имя процесса, который выдал сообщение (извлекается из сообщения)
  • pri – источник и приоритет, в виде числа
  • pri-text – декодированные источник и приоритет (facility.priority, например syslog.emer)
  • syslogfacility – только источник в виде числа
  • syslogfacility-text – только декодированный источник (“local0”)
  • syslogseverity – только приоритет в виде числа
  • syslogseverity-text – только декодированный уровень (“debug”)
  • timegenerated – время получения  (с высоким разрешением)
  • timereported – время, извлечённое из сообщения
  • inputname – имя входного модуля
  • $hour, $minute – текущее время
  • $myhostname – имя хоста обработки
  • и еще хуча

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

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

Далее – опции. Опции позволяют модифицировать переменную в границе от знака процента до знака процента. Можно применять одновременно несколько опций, через запятую. Если указать несколько противоречащих (например 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, соответствует шаблону:

"<%PRI%>1 %TIMESTAMP:::date-rfc3339% %HOSTNAME% %APP-NAME% %PROCID% %MSGID% %STRUCTURED-DATA% %msg%\n\"

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

"%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n\"

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

"%TIMESTAMP% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n\"

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

"<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%\"

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

"<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%\"

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

Каждая строка правил сортировки имеет классический формат, как и в обычном сислоге. Для понимания, что и как, необходимо почитать статью syslog. Кратко: правило состоит из селекотора и действия, разделенных пробелом или табулятором. Селектор в свою очередь состоит из источника и приоритета. Каждое сообщение сверяется с селектором из каждого правила последовательно, если селектор сообщения и правила совпадает, то выполняется указанное действие. При этом, после первого совпадения – обработка не останавливается. Перед действием, мессадж преобразуется в соответствии с шаблоном (шаблон по умолчанию, заданный в соответствующей директиве (заменяющий шаблон по умолчанию), заданный в данном действии шаблон – один из трех).

К стандартным возможностям селекторов syslog добавились некоторые дополнительные возможности (напомню, что классически селектор – это источник.приоритет, он же facility.priority). В rsyslog в качестве селектора можно использовать значения переменных. В rsyslog применение переменных в селекторе называется Filters (фильтры). Выше в статье, а так же в первой статье о syslog описан классический подход к фильтрации на основе источник.приоритет (т.н.“traditional” severity and facility based selectors). Кроме традиционной фильтрации существует следующие виды фильтрации: RainerScript-based filters (фильтрация на основе языка RainerScript – фактически обычный if – then – else), property-based filters (фильтрация на основе свойств сообщения (как в template)). Давайте рассмотрим оба:

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

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

if условие then блок_действий else блок_действий

Соответственно, if, then – это обязательные операторы, определяющие конструкцию условия, else – по необходимости. блок_действий – может содержать одно действие (action), либо вложенный блок условий. Если блок условий содержит несколько действий, то он заключается в скобки. условие – содержит условие отбора сообщений для блока_действий. В условии можно использовать:

  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

фильтрация на основе свойств сообщения (property-based filters)

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

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

Что у нас тут есть: переменная – в соответствии с переменными,(в данном случае – без % или $), действие выполняемое над сообщением. операция_сравнения – может быть:

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

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

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

# экономим ресурсы:
*.=crit /var/log/somefile
& root
& /var/log/criticalmessages
# фильтруем сообщения
*.* /var/log/allmsgs-incl-informational.log
:msg, contains, "informational"  ~ 
*.* /var/log/allmsgs-no-informational.log

то есть в первом варианте, rsyslogd нет необходимости несколько раз сравнивать селектор. Сообщение просто выполняет 3 действия.

Действия (actions)

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

  • /путь/к/файлу – отправить сообщения в простой файл (по умолчанию, rsyslogd умеет сам создавать новые файлы)
    • ?имя_шаблона – вместо классического действия (/путь/к/файлу) в rsyslog можно указывать шаблон, в соответствии с которым будет динамически формироваться новый файл по заданному в шаблоне правилу.
    • ?имя_шаблона;шаблон_фильтра – дополнительно, к шаблону имени файла (?имя_шаблона) возможно преобразовать сообщения поступающие в эти файлы в соответствии с заданным шаблоном фильтра (шаблон_фильтра).
  • |/путь/к/fifo – отправить в именованный канал
  • /dev/терминал или /dev/консоль – отправить  на указанную консоль\терминал
  • @имя-хоста-udp[:порт] – отправить на удаленный хост по UDP
  • @@[модификаторы]имя-хоста-tcp[:порт]– отправить на удаленный хост по TCP, модификаторы указывают:
    • zцифра – задает gzip сжатие отправляемых пакетов с уровнем сжатия заданным цифрой от 0-9 (9-максимальное)
  • список пользователей через запятую – отправить на терминал сообщение указанным пользователям
  • * – отправить всем пользователям (аналог команды wall)
  • :имя_модуля_вывода:параметры_модуля[:имя_шаблона] – отправляет сообщение в модуль вывода с заданными параметрами и заданным шаблоном (по желанию)
  • ~ (тильда) – после данного символа сообщение будет удалено и дальнейшая обработка не продолжится
  • ^имя_программы[;имя_шаблона] – можно написать свой обработчик сообщений, ему на stdin будет отправлено содержимое в соответствии с шаблоном

rsyslog в картинках

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

 архитектура прохождения сообщения rsyslog

В данной схеме я постарался отобразить схему движения сообщения “сквозь” логику работы демона rsyslogd. Давайте попробуем разобраться в последовательности. Итак, сообщение пришло в систему с помощью одного из модулей ввода (сеть, файл, /dev/log …) – оранжевая сноска. Далее, сообщения выстраиваются в главную очередь (если не хватает системных ресурсов ). Очереди rsyslogd это отдельная тема), но для типового понимания этой информации достаточно. Далее, сообщения поступают в обработчик, который использует модули парсинга – фиолетовая сноска. После данного этапа, мессаджи сверяются с фильтрами (читай – с селекторами источник.приоритет), заданными в правилах. Если сообщение подпадает под селектор, то перед применением действия к сообщению применяется соответствующий шаблон (если шаблон для действия не указан, то применяется шаблон по умолчанию, либо тот, который задан в глобальных параметрах). Ну и применяется соответствующее действие. На основании действия, сообщение может быть направлено в соответствующее место, если это место требует применения модуля (например, ommysql, ompgsql), то используются соответствующий модуль вывода.

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

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

Давайте рассмотрим простой конфиг централизованного сервера rsyslog, который будет сортировать файлы логов по ip адресу источника сообщения. Редактировать файлы можно с помощью vim или другого текстового редактора. ip адрес сервера rsyslog примем за 10.0.0.1, на него необходимо натравить всех клиентов syslog. Для корректной работы rsyslogd необходимо разрешить получение syslog сообщений из сети, подключив соответствующий модуль и задав правило, т.к. по умолчанию, UDP и TCP транспорт на сервере отключен (приведу только измененные\добавленные строки):

~ # cat /etc/rsyslog.conf 
<...>
#################
#### MODULES ####
#################
<...>
# раскомментируем параметры подключения модуля, позволяющего собирать информацию по UDP:
$ModLoad imudp
# раскомментируем номер порта для сервера - можно заменить на свой (не забудьте о клиентах)
$UDPServerRun 514

# раскомментируем параметры подключения модуля, позволяющего собирать информацию по TCP (по жаланию):
#$ModLoad imtcp 
# раскомментируем номер порта для сервера (по желанию - можно заменить на свой (не забудьте о клиентах)
#$InputTCPServerRun 514

###########################
#### GLOBAL DIRECTIVES ####
###########################
<...>
###############
#### RULES ####
###############
<...>
# удаленное журналирвание
# Зададим шаблон создания имен файлов (на основании IP адреса клиента) 
$template FILENAME,"/var/log/%fromhost-ip%/syslog.log"

# Укажем сохранять сообщения от любого источника (*) с любым приоритетом (*) в файл, заданный шаблоном
# Например, клиенты (10.0.0.2,10.0.0.3...) будут раскладываться в соответствующие каталоги /var/log/10.0.0.2/syslog.log 
*.*       ?FILENAME

# как вариант, возможно рассмотреть вот такой вид сортировки:
# шаблон, раскидывающий по имени хоста, году, месяц, дню
# $template RemoteHost,"/var/log/%HOSTNAME%/%$YEAR%/%$MONTH%/%$DAY%/syslog.log"
# правило, использующее шаблон
# *.*     ?RemoteHost

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

~ # netstat -nap | grep 514
udp 0 0 0.0.0.0:514 0.0.0.0:* 21017/rsyslogd

Конечно, мы можем не указывать параметры хранения, а лишь раскомментировать параметры $ModLoad imudp и $UDPServerRun 514, тогда rsyslogd будет размещать сообщения в стандартных выходных файлах (messages, syslog, etc), согласно правил по умолчанию. Необходимо учитывать, что указание только загрузки модуля (например $ModLoad imudp) недостаточно для приема сообщений по сети. Обязательно нужно указывать так же и соответствующий порт для прослушки (например, $UDPServerRun 514).

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

Linux (rsyslog)

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

# отправлять от любого источника (*) с любым приоритетом (*) по UDP на 10.0.0.1 
*.*   @10.0.0.1

# отправлять от любого источника (*) с любым приоритетом (*) по TCP на 10.0.0.1 
*.*   @@10.0.0.1

Ну и после этого – рестарт rsyslog. Если нужно настроить разграничение отправки сообщений по приоритетам, то нужно заменить *.* на свое значение в соответствии со статьей syslog, описывающей принципы сортировки.

Cisco

as53xx231#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
as53xx231(config)#logging 10.0.0.1
as53xx231(config)#exit

VMware ESXi

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

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

*.*     @10.0.0.1
# в файерволе необходимо разрешить syslog и сохранить это:
esxcfg-firewall -o 514,udp,out,syslog
esxcfg-firewall -l 
# перезапускаем syslog 
service syslog restart

В последних версиях гипервизора все делается через гуишного клиента. В настройках гипервизора 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х строчек::

# подключение модуля:
$ModLoad ommysql
# отправлять все сообщения в MySQL (вспомните выше  Действия (actions) )
*.* :ommysql:адрес_сервера,имя_базы,имя_пользователя,пароль

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

В качестве веб-интерфейса будем настраивать Loganalizer от adiscon. Установка веб интерфейса довольно проста. Заключается в скачивании архива, распаковке в каталог веб сервера и запуск графического мастера настройки. Итак, отсюда (http://loganalyzer.adiscon.com/downloads) качаем архив с файлами (Например: http://download.adiscon.com/loganalyzer/loganalyzer-3.5.6.tar.gz). Перед настройкой, конечно же должен быть установлен Web сервер и модуль php5 (aptitude install apache2 libapache2-mod-php5). А да, еще php5-gd для отображения отчетов.

~ # # Скачиваем архив:
~ # wget http://download.adiscon.com/loganalyzer/loganalyzer-3.5.6.tar.gz
~ # # распаковываем архив:
~ # tar xf loganalyzer-3.5.6.tar.gz

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

~ # ls -l
итого 12
drwxr-xr-x  3 root root 4096 Сен 20 22:51 .
drwx------ 13 root root 4096 Сен 20 23:01 ..
drwxrwxr-x  5 root root 4096 Сен 10 17:26 loganalyzer-3.5.6
~ # ls -l loganalyzer-3.5.6/
итого 112
-rw-rw-r--  1 root root 41186 Сен 10 17:26 ChangeLog
drwxrwxr-x  2 root root  4096 Сен 20 23:01 contrib
-rw-rw-r--  1 root root 35497 Сен 10 17:26 COPYING
drwxrwxr-x  2 root root  4096 Сен 10 17:34 doc
-rw-rw-r--  1 root root  8449 Сен 10 17:26 INSTALL
drwxrwxr-x 14 root root  4096 Сен 10 17:34 src
~ # # из каталога src нам необходимо скопировать содержимое в /var/www/loganalyzer:
~ # mkdir /var/www/loganalyzer
~ # cp -r loganalyzer-3.5.6/src/* /var/www/loganalyzer
~ # # далее,необходимо создать пустой файл конфигурации, 
~ # # который будет заполнен автоматически - установщиком
~ # touch /var/www/loganalyzer/config.php
~ # # зададим права на запись (после установки эти права можно убрать)
~ # chmod 666 /var/www/loganalyzer/config.php

Далее, пытаемся зайти на http://10.0.0.1/loganalyzer и видим чудо:

rsyslog web интерфейс

жмахаем here

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

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

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

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

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

Странно, но куда то пропало 6 шагов. (это потому что на прошлом шаге мы не выбрали хранение настроек в базе). На данном шаге выбираем источник сообщений (файл, sql) и указываем соответствующие параметры.

установлен rsyslog

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

rsyslog log анализатор

rsyslog отчеты

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

~ # usermod -G adm www-data

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

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

Иногда, когда rsyslog является сетевым сервисом для сбора удаленных логов, хранение сообщений по имени хоста неудобно или непроизводительно или может еще что-то. Чтобы отключить резолвинг ip адресов в хостнеймы, необходимо добавить параметр -x:

~ # cat /etc/default/rsyslog
RSYSLOGD_OPTIONS="-c5 -x"

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

~ # iptables -A INPUT -p udp -s подсеть_источник --dport 514 -i интерфейс -j ACCEPT

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

# если создаете селектор вот такого типа:
if $fromhost-ip startswith '10.0.1.' then /что/то
# стоит обратить внимание на последнюю точку в адресе, 
# иначе под правило подпадут адреса из подсети 10.0.111.0, 10.0.12.0 и другие

Для централизованного сервера сбора логов с сетевых устройств, можно на сетевых устройствах установить источник (facility) в какое-либо значение из local0-local7. Это позволит удобно сортировать сообщения, пример:

# cisco:
net-device-cisco#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
<...>
net-device-cisco(config)#logging facility local2
<...>
# rsyslog-server
local2.*     /var/log/remote-cisco.log
& ~

Таким образом, можно удобно фильтровать локальные сообщения от удаленных.

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

$ModLoad ommail
$ActionMailSMTPServer адрес_smtp
$ActionMailSMTPPort 25
$ActionMailFrom адрес@отправителя
$ActionMailTo адрес@получателя
$template mail_subject,"On host %hostname%, Error-level by serverity"
$template mail_body,"Facility.Serverity: %syslogfacility%.%syslogpriority% at %timegenerated% on host: %HOSTNAME%\r\n %msg%"
$ActionMailSubject mail_subject
# интервал времени (пауза между письмами)
$ActionExecOnlyOnceEveryInterval 10
# фильтр отбора и действие
if     not ($msg contains 'что_то'\
         or $msg contains 'еще_что_то'\
         or $msg contains 'может_еще_что_то' )\
       and ($syslogseverity-text =='err'\
         or $syslogseverity-text =='crit'\
         or $syslogseverity-text =='alert'\
         or $syslogseverity-text =='emerg' )\
then :ommail:;mail_body

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

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

~ # tcpdump -vvv -nn -i интерфейс udp port 514

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

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

https://www.suse.com/releasenotes/x86_64/SUSE-SLES/11-SP2/ – rsyslog внедряется в SuSe
http://www.debian.org/releases/lenny/i386/release-notes/ch-whats-new.en.html#system-changes – rsyslog внедряется в Debian
https://access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/5/html-single/5.2_Release_Notes/index.html#sect-Red_Hat_Enterprise_Linux-Release_Notes-Feature_Updates – rsyslog внедряется в RedHat
http://www.bog.pp.ru/work/syslog.html#linux – очень много русифицированных параметров и директив
http://www.rsyslog.com/doc – документация от разработчика
http://www.rsyslog.com/doc/rsyslog_conf_modules.html – модули rsyslog
http://tools.ietf.org/html/rfc3164 – RFC syslog
http://wiki.rsyslog.com/index.php/Configuration_Samples – примеры конфигураций
http://www.rsyslog.com/tag/more-complex-scenarios/ – многие примеры брал отсюда
http://www.rsyslog.com/doc/property_replacer.html – переменные в конфиге, такие как hostname $year …

Резюме

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

 С Уважением, Mc.Sim!




Теги: , , ,

92 комментария к “Rsyslog на Debian, настройка сервера сбора логов”

  1. Kay
    23 сентября, 2012 at 17:45
    1

    Спасибо…пытаюсь…у Вас самый оригинальный блог…в правой мере -интересный!

    • 23 сентября, 2012 at 18:12
      2

      Спасибо вам.
      Приходите еще!

  2. Алексей
    25 сентября, 2012 at 10:55
    3

    Спасибо! Искал нормальное описание работы этого конфиг файла и настройку срвера лог файлов. Теперь стал хоть немного больше понимать..и у меня наконец получилось ;)

    • 25 сентября, 2012 at 10:58
      4

      Пожалуйста!
      Приходите еще!

  3. lioncub
    9 октября, 2012 at 12:29
    5

    Хотелось бы про tls увидеть…

    • 12 октября, 2012 at 23:45
      6

      Возможно, в некотором будущем появится. Но не обещаю.

  4. morfeus
    20 ноября, 2012 at 15:05
    7

    В разделе “Хранение журнала rsyslog в СУБД MySQL” предложения съехали, приходится угадывать))

    • 22 ноября, 2012 at 23:02
      8

      Ога, спасибо за замечания. Поправил.

  5. Юра
    19 декабря, 2012 at 18:29
    9

    Очень помогла. Спасибо… А так бы я мучился очень долго изучая

  6. joe
    3 февраля, 2013 at 03:40
    10

    Всё-таки непонятно, шаблоны это что: способ изменения сообщений, или механизм отправки в хранилище? Как они применяются к текущему оборабатываемому сообщению, все подряд, или на основании какого-то признака?

    • 4 февраля, 2013 at 21:44
      11

      Правильные вопросы задаешь, joe )
      думаю, что будет правильней сказать, что шаблон – это инструмент упорядочивания форматирования поступающих данных. Грубо говоря, в демон поступают raw-данные, к которым применяется шаблон и на выходе получаются красивые преобразованные читабельные сообщения.
      Порядок применения шаблонов зависит от порядка правил. То есть, если поступившее сообщение подпадает под правило 1, то к нему и применяется шаблон, заданный в правиле 1 (если не задан шаблон, то применяется по-умолчанию). Далее, если сообщение подпадает под правило 2, то к нему применяется шаблон правила 2 и т.д. пока сообщение не пройдет все правила, либо не наткнется на остановку обработки правил в виде символов & ~.

  7. Иван
    26 апреля, 2013 at 18:38
    12

    Статья потрясающе объемная и полезная, хотя то, что искал не нашел… а искал я что-нибудь о том, как сказать rsyslog-серверу хранить собственные логи в файлах в /var/log/, а все остальное, полученное от сетевых устройств и хостов в базе данных! Буду благодарен за помощь всем, кто подскажет!
    Заранее благодарен!

    • 29 апреля, 2013 at 09:19
      13

      Иван, что понимается под “собственные логи”? Логи демона rsyslog или все логи с localhost?

      • Иван
        29 апреля, 2013 at 21:09
        14

        Под “собственными логами” я имел ввиду логи с localhost.

        • 30 апреля, 2013 at 11:55
          15

          Думаю, что примерно так:
          # включить подуль sql:
          $ModLoad ommysql
          # добавить правила, а-ля:
          if $fromhost-ip contains ‘127.0.0.1’ then /var/log/syslog
          #или
          if $fromhost-ip contains ‘localhost’ then /var/log/syslog
          #…в зависимости от того, с какими параметрами запущен демон (есть ли ключ -x).
          # После данного правила добавить
          & ~
          # чтобы остальные правила не применялись к данным сообщениям.
          # Далее, все сообщения, которые не применились по прошлому правилу – направить в Субд.
          *.* :ommysql:адрес_сервера,имя_базы,имя_пользователя,пароль

          Но это очень топорный пример. Прочитайте статью и потренируйтесь и мой пример может быть даполнен Вашими доработками. Кроме того, в зависимости от дистрибутива, процесс настройки может усложняться\упрощаться. Например, в Debian необходимо установить пакет rsyslog-mysql.

          • Иван
            30 апреля, 2013 at 15:39
            16

            Ок, суть понятна – опробую отпишусь… спасибо!

  8. Prostrelov
    24 мая, 2013 at 10:12
    17

    RainerScript не понимает (!)contains. Его следует заменять конструкцией not.
    Блок условий для входящих сообщений syslog нужно размещать раньше блока для локальных сообщений
    и в обязательном порядке экранировать символами каждое правило
    & ~

    Прежде чем стартовать rsyslog в дебаг режиме
    Проверяйте конфиг: rsyslogd -c4 -N 2

    • 24 мая, 2013 at 14:27
      18

      наверно, не каждое правило, а только те, под которые подпадают сообщения и дальнейшая обработка данных сообщений не нужна )

  9. Назар
    24 мая, 2013 at 16:00
    19

    А как вообще выбросить из логов сообщения с демонами:
    named и lwresd ?

  10. Назар
    24 мая, 2013 at 18:45
    20

    Сам уже разобрался )))

    • 27 мая, 2013 at 10:28
      21

      отлично )

  11. Alexander
    10 июля, 2013 at 22:26
    22

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

    • 15 июля, 2013 at 23:33
      23

      Пожалуйста, Alexander
      Приходите еще!

  12. Владимир
    12 декабря, 2013 at 10:36
    24

    настроил шаблон как у вас в примере:$template FILENAME,”/var/log/%fromhost-ip%/syslog.log”
    *.* ?FILENAME
    но файл не создается и в логе вот что:Dec 12 14:40:34 backup rsyslogd-3000: Could not open dynamic file ‘/var/log/10.156.129.22/syslog.log’ [state -3000] – discarding message [try http://www.rsyslog.com/e/3000 ]

  13. Владимир
    12 декабря, 2013 at 11:52
    25

    Linux backup 3.11.0-14-generic #21-Ubuntu SMP Tue Nov 12 17:04:55 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
    пробовал поменять c $PrivDropToGroup syslog yf $PrivDropToGroup adm
    безрезультатно

    • 12 декабря, 2013 at 13:38
      26

      1. Вы рестартуете сервис после правки rsyslog.conf?
      2. Покажите права доступа на каталог /var/log (ls -la /var/ | grep log )
      3. Покажите с какаим правами у вас работает rsyslogd, когда в лог попадает ошибка? (ps axeo command,user,group | grep rsysl )

  14. Medievist
    12 декабря, 2013 at 13:43
    27

    Спасибо тебе добрый человек!

  15. Владимир
    13 декабря, 2013 at 03:27
    28

    я с линксом впервые общаюсь, вынуждено, поэтому прошу не крутить пальцем у моего виска :)
    drwxr-xr-x 12 root root 4096 дек. 13 06:39 log
    я так понимаю надо поменять на syslog?

  16. Владимир
    13 декабря, 2013 at 06:30
    29

    рестарт делал
    root@backup:/var/log# ps axeo command,user,group | grep rsysl
    rsyslogd -c5 -4 -xUPSTART_I syslog adm
    grep –color=auto rsyslTERM root root

    • 16 декабря, 2013 at 12:20
      30

      Как видно, демон rsyslogd работает от пользователя syslog и группы adm. В каталоге /var/log право на создание подкаталогов есть только у пользователя root.
      Для корректной работы rsyslogd (чтобы он смог создавать свои файлы) и чтобы не нарушить работу других демонов, которые пишут в подкаталоги /var/log/*. Необходимо создать какой-либо подкаталог, например /var/log/remote, назначить ему владельца syslog и группу adm и дать права rwxrwxr-x. а в правилах rsyslog указать …/var/log/remote/%fromhost-ip%/syslog.log.

  17. Владимир
    13 декабря, 2013 at 11:04
    31

    поменял владельца командой: chown syslog /var/log
    заработало, но может это неправильно?

  18. Владимир
    17 декабря, 2013 at 03:33
    33

    спасибо. постараюсь разобраться

  19. Владимир
    21 января, 2014 at 05:13
    34

    Добрый день!
    С помощью шаблона создаются файлы с именами по ip адресу ком-ра и помещаются в соответствующую директорию.
    $template FILENAME,”/var/log/switch/%fromhost-ip%/syslog.log”
    В rainerscript, также можно в соответствии с условиями раскидывать файлы по директориям. Что будет приоритетнее или как сделать так чтобы логи раскидывались по директориям в соответствии с ip адресом коммутатора? Допустим в rainerscript я укажу if $fromhostip > ‘10.220.0.0’ and ‘10.220.9.0’ and <10.220.10.0 then /var/log/switch/oktyabrskiy-raion/
    а в шаблоне то так указано $template FILENAME,"/var/log/switch/%fromhost-ip%/syslog.log"
    как все таки решить мои хотелки?

    • 28 января, 2014 at 10:04
      35

      Добрый день. Если я правильно Вас понял, то вам нужно создать шаблон
      $template FILENAME, “/var/log/switch/switch/oktyabrskiy-raion/%fromhost-ip%.log”
      а условие написать приблизительно следующее:
      if $fromhostip contains ’10.220.0.′ and $fromhostip contains ’10.220.9′ and $fromhostip contains 10.220.10 then /var/log/switch/oktyabrskiy-raion/

  20. Борис
    24 января, 2014 at 13:51
    36

    Хорошая статья. Только !contains не работает. Работает такая конструкция
    if ($fromhost-ip startswith ‘192.0.2.’ and not( $msg contains ‘ on-line’ or …) then /var/log/network2.log

    • 28 января, 2014 at 10:12
      37

      Спасибо за информацию. В последних версиях rsyslog многое поменялось в синтаксисе… Возможно, неработоспособность с этим и связана.

  21. Lucio_Fulchi
    27 января, 2014 at 13:13
    38

    Не подскажите,как отключить сообщения от dhcp сервиса DHCPREQUEST on eth0 to 10.255.0.22 {dhcp.hds} port 67 ? постоянно спамин в loganalyzer , в конфиге не чего не включенно что бы писала события dhcp сервера.

    PS спасибо за статью , если бы не поставил syslog то не увидил бы пока не взломали что у меня по ssh пытались подобрать пароль)

    • 28 января, 2014 at 10:25
      39

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

  22. Владимир
    4 февраля, 2014 at 08:15
    40

    Получается вот такая конструкция будет?
    $template FILENAME, «/var/log/switch/switch/oktyabrskiy-raion/%fromhost-ip%.log»
    $template FILENAME, «/var/log/switch/switch/sovetskiy-raion/%fromhost-ip%.log»
    if ($fromhost-ip startswith ’192.0.2.’ and not( $msg contains ‘ on-line’ or …) then /var/log/switch/switch/sovetskiy-raion/
    if ($fromhost-ip startswith ’192.0.3.’ and not( $msg contains ‘ on-line’ or …) then /var/log/switch/switch/oktyabrskiy-raion/

    • 12 февраля, 2014 at 16:15
      41

      Владимир, вы не совсем правильно понимаете семантику…
      Должно быть примерно так:
      _http://pastebin.com/WHg4acDY
      То есть в качестве action вы используете либо непосредственно путь к логу, либо ?имя_шаблона, либо любую другую операцию из action. В вашем примере получается, что условие if в действии указывает на каталог. И скорей всего, что работать не будет.

  23. Yuriy
    7 февраля, 2014 at 13:16
    42

    а не пробовали Loganalyzer на Mongo?

    Видел статьи как прикрутить монгу к убунте 12.04.

    • 12 февраля, 2014 at 16:16
      43

      Нет, не доводилось )

  24. olekhy
    8 апреля, 2014 at 20:41
    44

    Спасибо за статью!!!

    у мея схема вот какая:

    clinet (rsyslog) sender

    remote server (rsyslog) receiver

    все файлы в папке /var/log/ которые я прикрутил в конфиге /etc/rsyslog.conf
    мониторятся отлично и как нужно отсылаются на remote server. например /var/log/httpd/access_log

    а вот логи которые генерятся PHP приложением напр. из /www/httdocs/protected/runtime/application.log почемуто не отсылаются.

    может из надо как то привязывать к syslog?

    Можете что то посоветовать? Please!

    • 24 июня, 2014 at 19:40
      45

      1. не совсем ясна схема взаимодействия…
      2. покажите текущую конфигурацию rsyslog?
      После этого, можно попробовать разобраться в ситуации.

  25. Bakebola
    29 мая, 2014 at 15:12
    46

    Приветствую.
    Подскажите пожалуйста в решении такого вопроса:
    как создать шаблон, который писал бы информацию с удаленных ресурсов в определенные базы данных (как писать в файлы понятно).
    Например есть базы switch, firewall и т.д., идентифицировать по IP адресу источник и записывать в соответствующую базу данных в MySQL.

    • 24 июня, 2014 at 21:02
      47

      Опишите, как бы Вы писали в файлы (приведите пример предполагаемого конфига)?

  26. GrAnd
    1 июля, 2014 at 16:02
    48

    А слабо автору привести пример настройки rsyslog для логирования событий bind9 в отдельные файлы с ротацией логов?

    • 3 июля, 2014 at 19:41
      49

      А тут rsyslog не нужен. Это делается силами bind. Вот тут есть небольшой пример http://wiki.dieg.info/bind

      • Иван
        12 ноября, 2014 at 10:16
        50

        Автор, подскажите, как rsyslog парсит входящие сообщения? Как он определяет, где хост, а где само сообщение?
        Я столкнулся с тем, что по умолчанию rsyslog парсит как пробел, а мне нужно поменять формат.

        • Иван
          12 ноября, 2014 at 10:17
          51

          Парсер съел теги.
          Хоте написать, что парсит так:
          ИМЯПРОГРАММЫ ПРОБЕЛ СООБЩЕНИЕ
          где это задано?

          Спасибо.

          • 18 декабря, 2014 at 15:00
            52

            Я думаю, что вам будет интересно почитать о $ActionFileDefaultTemplate )

  27. Роман
    19 сентября, 2014 at 08:51
    53

    $ModLoad imudp
    $UDPServerRun 2514
    $template RemoteHost,”/var/log/HOSTS/%FROMHOST-IP%/%$YEAR%/%$MONTH%/%$DAY%/syslog.log”
    *.* ?RemoteHost

    tcpdump-ом смотрю логи приходят, но не пишутся в файл
    ls /var/log/HOSTS/
    127.0.0.1

    только с локалхоста, не пойму в чем может быть причина?

    • 17 декабря, 2014 at 21:49
      54

      покажите конфиг через pastebin

      • Роман
        18 декабря, 2014 at 13:45
        55

        systemctl disable firewalld

        проблема решилась :)

        • 18 декабря, 2014 at 15:34
          56

          Отлично.
          Рад, что проблема решена.

  28. Shadow
    17 октября, 2014 at 08:11
    57

    Все настроил, логи принимаются. Но. Facility и Severity от ESXi в LogAnalyzer пустые. По tcpdump смотрю, эти данные есть. В MySQL тоже есть. А вот в файл syslog пишется без них. На какой стадии они пропадают?

    • 18 декабря, 2014 at 13:38
      58

      Я тоже встретился с данной проблемой. На форуме поддержки создал соответствующую тему. а потом сам нашел решение )

  29. Барсук
    13 ноября, 2014 at 23:48
    59

    Респект!
    Это отличная статья, вкусная и полезная.

  30. ConConovaloff
    26 июня, 2015 at 14:58
    60

    Спасибо за статью.

  31. arman
    25 октября, 2015 at 19:57
    61

    Zdrastvuite

    ya ustanavil rsyslog i podklyuchil dlya logirovaniya k rootsh
    v log file u menya vidni i kodi cvetov basha
    ya ne xachu chtobi v loge propisivalis cvetovie kodi basha
    kak mne reshit etu problrmu

    spasibo

    • 24 июля, 2016 at 15:12
      62

      Я не совсем понял, как это выглядит…
      Если увидеть кусок лога, то можно поразмышлять. (если это еще актуально ))

  32. BpeDHblN
    5 марта, 2016 at 01:14
    63

    Доброго времени суток, имеем
    -CentOS(CentOS Linux release 7.2.1511)
    -Adiscon LogAnalyzer Version 4.1.3
    дохожу до шага 2 – далее не пускает, так и говорит “ERROR: At least one file or directory (or more) is not writeable, please check the file permissions (chmod 666)!”
    делал : [root@virt loganalyzer]# chmod 666 config.php, в браузере ф5 – отсылает к chmod 666
    и #chmod 777 config.php – не прокатывает. Подтолкните пожалуйста к решению!
    Заблаговременно, Спасибо

  33. BpeDHblN
    5 марта, 2016 at 01:16
    64

    наткнулся вот на эти строки
    >This issue solved…SELinux needs to be disabled.
    >However issue posted before on November 23 still exists.

    Может это где поможет? я не нашел!

  34. BpeDHblN
    5 марта, 2016 at 01:22
    65
    • 3 августа, 2016 at 23:14
      66

      Еще актуальна проблема?

  35. 4 апреля, 2016 at 14:07
    67

    Описал установку RSYSLOG+FLUENTD+ELASTICSEARCH+KIBANA + конфигурование клиентских машин
    http://itc-life.ru/fluentd-bystryj-poisk-logov-s-elasticsearch-kibana-and-fluentd/

  36. Otherkot
    1 декабря, 2016 at 16:51
    68

    Добрый вечер.Который день ломаю голову
    Захожу на localhost/loganalyser
    пишет мне
    No syslog records found – Error Details:

    No syslog records found

    что может быть?
    я та кпонимаю два ключевых конфига

    это config.php и rsyslog.conf

    могу их показать если нужно.Я так понимаю,что с директории var/log он должен показывать

    Спасибо

    • 25 июля, 2018 at 10:18
      69

      Добрый.
      Вопрос еще актуален?)

  37. palamar
    23 марта, 2017 at 21:05
    70

    Подскажите как чистить старые логи?Соответственно не вручную)

  38. Владимир
    25 сентября, 2017 at 16:07
    72

    Спасибо Вам огромное за статью!

    Возникла проблема с отправкой почты

    # /etc/rsyslog.conf Configuration file for rsyslog.
    #
    # For more information see
    # /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html
    #
    # Default logging rules can be found in /etc/rsyslog.d/50-default.conf

    #################
    #### MODULES ####
    #################

    $ModLoad imuxsock # provides support for local system logging
    $ModLoad imklog # provides kernel logging support

    $ModLoad omuxsock
    $OMUxSockSocket /home/vladimir/alarm/alarm

    $ModLoad ommail
    $ActionMailSMTPServer aspmx.l.google.com
    $ActionMailSMTPPort 25
    $ActionMailFrom RSyslog server
    $ActionMailTo [email protected]

    $template mail_subject,"On host %hostname%, Error-level by serverity"
    $ActionMailSubject mail_subject
    # интервал времени (пауза между письмами)
    $ActionExecOnlyOnceEveryInterval 0

    # Enable non-kernel facility klog messages
    $KLogPermitNonKernelFacility on

    ###########################
    #### GLOBAL DIRECTIVES ####
    ###########################

    #
    # Use traditional timestamp format.
    # Use traditional timestamp format.
    # To enable high precision timestamps, comment out the following line.
    #
    $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
    $template RSYSLOG_Test,"%syslogseverity-text% %timegenerated% %HOSTNAME% %syslogtag%%msg:::drop-last-lf%\n"

    $OMUxSockDefaultTemplatet RSYSLOG_Test
    :programname, startswith, "camelgw", :omuxsock:

    if ( $programname startswith "camelgw" ) then {
    action(type="omfile" file="/var/log/camelgw.log" Template = "RSYSLOG_Test")
    stop
    }

    if $syslogseverity-text =='alert' then :ommail:;RSYSLOG_Test

    # Filter duplicated messages
    $RepeatedMsgReduction on

    #
    # Set the default permissions for all log files.
    #
    $FileOwner syslog
    $FileGroup adm
    $FileCreateMode 0640
    $DirCreateMode 0755
    $Umask 0022
    #$PrivDropToUser syslog
    $PrivDropToGroup syslog

    #
    # Where to place spool and state files
    #

    Вроде, через этот сервер аутентификация не нужна, а письма всё равно не приходят. Не могу понять, это я что-то неправильно задаю в конфиге или что-то ещё.
    Заранее спасибо!

    Ещё заметил, что если начинаю менять фильтры местами, то тоже начинается чехарда – то, второе сообщение в файл не записывается, то вообще ничего в файл не пишется, то в сокет ничего не падает – не могу понять почему. Та же петрушка, если раскомментировать #$PrivDropToUser syslog

    • 9 февраля, 2019 at 23:39
      73

      Если еще актуально, во-первых, я бы попросил загрузить код конфига на pastebin.
      Во вторых, пытались включить дебаг для службы?
      Что при этом он пишет?

  39. Andvary
    8 февраля, 2018 at 10:29
    74

    Спасибо большое, очень полезная статья.

  40. Саша Сплинтер
    26 июня, 2018 at 20:37
    75

    Дружище, спасибо тебе за статью!
    А меня почти всё получилось. вот только правило
    if $fromhost-ip contains ‘192.168.1.1’ then /var/log/zyxel.log
    шарашит еще и в messages

    Как бы это избежать, а?

    • 10 февраля, 2019 at 13:25
      76

      Чтобы обработка правила завершалась, нужно после правила добавить
      & ~

      ~ (тильда) – после данного символа сообщение будет удалено и дальнейшая обработка не продолжится

  41. Андрей
    3 сентября, 2018 at 13:57
    77

    Добрый день, Mc.Sim!
    Подскажите пожалуйста, как сделать чтобы логи раскладывались по каталогам/файлам с именем конкретного поля из тела сообщения?

    • 10 февраля, 2019 at 23:02
      78

      Для этого нужно использовать Шаблоны (Templates). В шаблоне указать необходимое поле сообщения, а потом в Actions указать вместо пути к файлу – созданный шаблон.

      ?имя_шаблона – вместо классического действия (/путь/к/файлу) в rsyslog можно указывать шаблон, в соответствии с которым будет динамически формироваться новый файл по заданному в шаблоне правилу.

  42. Игорь
    27 сентября, 2018 at 21:58
    79

    Добрый вечер.
    Задача следующая:прилетает лог с cisco должен запускаться скрипт перл с отправкой на zabbix. Сам в отдельности скрипт работает.
    Вот что настроено:
    /etc/rsyslog.conf
    $ModLoad imudp
    $UDPServerRun 514
    $IncludeConfig /etc/rsyslog.d/*.conf

    /etc/rsyslog.d/zabbix_rsyslog.conf
    #add template for network devices
    $template network-fmt,"%TIMESTAMP:::date-rfc3339% [%fromhost-ip%] %pri-text% %syslogtag%%msg%\n"

    #exclude unwanted messages:
    :msg, contains, "Child connection from ::ffff:10.2.0.21" ~
    :msg, contains, "exit after auth (ubnt): Disconnect received" ~
    :msg, contains, "password auth succeeded for 'ubnt' from ::ffff:10.2.0.21" ~
    :msg, contains, "exit before auth: Exited normally" ~
    #action for every message:
    if $fromhost-ip != '127.0.0.1' then ^/usr/local/bin/zabbix_syslog_lkp_host.pl;network-fmt
    & ~

    Сервис перезапустил. Но логи как сыпались в syslog, так и сыпятся…Как будто этот конфиг с шаблоном не запускается…

    Заранее благодарен

    • 10 февраля, 2019 at 23:04
      80

      Вопрос еще актуален?
      Я бы для начала попробовал запустить сервис с ключами debug.

  43. 18 ноября, 2018 at 01:28
    81

    Я поделился с вами своей первой статьей о Rsyslog на французском языке.
    https://www.visionduweb.eu/wiki/index.php?title=Gestion_des_logs#Rsyslog

    Я обнаружил ваш сайт из официальной вики Debian.
    https://wiki.debian.org/fr/Rsyslog#preview

    Я собираюсь создать французскую страницу, и, англоязычный, на следующей модели: https://www.visionduweb.eu/wiki/index.php?title=Gestion_des_logs#Rsyslog

    В настоящее время нет русской версии.
    Я создал проект для китайского мандарина.
    Может быть, кто-то на этом форуме мог позаботиться о переводе на русский язык?

    • 10 февраля, 2019 at 23:22
      82

      Hi Bernard,
      I can translate, but I have not enought times to it(

  44. pit
    8 апреля, 2019 at 14:07
    83

    Уважаемые GURU
    Как воспользоваться PROCID ?
    где и как определить pid нужного мне процесса
    чтобы потом делать с сообщением что мне нужно

    Спасибо

    • 23 октября, 2019 at 19:31
      84

      Он используется как любая другая переменная.
      Например, if $procid == '1' then /var/log/init.log

    • 23 октября, 2019 at 19:32
      85

      Проблема в том, что ID у процесса не постоянный и может меняться в процессе работы или при перезапуске.

  45. B0S
    28 мая, 2019 at 13:28
    86

    Добрый вечер.
    Можно ли менять FileGroup DirGroup взависимости от имени хоста?

    • 23 октября, 2019 at 19:35
      87

      Так сразу – на ум не приходит. Это глобальные параметры, которые применяются ко всем файлам, которые генерит сислог.
      Можно попробовать задавать данные параметры в нескольких местах (например, перед нужными правилами), но не исключен вариант, что применится последнее правило. Нужно экспериментировать.

  46. Михаил
    16 января, 2020 at 12:01
    88

    Добрый день!
    Я посредством imfile вытаскиваю нужные мне логи посылаю их на graylog. Но с определенных серверов ( Solaris 11.4) timestamp почему то берется UTC.
    Вот пример:
    Jan 16 08:45:54 s1c1p01l01-client s1c1p01l01-kias-k7 Thu Jan 16 11:45:47 MSK 2020 s1c1p01l01-client rdsv3: [ID 725595 kern.alert] EQE

    В сообщении время правильное: 11:45:47 а timestamp – UTC.
    Можно ли что-л. сделать средствами rsyslogd или это системная проблема и надо курить TZ?

    • 2 февраля, 2020 at 16:57
      89

      Добрый день.
      Первым делом, нужно понять, из какого поля время в UTC формате.
      Если это содержимое в syslog сообщении, то его, возможно, не получится привести к MSK.
      Параметром $ActionFileDefaultTemplate можно указать, какие поля можно использовать для сохранения сообщений.
      Я бы порекомендовал посмотреть на дамп трафика, а так же попробовать поправить шаблон сообщения.

  47. numpa
    25 февраля, 2020 at 06:30
    90

    Здравствуйте!

    А не знает ли кто, как заставить это недоразумение писать логи в файлы с именами, содержащие пробелы?

    Например: if $procid == ‘1’ then /var/log/init 1.log

    Всякие \ ‘ ” не работают :(

    • 12 апреля, 2020 at 14:15
      91

      По идее, должны работать кавычки
      then "/var/log/init 1.log"

  48. Вадим
    24 октября, 2021 at 20:13
    92

    Салют, крутая статья, если не секрет не сталкивались с написанием Templates для fortigate?

Написать комментарий