LOGS

Сэмюэл Морзе
Сэмюэл Морзе

В эти выходные решил закончить кучу своих черновиков, в планах уже совсем другое, а черновики висят,давят, доделай нас …. попробую)
Итак как все уже догадались я хочу сделать что-то типа cisco cucm, с кучей фишек на базе Асетриска только что-бы стоимость было 0$, функционал богаче, а удобство выше. Дык вот для это задачи не хватает еще одной немаловажной штуки — сбор и хранение логов телефончиков, шлюзов и прочего оборудования. Давайте устраним эту мою оплошность. С этой задачей нам поможет syslog и newsyslog. о rsyslog’e я знаю, но как-то не так)

Для начала принцип работы syslog на локальной машине:
Добавим в rc.conf
syslogd_enable=»YES»
Различные параметры задаются syslogd_flags
Для работы по сети syslog использует порты 514 (UDP и TCP). Запущенный без дополнительных параметров, syslogd будет прослушивать эти порты, ожидая входящих сообщений. Ключ -s запрещает принимать входящие сообщения, но сокеты на портах 514 по-прежнему создаются для исходящих соединений, чтобы syslogd мог отправлять сообщения удаленным хостам. Удвоение ключа (-ss) запрещает и исходящие соединения.
-a задаем адреса разрешенных хостов(кто может нам кидать свои журнальчики)
-l позволяет задавать дополнительные файлы сокетов, которые прослушиваются демоном syslogd в дополнение к используемому по умолчанию /var/run/log. Например, этот ключ необходим, чтобы syslog мог обслуживать программы, запущенные в chroot-окружении. В частности, так работает named.

/usr/sbin/syslogd -l /var/run/log -l /var/named/var/run/log -s

