Где пакет / opt должен записывать логи?

13

Я устанавливаю пользовательский пакет /opt/package_name, сохраняю файлы конфигурации /etc/opt/package_nameи статические файлы /var/opt/package_name/static/- все в соответствии с соглашениями, предложенными FHS. [ 1 ] [ 2 ] [ 3 ]

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

  • /var/log/package_name (как системный пакет, даже если это пользовательский пакет)
  • /var/opt/package_name/log(следуя /var/optсоглашению - но это обнаруживаемый?)
  • что-то другое?
david.libremone
источник
У вас есть пример инструмента анализа, который сканирует / var / log?
sourcejedi
5
Почему ответ не системный журнал?
Джошуа

Ответы:

19

Я бы поместил их в /var/log/package_name; это удовлетворяет принципу наименьшего удивления лучше, чем /var/opt/package_name/log. У меня нет на это цитаты; это просто соответствует тому, где я буду искать журналы.

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

  • Каждый общий инструмент с «анализом журнала» в качестве перечисленной функции уже отслеживает syslog .
  • Семантика выпуска и ротации файла журнала обрабатывается для меня; Мне не нужно настраивать механизм, logrotateчтобы сказать мне отпустить файл и открыть новый. Мне даже не нужно рассказыватьlogrotate о новых файлах для поворота!
  • Разгрузка журналов на центральные серверы журналов обрабатывается для меня, если этого требует сайт; Существующие установленные инструменты, такие какrsyslog будут использоваться в случае необходимости, поэтому мне не нужно задумываться о реализации этой функции самостоятельно.
  • Контроль доступа (POSIX и, например, SELinux) к файлам журналов уже обработан, поэтому мне не нужно обращать так много внимания на семантику безопасности для конкретного распределения.

Если я не использую какой-либо специальный двоичный формат для своего журнала, и даже тогда я предпочитаю удобные для syslog текстовые форматы, разбираемые машиной, такие как JSON. Мне трудно оправдать свои собственные отдельные файлы журнала; инструменты анализа уже смотрят syslogкак ястреб.

Майкл Мол
источник
8

Следуя правилам FHS для файлов конфигурации вашего пакета, вы должны соблюдать согласованность и хранить файлы журналов в /var/opt/package_name/log .

FHS заявляет:

Переменные данные пакетов в / opt должны быть установлены в / var / opt /

а также заявляет

Никакие другие файлы пакетов не могут существовать вне иерархий / opt, / var / opt и / etc / opt, за исключением тех файлов пакетов, которые должны находиться в определенных местах в дереве файловой системы, чтобы функционировать должным образом. Например, файлы блокировки устройства должны быть помещены в / var / lock, а устройства должны быть расположены в / dev.

Наличие файлов журналов /var/optне мешает правильной работе пакета, поэтому использование/var/log вместо этого явно нарушает стандарт.

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

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

jlliagre
источник