Системные журналы Linux (управление логированием)

20 декабря, 2010 Рубрики: cron, Linux, Syslog, основы Linux

Сегодня на www.k-max.name речь пойдет о журналировании в Linux. Функция системного журналирования (т.н. “логи” или логирование) – это основной источник информации о работе системы и ошибках. Журналирование может осуществляться на локальной системе, а так же сообщения журналирования могут пересылаться на удаленную систему, кроме того, в конфигурационном файле /etc/syslog.conf (в некоторых новых дистрибутивах заменен на /etc/rsyslog.conf) возможна тонкая регулировка уровня журналирования. Журналирование осуществляется при помощи демона syslogd (rsyslogd – в некоторых новых дистрибутивах), который обычно получает входную информацию при помощи сокета /dev/log (локально) или с udp-порта 514 (с удаленных машин).

syslog-server:~# ls -l /dev/log
srw-rw-rw- 1 root root 0 Дек 17 06:25 /dev/log

логи linux, управление демоном syslogd, ротация логовВ случае локального журналирования главным файлом – хранителем информации, обычно является /var/log/messages, но в большинстве инсталляций используются и многие другие файлы, которые могут быть тщательно настроены с помощью вышеуказанного конфигурационного файла. Например, может возникнуть необходимость выделить в отдельный лог сообщения, рождаемые демоном электронной почты.

Управление типом и подробностью журналируемой информации

Конфигурационный файл syslog.conf

Файл syslog.conf является главным конфигурационным файлом для демона syslogd. Конфигурационный файл syslog.conf представляет собой набор правил. Каждое правило есть – строка, состоящая из селектора и действия, разделенных пробелом или табуляцией. Селектор представляет собой запись в виде источник.приоритет. (источник иногда именуют – категорией) Селектор может состоять из нескольких записей источник.приоритет, разделенных символом “;” . Можно указывать несколько источников в одном селекторе (через запятую).  Поле действие – устанавливает журналируемое действие для селектора.

Получив сообщение для записи в журнал (от klogd, от локальной или удаленной программы), syslogd для каждого правила проверяет не подходит ли сообщение под шаблон, определяемый селектором. Если подходит, то выполняется указанное в правиле действие. Для одного сообщения м.б. выполнено произвольное количество действий (т.е. обработка сообщения не прекращается при первом успехе).

Сообщения с уровнем, равным или выше указанного в селекторе, и источником, равным указанному в селекторе, считается подходящим. Звездочка перед точкой соответствует любому источнику, после точки – любому уровню. Слово none после точки – никакому уровню для данного источника. Можно указывать несколько источников в одном селекторе (через запятую).

Источник (он же категория) может быть следующим:

  • 0 – kern –  Сообщения ядра
  • 1 – user –  Сообщения пользовательских программ
  • 2 – mail –  Сообщения от почтовой системы.
  • 3 – daemon – Сообщения от тех системных демонов, которые в отличие от FTP или LPR не имеют выделенных специально для них категорий.
  • 4 – auth – Все что связано с авторизацией пользователей, вроде login и su (безопасность/права доступа)
  • 5 – syslog – Система протоколирования может протоколировать сообщения от самой себя.
  • 6 – lpr – Сообщения от системы печати.
  • 7 – news – Сообщения от сервера новостей. (в настоящее время не используется)
  • 8 – uucp – Сообщения от UNIX-to-UNIX Copy Protocol. Это часть истории UNIX и вероятнее всего она вам никогда не понадобится (хотя до сих пор определенная часть почтовых сообщений доставляется через UUCP).
  • 9 – cron – Сообщения от системного планировщика.
  • 10 – authpriv – То же самое, что и auth, однако сообщения этой категории записываются в файл, который могут читать лишь некоторые пользователи (возможно, эта категория выделена потому, что принадлежащие ей сообщения могут содержать открытые пароли пользователей, которые не должны попадать на глаза посторонним людям, и следовательно файлы протоколов должны иметь соответствующие права доступа).
  • 11 – ftp – При помощи этой категории вы сможете сконфигурировать ваш FTP сервер, что бы он записывал свои действия.
  • 12 – NTP – сообщения сервера времени
  • 13 – log audit
  • 14 – log alert
  • 15 – clock daemon – сообщения демона времени
  • с 16 по 23   local0 – local7 Зарезервированные категории для использования администратором системы. Категория local7 обычно используется для сообщений, генерируемых на этапе загрузки системы.
  • mark (не имеющая цифрового эквивалента) – присваивается отдельным сообщениям, формируемым самим демоном syslogd

