среда, 18 июня 2014 г.

Linux rsyslog тюнинг

Появилась задача как у многих - писать лог с железяки в базу для анализа. Писать буду в MySQL на Ubuntu. Парсить буду самостоятельно SQL-запросами к полю Message таблицы SystemEvents, так как либо все платное, либо, то что бесплатное, то ни о чем (loganalyzer). С установкой rsyslog для MySQL все понятно. Имеем установленный MySQL, далее
 sudo apt-get install rsyslog-mysql
Задаем пароль для пользователя rsyslog базы Syslog. В результате создается конфигурационный файл который модифицируем:
/etc/rsyslog.d/mysql.conf
$ModLoad ommysql
local0.192.168.0.200 :ommysql:localhost,Syslog,rsyslog,password
& ~
Но в настройке по-умолчанию что-то не так, медленно работает, дублирует в файл syslog. Иногда такое чувство, что вообще не пишет в лог. Пытаемся устранить это далее. Ну и то что в процессе нарыл - добавил сюда. Скажу сразу, что ускорилась запись в лог после отключения резолвинга (до этого пробовал играться с записью очереди в память LinkedList - не помогло). Видимо связано с тем, что IP железки использовал из локальной сети и его соответственно отрезолвить никак не могло, на чем и затык выходил. Это было видно при запуске демона с в дебаг режиме. При записи очереди на диск периодически появлялась запись:
7494.546004979:7f8214d81700: Host name for your address (192.168.0.200) unknown

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

# Отправляем копию сообщений на лог сервер по tcp. 
# То что именно по tcp настраивается количеством символов @. 
# Одно @ - udp, два @ - tcp 

*.* @@192.168.0.1 # tcp 

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

$ActionExecOnlyWhenPreviousIsSuspended on 

# при исчезновении сервера, логи пишутся в описанный ниже файл 
# тут можно перед файлом описать один или несколько резервных 
# лог серверов, тогда в файл будет писаться информация только в том случае, 
# если все они не доступны. Сервера описываются так: 
#& @@192.168.0.2 
& /var/log/localbuf 
$ActionExecOnlyWhenPreviousIsSuspended off

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

/etc/rsyslog.d/50-default.conf

Варианты записи данных с удаленных клиентов

local0 выставлено на роутере, писать в лог для конкретного роутера
local0.192.168.0.200 /var/log/DFL-800.log

писать в лог для любого оборудования с local0
local0.* /var/log/routers.log

с помощью шаблонов для разделения по хостам оборудования
$template \ RemLogs,"/var/log/remote/%$YEAR%/%$MONTH%/%$DAY%/%FROMHOST%.log"
local0.* ?RemLogs

с помощью подстановок
:FROMHOST, isequal, "192.168.0.200" /var/log/DFL800.log
Подробности какие еще есть переменные и функции для подстановок здесь

:FROMHOST, isequal, "192.168.0.200" ~                     
Знак тильда ~ обозначает прекращение обработки по этой цепочке (т.е. если в 50-default.conf обработка цепочки и потом тильда по ней. И если добавление в базу MySQL вынесено в отдельный файл mysql.conf, то добавления не будет).

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

:FROMHOST, isequal, "192.168.0.200" /var/log/DFL800.log
:FROMHOST, isequal, "192.168.0.200" ~
сокращаем до
:FROMHOST, isequal, "192.168.0.200" /var/log/DFL800.log
& ~

Дебаг, если что-то не получается

смотрим что падает на порт
sudo tcpdump -vvv -nn -i eth0 udp port 514


смотрим на предмет ошибок полный лог
cd /usr/sbin
sudo rsyslogd -c5 -f /etc/rsyslog.conf -dn > \ /home/user/debug_rsyslog.log

Отключение резолвинга

Чтобы улучшить производительность, можно отключить резолвинг ip адресов в хостнеймы, Для этого необходимо добавить параметр -x в файл
/etc/default/rsyslog 
RSYSLOGD_OPTIONS="-c5 -x"

Отключение дублирования логирования в /var/log/syslog

В файле /etc/syslog.d/50-default.conf есть строка
*.*;auth,authpriv.none   -/var/log/syslog
т.е. пишем все кроме auth,authpriv.none. Добавляем в исключения сюда local0 и получаем:
*.*;auth,authpriv.none,local0   -/var/log/syslog

Теперь по моему конфигу пишет только в базу MySQL (мне не критично и мне так нужно).

Ссылки, которыми пользовался во время изучения:
http://www.k-max.name/linux/rsyslog-na-debian-nastrojka-servera/
http://bog.pp.ru/work/syslog.html
http://wi.cc.arhv.net/index.php/Kon:Settings:rsyslog
http://www.rsyslog.com/doc/queues.html

Комментариев нет:

Отправить комментарий