Файл отвечающий за обработку логов /etc/syslog.conf
Основные параметры syslogа: facility(обьект).level(уровень).
facility описывает какая подсистема генерирует сообщения: ядро или даймон,
level описывает серьезность событий).
Данное разделение позволяет писать сообщения в различные файлы или не писать)) Можно принимать решение в зависимости от приложения или хоста который сгенерил это сообщение.
Формат файла достаточно простой
Поле условия(facility.level) поле действия(куда пишем)
Эти два поля разделены одним (или более) пробелом или символом табуляции.
Поле условия по умолчанию >= facility.level. — все что равно или выше заданного уровня критичности будет писаться. Можно задавать свои условия. Несколько условия, которым соответствует одно действие, перечисляются через ;. * — ВСЕ(соответствует всем значениям).
Фильтр !prog (или #!prog) указывает на то, что последующие строки относятся к логам, которые генерируются указанной программой prog. Синонимом этой записи является !+prog. Строка !-prog, наоборот, говорит о том, что последующие правила будут применяться ко всем сообщениям, кроме тех, которые исходят от программы prog. Допускается перечислять через запятую несколько программ, при этом знак + или — применяется ко всему списку.
Фильтр +hostname, то в качестве источника сообщений, которые должны быть обработаны последующими правилами, будет использоваться указанный хост. Так же как и в случае с программами, символом «-» отмечается, что правила будут применяться ко всем сообщениям, кроме поступающих от указанного хоста. Через запятую можно задавать список хостов.
Если в level поставить = то будет логироваться толь данный уровень. если поставить ! — то логироваться будет все что меньше)
Поле действия говорит куда пишем,локально или удаленно. Это может быть log-файл (указывается полный путь, начиная с «/»), адрес удаленного сервера (начинается с символа «@»), имя пользователя (сообщения будут отправляться на терминал, к которому данный пользователь подключен). Также сообщение может быть передано на обработку внешней программе, для чего используется символ конвейера «|».
Строки начинающиеся с символа `#’ и пустые строки игнорируются.
levels с наиболее до наименее критических:
emerg — Система в панике. Сообщения немедленно выводятся на все активные терминалы. Система обычно накрывается медным тазом :-), или остается чрезвычайно, чрезвычайно нестабильной. Продолжение работы невозможно,
alert — Это плохо, но не настолько плохо как уровень emerg. Система может продолжить работу, но эту ошибку следует устранить немедленно,
crit — Это критические ошибки, такие как проблемы с аппаратным обеспечением или серьезные нарушения работы программного обеспечения. Если ваш жесткий диск содержит плохие блоки, они проявятся в виде критических ошибок. Если вы очень смелый, попробуйте продолжить работу,
err — Разнообразные ошибки. Это скверно, такие ошибки должны быть устранены, но они не разрушат вашу систему,
warning — Разнообразные предупреждения,
notice — Общая информация которая должна быть записана, если она вам нужна, но вероятно она не потребует вашей реакции,
info — Различная системная информация,
debug — Этот уровень обычно используется программистами и иногда системными администраторами, которые пытаются понять почему же эта программа так поступает? Отладочные сообщения могут содержать всю информацию которую счел необходимым вывести ее разработчик для отладки кода.
none — Это специальный уровень означающий ничего не записывать в данной категории. Он обычно применяется для исключения информации из групповых записей.

facilities :
auth — Все что связано с авторизацией пользователей, вроде login и su.
authpriv — Тоже самое что и auth, однако пишет журнал в файл,который могут читать лишь некоторые пользователи, console — Сообщения, обычно печатаемые на системной консоли, могут быть записаны в журнал при помощи этой категории, cron — Сообщения от системного планировщика,
daemon — Сообщения от всех остальных системных демонов, которые не имеют явно описанных категорий,
ftp — Сообщения от FTP сервера,
kern — Сообщения от ядра,
lpr — Сообщения от системы печати,
mail — Сообщения от почтовой системы,
mark — Эта категория используется для того, что бы помещать в журнал сообщение каждые 20 минут. Она может быть полезна в комбинации с некоторыми другими журналами (например вы сможете узнать с 20-ти минутной точностью, когда же завис ваш сервер),
news — Сообщения от сервера новостей,
ntp — Сообщения от сервера точного времени,
security — Сообщения от различных служб безопасности, таких как ipfw или ipf,
syslog — Система журналирования может журналировать сообщения от самой себя,
user — Предназначена для сбора разнообразных сообщений,
uucp — Собирает сообщения от UNIX-to-UNIX Copy Protocol.
local0-local7 — Зарезервированные категории для использования администратором системы. Многие программы дают возможность указать категорию журналирования, если ваша программа это позволяет, выбирайте одну из них.
Другие ОС могут содержать дополнительные опции

#Все сообщения с уровнем err или выше, а также kern.warning, auth.notice и mail.crit, будут отправлены на консоль
*.err;kern.warning;auth.notice;mail.crit /dev/console
#Все сообщения от mail с уровнем info и выше складываем в /var/log/maillog.
mail.info /var/log/maillog
#This line uses a comparison flag, = to only match messages at level debug, and log them in /var/log/debug.log.
*.=debug /var/log/debug.log
# Пример определения программы. Совпадать будет только для программы за !. Например здесь эта программа ppp, и пишется все в /var/log/ppp.log.
!ppp
*.* /var/log/ppp.log
# Отправляем логи на удаленную систему.
*.* @ip адерс сервера

Теперь еще раз все в кучу и продолжим

/etc/rc.conf
# --Syslog---
syslogd_enable="YES"
syslogd_flags="-a 10.199.0.0/16:*"
/etc/syslog.conf
!
+10.109.39.243
*.*                                             /var/log/ap100.log
+10.109.39.153
*.*                                             /var/log/spa525.log

Newsyslog
Логов слишком много, размер тоже. руками все чистить вообще нехорошо.
Настройка ротации логов здесь /etc/newsyslog.conf.
Для каждого файла, нуждающегося в ротации, в нем содержится строка в общем случае из таких полей:
1) имя файла,
2) владелец и группа,
3) права доступа,
4) наибольший номер в имени архивных файлов(к-во файлов),
5) максимальный размер файла(в КБ),
6) период ротации(когда проводить ротацию),
7) дополнительные флаги,
8) путь к PID-файлу приложения, которому нужно отправить сигнал после ротации, и номер сигнала, который должен быть послан. (Отправка сигнала процессу может понадобиться, например, в том случае, если процесс держит log-файл все время открытым; если этого не сделать, то используемый файловый дескриптор не будет соответствовать вновь созданному файлу.) Например веб-сервер Apache должен быть оповещен при ротации его журналов. Записав в этом поле полный путь к его pid-файлу вы заставите newsyslog посылать процессу Apache сигнал kill -1, что бы он запустил свою часть обработки ротации журналов.
Некоторые поля могут быть опущены.

Некоторые пункты нужно рассмотреть дополнительно:
6) Время проведения ротирования:
Поле времени может содержать данные четырех типов: «звездочку», число или два различных формата даты.
1. Если вы не хотите производить ротацию журналов в определенное время, просто поставьте в это поле «звездочку».
2. Если в поле будет число, то newsyslog будет проводить ротацию по прошествии указанного количества часов. Например, если вы хотите, что бы ротация проводилась каждые 24 часа, и вам не важно в какое именно время, то просто поставьте в это поле число «24».
3. Если поле начинается символом «@», то считается что время представлено в формате ISO-8601, этот стандарт используется newsyslog в большинстве Unix-подобных операционных систем. Этот формат использовался первой версией newsyslog разработанной в MIT (Массачусетский Технологический Институт – прим. переводчика). На первый взгляд этот формат не совсем понятен. Но, поскольку это стандарт, FreeBSD его поддерживает.
Полная запись даты в формате ISO-8601 состоит из 16 цифр с буквой «T» в середине. Первые четыре цифры означают год, следующие две – месяц, и еще две – день месяца. Буква «T» идет после даты, отделяя ее от времени, как десятичная точка в вещественных числах отделяет дробную часть от целой. После буквы «T» идут две цифры часа, затем две цифры минут и наконец две цифры секунд.
Например, дата 2 февраля 2002 года, 21:15:08, в формате ISO-8601будет выглядеть следующим образом: 20020202T211508
Вы обязательно должны ставить букву «T» в ISO-8601-дате.
Указание полных дат в формате ISO-8601 просто и очевидно. Путаница начинается, когда вы не пишете полную дату. Вы можете указать поля даты только рядом с буквой «T», оставив остальное место незаполненным. Все неуказанные поля не будут учитываться при сравнении.
Например, T23 значит – любой день в году, 23:00. Если вы напишете в newsyslog.conf @T23, то ротация этого журнала будет проводиться каждый день, ровно в 23:00. Запись 4T00 значит полночь 4 числа каждого месяца, таким образом @4T00 будет запускать ротацию в это время.
Так же как при работе с crontab вам следует уточнить часы ротации. Указание даты типа @7T будет запускать ротацию один раз в час, каждый час седьмого числа каждого месяца. Таким образом такая дата будет запускать ротацию раз в час на протяжении целого дня. Это может быть полезно для отладки, но вряд ли пригодится в реальной жизни.
Эта система имеет одну серьезную проблему – она не дает простого способа задавать ежедневно выполняемые задачи. Желание запустить ротацию журнала по понедельникам, не является чем-то необычным. Запустить ротацию журнала в последний день месяца таким образов вообще не удастся. Тут на помощь приходит второй формат времени.
4. Если запись времени начинается со знака доллара «$», то считается, что время задается в специфическом FreeBSD-формате «месяц-неделя-день». Это очень похоже на cron и позволяет вам установить конкретные дни недели для выполнения задачи.
Этот формат использует три буквенных идентификатора: M (день месяца), W (день недели), H (час дня). После каждого из них идет число, указывающее точное время запуска. Часы находятся в интервале от 0 до 23, дни недели от 0 (воскресенье), до 6 (суббота). Дни месяца: от 1 и до количества дней в конкретном месяце.
Например, для запуска ротации каждое воскресение в 8 утра вам следует задать время как $W0H8. Если вы захотите ротировать журналы в полдень 5 числа каждого месяца, то напишите $M5H12.
Одна интересная функция этой системы позволяет вам автоматически задавать ротацию на последний день месяца используя специальный «день месяца» – «L» (от last – последний. Прим. переводчика). Без этого знака было бы очень трудно задать ротацию журнала в последний день месяца без написания скрипта, который бы вставлял количество дней в конкретном месяце. Если вы хотите запустить ротацию вашего журнала аккаунтов за два часа до начала нового месяца, вы должны использовать запись $MLH22.

7) Флаги:
по умолчанию, newsyslog добавляет в новый лог-файл сообщение о том, что лог-файл был ротирован, но если лог-файл бинарный, то это сообщение испортит лог,
B — newsyslog не будет добавлять никаких сообщений в лог.
C — если лог-файл не существует, то его необходимо создать.
G — если указан данный флаг, то в названии лог-файла можно использовать стандартные шаблоны(например *)
J — сжимать лог-файл, используя bzip2
N — Не предупреждать никакой процесс, о ротации лог-файла
W — если используете флаги Z или J, то newsyslog должен подождать, пока завершиться процесс архивации.
Z — сжимать лог, использую gzip.

Примеры:

/var/log/maillog 640 7 * @T00 J

Это правило указывает параметры ротации для файла maillog: независимо от размера (звездочка в 5-м поле), файл будет перезаписываться каждую ночь в 00:00. Архив должен упаковываться, будут сохраняться последние 8 архивов (с номерами от 0 до 7 включительно), вновь созданный файл будет принадлежать пользователю root (значение по умолчанию, поэтому поле владельца пропущено) и иметь права доступа rw-r——.
Для просмотра упакованных log-файлов можно использовать утилиты zcat и bzcat (для gzip и bzip2 соответственно). Midnight Commander вызывает соответствующие утилиты автоматически.
После редактирования файла newsyslog.conf никакие сигналы никуда посылать не требуется – конфигурация будет перечитана при следующем вызове newsyslog.
Следует заметить, что утилита newsyslog не привязана к демону syslogd. То есть она может быть использована для ротации любых файлов, которые в этом нуждаются. Если ротация включается для логов, которые приложение ведет самостоятельно (например, к логам clamd или squid), то особенно внимательно отнеситесь к указанию владельца и правам доступа. Их неправильное указание может привести к тому, что после ротации приложение, запущенное от имени непривилегированного пользователя, не сможет осуществлять запись во вновь созданный файл.

Как добавить логирование на наш сервер на различных устройствах:
1. D-link DVG-7062 заходим System settings -> system log
Нам ставим галку, пишем ип куда слать, порт и все))

2. Addpac ap100
logging format addpac
logging host server ip 10.109.68.10
logging on

3. Addpac 200
Добавляем вот эту штучку в конфиг
logging event all
logging on
remote-log primary-server 10.199.68.10

4. В Кошкофонах у меня уже настроен провижен поэтому меняем параметры в конфиге на сервере.
Ну или если сильно хотите руками
Voice-system
Находим поле сислог сервер, вписываем, профит


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