Под приоритет (степени важности) сообщений заданы 8 уровней важности, которые кодируются числами от 0 до 7:

  • 0 – emerg (старое название PANIC) – Чрезвычайная ситуация. Система неработоспособна.
  • 1 – alert – Тревога! Требуется немедленное вмешательство.
  • 2 – crit – Критическая ошибка (критическое состояние).
  • 3 – err (старое название ERROR) – Сообщение об ошибке.
  • 4 – warning (старое название WARN) – Предупреждение.
  • 5 – notice – Информация о каком-то нормальном, но важном событии.
  • 6 – info – Информационное сообщение.
  • 7 – debug – Сообщения, формируемые в процессе отладки.

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

Обычный файл

Задается полным путем, начиная со слеша (/). Поставьте перед ним дефис (-), чтобы отменить синхронизацию файла после каждой записи. Это может привести к потере информации, но повысить производительность.

Именованные каналы

Размещение перед именем файла символа канала (|) позволит использовать fifo (first in — first out, первый пришел — первый вышел) или именованный канал (named pipe) в качестве приемника для сообщений. Прежде чем запускать (или перезапускать) syslogd, необходимо создать fifo при помощи команды mkfifo. Иногда fifo используются для отладки.

Терминал и консоль

Терминал, такой как /dev/console.

Удаленная машина

Чтобы сообщения пересылались на другой хост, поместите перед именем хоста символ (@). Обратите внимание, что сообщения не пересылаются с принимающего хоста. (для работы данного назначения на клиенте и сервере в файле /etc/services должна быть прописана строчка syslog 514/udp, и открыт UTP-порт 514)

Список пользователей

Разделенный запятыми список пользователей, получающих сообщения (если пользователь зарегистрирован в системе). Сюда часто включается пользователь root.

Все зарегистрированные пользователи

Чтобы известить всех зарегистрированных пользователей при помощи команды wall, используйте символ звездочки (*).

Пример несложного syslog.conf:

# Все сообщения ядра выдавать на консоль.
#kern.*                                                 /dev/console

# Все логи уровня info или выше, кроме сообщений электронной почты, а так же
# не логировать сообщения аутентификации и сообщений демона cron!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# Записывать в отдельный файл сообщения, содержащие конфиденциальную
# информацию аутентификации, независимо от их уровня.
authpriv.*                                              /var/log/secure

# Все сообщения почтовой системы тоже записывать в отдельный файл.
mail.*                                                  -/var/log/maillog

# Логировать сообщения планировщика в файл /var/log/cron
cron.*                                                  /var/log/cron

# Сообщения о чрезвычайных ситуациях должны немедленно получить
# все пользователи системы
*.emerg                                                 *

# Сохранять сообщения новостей уровня crit и выше в отдельный файл.
uucp,news.crit                                          /var/log/spooler

# Сохранять сообщения загрузки в boot.log
local7.*                                                /var/log/boot.log

Как и во многих конфигурационных файлах, синтаксис следующий:

  • строки, начинающиеся с #, и пустые строки игнорируются.
  • Символ * может использоваться для указания всех категорий или всех приоритетов.
  • Специальное ключевое слово none указывает, что журналирование для этой категории не должно быть выполнено для этого действия.
  • Дефис перед именем файла (как -/var/log/maillog в этом примере) указывает, что после каждой записи журнал не должен синхронизироваться. В случае аварии системы вы можете потерять информацию, но отключение синхронизации позволит повысить производительность.

В синтаксисе конфигурационного файла можно поставить перед приоритетом знак !, чтобы показать, что действие не должно применяться, начиная с этого уровня и выше. Подобным образом, перед приоритетом можно поставить знак =, чтобы показать, что правило применяется только к этому уровню, или !=, чтобы показать, что правило применяется ко всем уровням, кроме этого. Ниже показано несколько примеров (man syslog.conf можно найти множество других примеров):

# Посылать все сообщения ядра в /var/log/kernel.
# Посылать все сообщения уровня critical и higher на удаленную машину sysloger и на консоль
# Посыласть все сообщения уровня  info, notice и warning в /var/log/kernel-info
#
kern.*                       /var/log/kernel
kern.crit                    @sysloger
kern.crit                    /dev/console
kern.info;kern.!err          /var/log/kernel-info

