Логирование
Примечание
Понимание того, как работает логирование в ZoneMinder, является ключом к возможности хорошо изолировать/определить проблемы. Пожалуйста, обратитесь к Опции - Логирование, чтобы узнать, как настроить логирование.
Большинство компонентов ZoneMinder могут генерировать информационные, предупреждающие, ошибки и сообщения отладки в стандартном формате. Эти сообщения могут быть записаны в одном или нескольких местах. По умолчанию все сообщения, генерируемые скриптами, записываются в файлы .log, которые находятся в каталоге, определенном переменной конфигурации ZM_PATH_LOGS. Это по умолчанию определено как /var/log/zm (на системах, основанных на Debian), хотя его можно переопределить на путь по умолчанию (путь обычно определяется в /etc/zm/conf.d/01-system-paths.conf, но для его переопределения вам следует создать свой собственный конфигурационный файл, а не перезаписывать этот файл). Например, скрипт zmdc.pl будет выводить сообщения в файл /var/log/zmdc.log, пример этих сообщений выглядит так:
10/24/2019 08:01:19.291513 zmdc[6414].INF [ZMServer:408] [Starting pending process, zma -m 2]
10/24/2019 08:01:19.296575 zmdc[6414].INF [ZMServer:408] ['zma -m 2' starting at 19/10/24 08:01:19, pid = 15740]
10/24/2019 08:01:19.296927 zmdc[15740].INF [ZMServer:408] ['zma -m 2' started at 19/10/24 08:01:19]
В первой части указывается дата и время записи, следующая секция - это имя (или сокращенная версия) сценария, за которым следует процесс ID в квадратных скобках, код серьезности (INF, WAR, ERR или DBG) и текст отладки. Если вы измените расположение каталога журнала, убедитесь, что он ссылается на существующий каталог, к которому веб-пользователь имеет разрешения на запись. Также убедитесь, что в этом каталоге нет журналов, к которым веб-пользователь не имеет разрешения на открытие. Это может произойти, если вы когда-либо запускали команды или скрипты как пользователь root для тестирования. Если это произойдет, последующие неисключительные выполнения будут неудачными из-за невозможности открыть файлы журналов.
Кроме специфического логирования скриптов, информация, предупреждения и сообщения об ошибках записываются через систему системного журнала. Это стандартный компонент в системах Linux и позволяет записывать все виды сообщений в стандартном виде и с использованием стандартного формата. На большинстве систем, если не настроено иначе, сообщения, генерируемые ZoneMinder, будут записаны в файл /var/log/messages или /var/log/syslog. На некоторых дистрибутивах они могут оказаться в другом файле, но обычно все еще находятся в /var/log. Сообщения в этом файле похожи на те, что в файлах журналов скриптов, но немного отличаются. Например, вышеупомянутое событие в журнале системы выглядит так:
Jan 3 13:46:00 shuttle52 zmpkg[11148]: INF [Command: start]
где вы можете увидеть, что дата форматируется по-другому (и только до 1 секунды точности) и есть дополнительное поле для имени хоста (так как syslog может работать по сети). Кроме записей ZoneMinder в этом файле вы также можете увидеть записи от различных других компонентов системы. Вам следует убедиться, что ваш демон syslogd работает, чтобы сообщения syslog обрабатывались правильно.
Правильная настройка журналов в ZoneMinder
Прочие замечания
Некоторые пользователи спрашивают, как подавить или перенаправить сообщения ZoneMinder, записываемые в этот файл. Это чаще всего происходит из-за нежелания, чтобы другие системные сообщения были загромождены и затемнены сообщениями ZoneMinder (которые по умолчанию могут быть довольно частыми). Для управления сообщениями syslog вам необходимо найти и отредактировать файл syslog.conf на вашей системе. Это часто находится в каталоге /etc. Этот файл позволяет конфигурацию syslog таким образом, чтобы определенные классы и категории сообщений направлялись в разные файлы или выделялись на консоль, или просто игнорировались. Полные детали формата этого файла выходят за рамки данного документа (ввод ‘man syslog.conf’ даст вам больше информации), но наиболее часто запрашиваемые изменения легко реализовать.
Сервис syslog использует концепцию приоритетов и служб, где первое относится к важности сообщения, а второе - к той части системы, из которой оно исходит. Стандартные приоритеты включают в себя «информацию», «предупреждение», «ошибку» и «отладку», а ZoneMinder использует эти приоритеты при генерации соответствующего класса сообщений. Стандартные службы включают в себя «почту», «cron» и «безопасность» и т. д., но помимо этого, есть восемь «локальных» служб, которые могут использоваться для генерации сообщений для конкретных машин. ZoneMinder генерирует свои сообщения через службу «local1».
Итак, вооружившись знаниями о приоритете и удобстве сообщения, файл syslog.conf можно изменить, чтобы обрабатывать сообщения так, как вам нравится.
Чтобы гарантировать, что все сообщения ZoneMinder записываются в определенный файл журнала, вы можете добавить следующую строку в начале вашего файла конфигурации syslog.conf:
# Save ZoneMinder messages to zm.log
local1.* /var/log/zm/zm.log
Это обеспечит, что все сообщения, произведенные с помощью локальной службы local1, будут маршрутизироваться в файл /var/log/zm/zm.log. Однако это не обязательно предотвращает их также попадание в стандартный системный журнал. Чтобы это сделать, вам потребуется изменить строку, которая определяет, какие сообщения записываются в этот файл. Это может выглядеть примерно так:
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;news.none;authpriv.none;cron.none /var/log/messages
по умолчанию. Чтобы полностью удалить сообщения ZoneMinder из этого файла, вы можете изменить эту строку, чтобы она выглядела так:
*.info;local1.!*;mail.none;news.none;authpriv.none;cron.none /var/log/messages
которое инструктирует syslog игнорировать любые сообщения от службы local1. Однако, если вы все еще хотите, чтобы предупреждения и ошибки происходили в файле системного журнала, вы могли бы изменить его на:
*.info;local1.!*;local1.warning;mail.none;news.none;authpriv.none;cron.none /var/log/messages
Следующий следует инструкции игнорирования с дальнейшей, чтобы указать, что любые сообщения с возможностью локальной 1 и приоритетом предупреждения или выше все равно должны попадать в файл.
Эти рецепты являются всего лишь примерами того, как вы можете модифицировать журнализацию, чтобы она соответствовала вашей системе, существует множество других модификаций, которые вы могли бы сделать. Если вы внесете какие-либо изменения в файл конфигурации syslog.conf, вам следует убедиться, что вы перезапустите процесс syslogd или отправьте ему сигнал HUP, чтобы заставить его повторно прочитать свой файл конфигурации, иначе ваши изменения будут проигнорированы.
Обсуждение логирования выше началось с описания того, как скрипты генерируют сообщения об ошибках и отладке. Работа бинарных файлов немного отличается. Бинарные файлы генерируют информацию, предупреждения и сообщения об ошибках с помощью syslog точно так же, как и скрипты, и эти сообщения будут обрабатываться одинаково. Однако вывод отладки несколько отличается. Для скриптов, если вы хотите включить отладку, вам придется отредактировать файл скрипта самостоятельно и изменить константу DBG_LEVEL на значение 1. Это приведет к тому, что сообщения отладки будут записаны в файл <script>.log, а также более важные сообщения. Однако сообщения отладки не передаются через syslog. Скрипты в настоящее время имеют только один уровень отладки, поэтому это приведет к генерации любых и всех сообщений отладки. Бинарные файлы работают немного иначе, и хотя вы можете изменить вызов zmDbgInit, присутствующий в каждой функции main бинарного файла, чтобы обновить начальное значение уровня отладки, есть и другие способы.
Самый простой способ сбора отладочной информации - это щелкнуть по ссылке «Настройки» с главной панели консоли ZoneMinder и перейти на вкладку «Отладка». Там вы найдете ряд опций отладки. Первое, что вам следует сделать, это убедиться, что параметр ZM_EXTRA_DEBUG установлен в положение «Включено». Это включает отладку в целом. Затем вам нужно выбрать целевой объект отладки, уровень и файл журнала с помощью соответствующих опций. Щелкните по значку вопроса рядом с каждой опцией для получения дополнительной информации о допустимых настройках. Вам придется перезапустить ZoneMinder в целом или, по крайней мере, компонент, о котором идет речь, для того чтобы ведение журнала начало работать. Когда вы закончите отладку, убедитесь, что вы отключили отладку, сняв флажок с параметра ZM_EXTRA_DEBUG, и перезапустите ZoneMinder. Вы можете оставить другие настройки как есть, так как они игнорируются, если параметр отладки мастера выключен.
После того как вы включили отладку в журнале, вы можете изменить уровень, отправив сигналы USR1 и USR2 соответствующему исполняемому файлу (или файлам), чтобы увеличить или уменьшить уровень отладки, который будет немедленно выпущен. Это изменение не будет сохранено, если исполняемый файл будет перезапущен.
Если вы хотите запускать исполняемый файл непосредственно из командной строки для тестирования конкретной функциональности или сценариев, вы можете установить переменные окружения ZM_DBG_LEVEL и ZM_DBG_LOG для уровня отладки и имени файла журнала, которые вы хотите видеть, и переменную окружения ZM_DBG_PRINT в 1 для вывода отладки непосредственно в терминал.
Все журналы ZoneMinder теперь можно перенаправить с помощью logrotate. Приведен ниже пример конфигурационного файла logrotate:
/var/log/zm/*.log {
missingok
notifempty
sharedscripts
postrotate
/usr/local/bin/zmpkg.pl logrot 2> /dev/null > /dev/null || true
endscript
}