# Посылать все сообщения почтовой системы, кроме уровня info в /var/log/mail.
mail.*;mail.!=info           /var/log/mail

Я постарался максимально понятно работу syslogd показать на схеме:

Запуск демона syslogd

Запуск демона протоколирования запускаются на этапе инициализации системы посредством скрипта /etc/rc.d/init.d/syslog, однако для того, чтобы задать параметры запуска, нет необходимости корректировать этот скрипт – начиная с версии 7.2, опции запуска считываются из отдельного конфигурационного файла /etc/sysconfig/syslog (/etc/default/syslog в debian).

Вот некоторые возможные параметры запуска демона syslogd:

  • -a /folder/socket – указание дополнительного слушающего сокета (не забудьте предварительно создать сокет)
  • -d – отладочный режим. При этом демон не переходит в фоновый режим и выдает все сообщения на текущий терминал;
  • -f имя-конфигурационного-файла. Задает имя альтернативного конфигурационного файла, который будет использоваться вместо заданного по умолчанию /etc/syslog.conf;
  • -l список-хостов – задание списка хостов, имена которых не должны записываться с указанием полного доменного имени (FQDN – Full Qwalified Domain Name);
  • -m минут – запущенный без этой опции sysklogd через каждые 20 минут записывает в протокол сообщения категории mark (временные отметки). С помощью опции -m можно либо изменить интервал между отметками, либо вовсе отменить выдачу таких сообщений;
  • -p socket – задание альтернативного сокета UNIX (вместо прослушиваемого по умолчанию /dev/log);
  • -r – разрешение принимать сообщения от удаленных хостов;
  • -x – запрет определения имени хоста по его адресу для предотвращения зависания при работе на одном хосте с сервером DNS.
  • -v – показать версию и закончить работу

После запуска демона syslogd создается файл статуса /var/lock/subsys/syslog нулевой длины, и файл с идентификационным номером процесса /var/run/syslogd.pid.

С помощью команды
kill -SIGNAL `cat /var/run/syslogd.pid`

можно послать демону syslogd один из следующих сигналов: SIGHUP – перезапуск демона; SIGTERM – завершение работы; SIGUSR1 – включить/выключить режим отладки.

Вообще-то в системе запускаются два демона протоколирования – syslogd и klogd. Оба демона входят в состав пакета sysklogd.

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

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

Автоматическая ротация (обновление заполненных файлов) и архивирование журналов

Со временем, файл журнала имеет свойство увеличиваться, особенно при интенсивной работе какого-либо сервиса. Соответственно, необходимо иметь возможность контролировать размер журналов. Это делается при помощи команды logrotate, которая обычно выполняется демоном cron. О работе cron я расскажу в следующих статьях. Главная цель команды logrotate состоит в том, чтобы периодически создавать резервные копии журналов и создавать новые чистые журналы. Сохраняется несколько поколений журналов и, когда завершается срок жизни журнала последнего поколения, он может быть заархивирован (сжат). Результат может быть отправлен по почте, например, ответственному за ведение архивов.

Для определения порядка ротации и архивирования журналов используется конфигурационный файл /etc/logrotate.conf. Для разных журналов можно задать разную периодичность, например, ежедневно, еженедельно или ежемесячно, кроме того, можно регулировать количество накапливаемых поколений, а также указать, будут ли копии архивов отправляться ответственному за ведение архивов и, если будут, когда. Ниже показан пример файла /etc/logrotate.conf:

# сначала заданы параметры "по-умолчанию" (глобальные опции)
# обновлять файлы журнала еженедельно
weekly

# хранить архив логов за 4 последние недели
rotate 4

# создавать новый (пустой) файл после ротации (обновления)
create

# раскомментируйте, если желаете, чтобы сохраненные файлы сжимались
#compress

# включить настройки ротации из указанного каталога
include /etc/logrotate.d

# не хранить wtmp, или btmp -- настройки ротации данных журналов следующие:
/var/log/wtmp {
 missingok
 monthly
 create 0664 root utmp
 rotate 1
}

/var/log/btmp {
 missingok
 monthly
 create 0664 root utmp
 rotate 1
}

# специфичные системные журналы могут быть настроены ниже

Глобальные опции размещаются в начале файла logrotate.conf. Они используются по умолчанию, если где-то в другом месте не задано ничего более определенного. В примере ротация журналов происходит еженедельно и резервные копии сохраняются в течение четырех недель. Как только производится ротация журнала, на месте старого журнала автоматически создается новый. Файл logrotate.conf может содержать спецификации из других файлов. Так, в него включаются все файлы из каталога /etc/logrotate.d.

В этом примере также содержатся специальные правила для /var/log/wtmp и /var/log/btmp (хранящие информацию о удачных и неудачных попытках входя в систему), ротация которых происходит ежемесячно. Если файлы отсутствуют, сообщение об ошибке не выдается. Создается новый файл и сохраняется только одна резервная копия.

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

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

/var/log/messages {
 rotate 5
 mail logadmin@sysloger
 size 100k
 postrotate
 /usr/bin/killall -HUP syslogd
 endscript
 }

В этом примере ротация /var/log/messages производится по достижении им размера 100 КБ. Накапливается пять резервных копий, и когда истекает срок жизни самой старой резервной копии, она отсылается по почте на адрес logadmin@sysloger. Командное слово postrotate включает скрипт, перезапускающий демон syslogd после завершения ротации путем отправки сигнала HUP. Командное слово endscript необходимо для завершения скрипта, а также в случае, если имеется скрипт prerotate. Более полную информацию см. в страницах руководства man для logrotate.

Параметры, задаваемые в конфигурационном файле logrotate.conf:

  • compress | nocompress (старые версии сжимаются или не сжимаются с помощью gzip)
  • compresscmd (задает программу сжатия, по умолчанию – gzip)
  • uncompresscmd (задает программу разжатия, по умолчанию – ungzip)
  • compressext (задает суффикс для сжатых файлов)
  • compressoptions (задает параметры программы сжатия; по умолчанию – “-9”, т.е. максимальное сжатие для gzip)
  • copytruncate | nocopytruncate (обычно старая версия переименовывается и создается новая версия журнала; при задании этого параметра logrotate копирует журнал в новый файл, а затем обрезает старый; используется, если программа, создающая журнал, не умеет его закрывать; теряются записи, сделанные в промежутке между копированием и обрезанием; а поможет ли, если создающая журнал программа вместо режима append просто пишет в файл, используя внутренний указатель?)
  • create [права-доступа владелец группа] | nocreate (сразу после переименования старой версии журнала и до вызова postrotate создается новый журнал с указанными атрибутами – права доступа задаются в восьмеричном виде, как в chmod.2; если атрибуты не указаны, то берутся от старого журнала)
  • daily (смена версий в серии происходит ежедневно)
  • delaycompress | nodelaycompress (некоторые программы не сразу закрывают журнал, в этом случае сжатие надо отложить до следующего цикла)
  • errors email (кому направлять сообщения об ошибках)
  • extension суффикс (задается суффикс, добавляемый к именам файлов при ротации перед суффиксом сжатия)
  • ifempty | notifempty (смена версий даже если файл пуст; действует по умолчанию)
  • include имя-файла | имя-директории (текстуально подставить файл или все файлы из указанной директории; не включаются поддиректории, специальные файлы и файлы с суффиксами из списка исключений; нельзя использовать внутри секции)
  • mail адрес | nomail (когда смена версий приводит к необходимости удалить старый журнал, то послать его по указанному адресу)
  • mailfirst (посылать не удаляемую версию журнала, а первую)
  • maillast (посылать удаляемую версию журнала; действует по умолчанию)
  • missingok | nomissingok (не посылать сообщения об ошибке, если журнал отсутствует)
  • monthly (смена версий происходит ежемесячно)
  • olddir директория | noolddir (во время смены версий журнал перемещается в указанную директорию; д.б. на том же физическом устройстве)
  • postrotate (все дальнейшие строчки до строки endscript исполняются как команды shell после процесса смены версии)
  • prerotate (все дальнейшие строчки до строки endscript исполняются перед процессом смены версии)
  • rotate число (сколько старых версий хранить; если 0, то ни одной)
  • size байт (смена версии происходит, если размер журнала превысил указанное число; можно использовать суффиксы “k” – килобайт – и “M” – мегабайт)
  • sharedscripts | nosharedscripts (выполнять команды prerotate и postrotate только один раз для всех файлов, описанных в секции)
  • tabooext [+] список-суффиксов (задание списка суффиксов-исключений для include; если указан знак “плюс”, то дополнение, иначе замена; по умолчанию: .rpmorig, .rpmsave, .rpmnew, “,v”, .swp и “~”)
  • weekly (смена версий происходит еженедельно)

Изучение и мониторинг журналов

Записи в журналах обычно содержат метку времени, имя хоста, на котором выполняется описываемый процесс, и имя процесса. Просматривать журналы можно при помощи программы постраничного вывода, например, less, искать определенные записи (например, сообщения ядра от определенного демона) можно при помощи команды grep:

[root@syslog-server ~]# less /var/log/messages
[root@syslog-server ~]# grep "ppp" /var/log/messages | tail
Dec 17 16:34:25 proxy pppd[7843]: Connection terminated.
Dec 17 16:34:25 proxy pppd[7843]: Exit.
Dec 17 16:35:57 proxy pppd[11345]: LCP terminated by peer (^P]kV^@<M-Mt^@^@^@^@)
Dec 17 16:35:57 proxy pppd[11345]: pptpd-logwtmp.so ip-down ppp2
Dec 17 16:35:57 proxy pppd[11345]: Connect time 14.8 minutes.
Dec 17 16:35:57 proxy pppd[11345]: Sent 130192 bytes, received 53946 bytes.
Dec 17 16:35:57 proxy pppd[11345]: Modem hangup
Dec 17 16:35:57 proxy pppd[11345]: Connection terminated.
Dec 17 16:35:57 proxy pppd[11345]: Script /etc/ppp/ip-down finished (pid 12084), status = 0x1
Dec 17 16:35:57 proxy pppd[11345]: Exit.

Компьютер может работать не постоянно и выключаться, допустим на ночь. Поэтому в /var/log/messages записи хранятся циклически от запуска компьютера к выключению, это можно заметить по сообщениям:

Дек 17 08:32:56 syslog-server syslogd 1.4-0: restart.
Дек 17 08:32:56 syslog-server syslog: запуск syslogd succeeded
Дек 17 08:32:56 syslog-server kernel: klogd 1.4-0, log source = /proc/kmsg started.
Дек 17 08:32:56 syslog-server syslog: запуск klogd succeeded

Далее в файле протокола можно обнаружить версию ядра, параметры его запуска, информацию о типе процессора и объеме ОЗУ:

Dec 17 08:32:56 syslog-server kernel: Kernel command line:
 auto BOOT_IMAGE=linux ro root=303
 BOOT_FILE=/boot/vmlinuz-2.4.2-2
Dec 17 08:32:56 syslog-server kernel: Memory: 125652k/130560k available (1365k kernel code, 4200k reserved, 92k data, 236k init, 0k highmem)
Dec 17 08:32:56 syslog-server kernel: CPU: Intel(R) Pentium(R) 4 CPU 1.60GHz stepping 02

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

Иногда может возникать необходимость мониторинга системных журналов с целью поиска текущих событий. Например, можно попробовать поймать редко случающееся событие в тот момент, когда оно произошло. В таком случае можно использовать команду tail с опцией -f для отслеживания содержимого системного журнала. Пример:

[root@syslog-server~]# tail -f /var/log/messages | grep syslog-server
Dec 17 16:46:09 syslog-server pppd[12548]: pptpd-logwtmp.so ip-up ppp0 maikop 94.77.0.150
Dec 17 16:46:09 syslog-server pppd[12548]: Script /etc/ppp/ip-up finished (pid 12552), status = 0x0
Dec 17 16:46:49 syslog-server pptpd[12581]: CTRL: Client 85.175.197.65 control connection started
Dec 17 16:46:49 syslog-server pptpd[12581]: CTRL: Starting call (launching pppd, opening GRE)
Dec 17 16:46:49 syslog-server pppd[12582]: Plugin /usr/lib/pptpd/pptpd-logwtmp.so loaded.

Кроме файлов-журналов, указанных в /etc/syslog.conf, существуют так же и другие файлы, например файл /var/log/dmesg,  который хранит информацию о процессе загрузки системы до запуска syslogd, а так же файлы /var/log/lastlog, /var/log/wtmp, /var/log/btmp, имеющие двоичный формат и и хранящие информацию о последнем входе пользователя в систему, о всех удачных входах пользователей в систему и о всех неудачных входах пользователей в систему соответственно. Так же в каталоге /var/log/ могут находится лог-файлы таких демонов как веб-сервер или прокси-сервер. Формат данных файлов аналогичен журналам syslogd.

На последок, хотелось бы сделать акцент на том, что данный протокол очень не защищен, т.к. syslog не содержит никаких средств защиты от подделок сообщений. Хуже того, использование протокола UDP позволяет злоумышленникам посылать сообщения от имени любого хоста. Ваша локальная сеть должна быть защищена экраном от приема пакетов с поддельными локальными адресами (хотя это не помешает посылать поддельные сообщения изнутри локальной сети) и от приема пакетов снаружи на порт 514/udp. Известны случаи переполнения диска ложными сообщениями.

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

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

Если при настройке генератора сообщений указать неправильный адрес коллектора или релея, то никаких сообщений об ошибке не будет – сообщения будут удаляться (или записываться в чужой журнал).

Были предложены несколько проектов улучшения протокола syslog. Например, документ RFC 3195 предлагает систему протоколирования (syslog-conn), основанную на TCP, обеспечивающую гарантированную доставку сообщений в правильной последовательности. Проект syslog-sign предлагает обеспечить аутентификацию, упорядоченность, целостность сообщений и обнаружение пропавших сообщений за счет генерации специальных сообщений, содержащих цифровую подпись (signature) блока предыдущих сообщений с сохранением стандартного протокола и формата syslog и использованием UDP.

Подведем небольшой итог:

В линукс есть единый демон, отвечающий за журналирование событий локальной системы и удаленных систем. Все события собираются из сокета /dev/log, порта UDP – 514, а так же от “помощника” – демона klogd, который присылает сообщения от ядра. Все собранные сообщения фильтруются демоном syslogd через правила в файле /etc/syslog.conf и в соответствии с правилами распределяются по соответствующим местам назначения. Файлы логов периодически “обрезаются”. Периодичность определяет файл logrotate.conf и команда logrotate, которая запускается системным планировщиком – cron.

На сегодня это все. Надеюсь описал все максимально понятно. Со временем буду дополнять статью!

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




Теги: , , , , ,

33 комментария к “Системные журналы Linux (управление логированием)”

  1. Костик
    30 января, 2011 at 15:32
    1

    информативно и внятно, спасибо за статью ;)

    • 31 января, 2011 at 09:18
      2

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

  2. Ир
    15 февраля, 2011 at 23:01
    3

    Спасибо =)

    • 16 февраля, 2011 at 20:57
      4

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

  3. 19 марта, 2011 at 23:54
    5

    Спасибо, отличная статья, воспользовался ей при настройке своей машины. Ю

  4. Алексей
    10 февраля, 2012 at 10:51
    6

    Самая лучшая статья по Syslogу. Автору РЕСПЕКТ

    • 10 февраля, 2012 at 16:31
      7

      спасибо! Приходите еще!

  5. Paul
    13 февраля, 2012 at 17:48
    8

    А как мне принтер сетевой прикрутить к syslog-серверу? В настройках принтера прописал адрес сервера, а что мне подкрутить в syslog.conf, чтобы отслеживать печать, подключение к принтеру по http, ftp,telnet, а также неудачную авторизацию? Заранее благодарен.

    • 25 февраля, 2012 at 14:36
      9

      Необходимо открыть порт 514/udp и запустить демон с ключом -r (подробнее в man 8 syslogd). Это заставит демона принимать сетевые сообщения. Кроме того, если хочется направить сообщение от отдельного хоста в отдельный лог, то нужно добавить примерно такую строчку:
      +hostname.domain
      *.* /var/log/hostname.log

      P.S. но данная статья немного не актуальна для современных дистрибутивов, т.к. syslogd заменен на rsyslogd, а у него несколько другая схема работы и синтаксис конфига.
      P.P.S сорри, что долго отвечал :)

  6. Влад
    23 октября, 2013 at 10:41
    10

    Спасибо!

  7. Владимир
    22 апреля, 2014 at 05:39
    11

    Добрый день!
    Подскажите пожалуйста почему у меня создается несколько файлов одновременно?
    Вот конфиг logrotate
    /srv/log/switch/*
    {
    rotate 18
    weekly
    compress
    delaycompress
    }

    10.156.129.177. од 0 апр. 20 06:28
    10.156.129.177.1og.1 0 апр. 20 06:28
    10.156.129.177.1og.1.1 0 апр. 20 06:28
    10.156.129.177. Iод. 1.1.1 0 апр. 20 06:28
    10. 156. 129. 177. 1 од.1.1.1.1 0 апр. 20 06:28
    10.156.129.177.1og.1.1.1.1.1 0 апр. 20 06:28
    10.156.129.177.1og.1.1.1.1.1.1 0 апр. 20 06:28
    10.156.129.177.1og.1.1.1.1.1.1.1 2597 апр. 18 15:1
    10.156. 129. 177.109.1.1.1.1.1.2.91 578 апр. 9 15:2
    10.156.129.177.109.1.1.1.1.2.91 0 апр. 20 06:2
    10.156.129.177.1o9.1.1.1.1.2.91.1 20 апр. 13 06:5
    10.156.129.177.109.1.1.1.1.3.91 513 апр. 5 16:4
    10.156.129.177.109.1.1.1.2.91 0 апр. 20 06:2
    10.156.129.177.1og.1.1.1.2.91.1 0 апр. 20 06:2
    10.156.129.177.1og.1.1.1.2.91.1.1 20 апр. 13 06:5
    10.156.129.177.109.1.1.1.2.91.2.91 33 апр. 6 06:3
    10.156.129. 177.109.1.1.1.3.91 0 апр. 20 06:2
    10.156.129.177.1og.1.1.1.3.g® 0 апр. 13 06:5
    10.156.129.177.1og.1.1.1.4.91 900 марта 28 15:5
    10.156.129.177.109.1.1.2.91 0 апр. 20 06:2
    10.156.129.177.109.1.1.2.91.1 0 апр. 20 06:2
    10.156.129.177.1og.1.1.2.91.1.1 0 апр. 20 06:2
    10.156.129.177.1og.1.1.2.91.1.1.1 20 апр. 13 06:5
    10.156.129.177.109.1.1.2.91.1.2.91 33 апр. 6 06:3
    10. 156. 129. 177. 109. 1. 1. 2. gz. 2. gz 0 апр. 20 06:2
    10.156.129.177.109.1.1.2.91.2.91.1 20 апр. 13 06:5
    10.156. 129. 177.109.1.1.2.91.3.91 33 марта 30 О6:3
    10.156.129.177.109.1.1.3.91 0 апр. 20 06:2
    10.156.129.177.109.1.1.3.91.1 0 апр. 20 06:28
    10.156.129.177.1og.1.1.3.91.1.1 0 апр. 13 06:5

    • 24 июня, 2014 at 19:52
      12

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

  8. Владимир
    28 июля, 2014 at 08:41
    13

    Сделал так
    /srv/log/switch/*.log
    было
    /srv/log/switch/*
    Спасибо за подсказку

  9. Алексей
    6 августа, 2014 at 13:49
    14

    Добрый день! В системе установлен пакет сторонней почтовой программы, лог которой пишется в /var/log/messages . В конфигах этой программы нет возможности указать куда писать логи. В /var/log/messages попадают записи о работе конкретного исполняемого файла, которого в пакете нет, но который формируется в процессе установки пакета. Возможно ли задать в syslog.conf файл лога, для этого исполняемого файла?

    • Алексей
      6 августа, 2014 at 13:54
      15

      Извиняюсь, этот файл является ссылкой на исполняемый файл, который имеется в устоновочном пакете

    • 7 августа, 2014 at 09:31
      16

      Какой именно syslog у Вас работает? rsyslog? syslog-ng или самый обычный syslogd?

      • Алексей
        7 августа, 2014 at 19:39
        17

        Ядро 2.4.32
        Syslog :
        /etc/init.d/syslog из rpm-пакета sysklogd-1.4.1-14

        В моем случае помогает селектор user.* , но в лог помимо записей о работе интересуемой программы попадают записи о работе других пользовательских программ (например, антивирус). А нужен отдельный файл с логами только ее.
        Еще вот не понятно как использовать зарезервированные категории local0-local6 администратором системы. Может именно они мне как-то помогут? или они как-то ассоциируются с логированием на различных уровнях выполнения?

        • Алексей
          7 августа, 2014 at 19:44
          18

          Работает обычный syslogd

          • 19 августа, 2014 at 09:44
            19

            Давайте по-порядку…
            1. Что за ОС?
            2. Что за сторонняя почтовая программа, которая не имеет настроек логирования?

            • Алексей
              19 августа, 2014 at 21:45
              20

              1. ОС Red Hat Linux 9
              2. И некий не то самописный, не то доработанный на основе чего-то почтовый клиент, состоящий
              из одного rpm-пакета

              • 13 октября, 2014 at 20:05
                21

                Алексей, в Вашем случае я могу порекомендовать только следующее:
                1. Обновить систему до более новой версии, поддерживающей syslog-ng или rsyslog. Это позволит более гибко фильтровать сообщения.
                либо
                2. попытаться найти и поставить rpm пакет для вашей системы syslog-ng или rsyslog. У меня найти не получилось… Это позволит более гибко фильтровать сообщения.
                либо
                3. Поднять syslog-ng или rsyslog на отдельной машине и перенаправлять сообщения на него. Локально (на вашей машине с почтовым клиентом) сообщения не хранить, а использовать для фильтрации syslog-ng или rsyslog.

                Использовать категории local0-local6 получится только если Ваш почтовый клиент удастся настроить на отправку сообщений с соответствующей категорией…
                Как-то так.

  10. Oleg
    19 июня, 2015 at 16:33
    22

    Спасибо большое! Лучшей статьи про syslog не нашел. Как и про многое другое в этом блоге.

    • 21 июня, 2015 at 23:16
      23

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

  11. 16 апреля, 2016 at 14:47
    24

    Добрый день. Я в ubuntu новичёк подскажите как отключить все логи какие тока есть?

  12. 16 апреля, 2016 at 17:23
    25

    Всё разобрался сам.

  13. Денис
    12 сентября, 2016 at 15:28
    26

    Привет! Спасибо за статью!
    Есть вопрос – знает ли кто-нибудь о возможности включения более-менее подробного логирования nfs-сервера на centosе (7)? Штатные логи не в счет – слишком уж скудные.
    Спасибо! )

    • 17 мая, 2018 at 08:59
      27

      Один из инструментов – rpcdebug.
      Второй – добавить ключи для запуска в /etc/sysconfig/nfs:
      ...
      RPCMOUNTDOPTS=" -d all"
      ...
      RPCIDMAPDARGS="-vvv"
      ...

  14. Шурик
    14 декабря, 2016 at 15:24
    28

    Спасибо, ваша статья мне пригодилась. Всё просто и понятно. Всяческих вам благ =)

  15. z5
    21 июля, 2017 at 15:16
    29

    А чем принципиально отличается журналирование от аудирования? В моей OS Oracle Linux 7 есть оба инструментария, реализемые демонами auditd и rsyslogd, соответственно.
    В гайде по ОС сказано только, что аудит позволяет регистрировать гораздо больше событий, чем system logging, но большинство событий неинтересные (мой перевод).
    Если можно развернутый ответ или отсылку на ресурс. Мне попадалось только описание настроек этих двух механизмов, но не ключевая разница.
    Спасибо!

    • 9 февраля, 2019 at 23:25
      30

      Пожалуй, лучшим руководством по auditd будет официальное руководство – https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/security_guide/sec-understanding_audit_log_files
      Если обозначить разницу между демонами rsyslogd и auditd, то я бы сказал так, что rsyslodg – это служба, которая предназначена для управления логами по протоколу syslog, а auditd – это служба управления событиями безопасности системы.
      Формально, в общей ситуации, rsyslogd просто читает сообщения из /dev/log, а auditd интегрирован непосредственно с модулем SeLinux и берет события от него.
      Вообще, термин аудит подразумевает по собой – учет\проверка соответствия чего-то чему-то. В данном случае, соответствия заданных правил безопасности Selinux – реальному выполнению данных правил.
      Наверно, как-то так…

  16. Александр
    27 ноября, 2017 at 15:12
    31

    День добрый. rsyslog передает сообщения, где указан hostname машины. На сервере, куда собираются логи в сообщениях надо получить ip-адрес машины, а не хостнейм. Подскажите, как это можно сделать?

  17. Александр
    27 ноября, 2017 at 16:23
    33

    Операционная система – RHEL7

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