/opt 包应该在哪里写入日志?

/opt 包应该在哪里写入日志?

我正在安装一个自定义包/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惯例 - 但这可以被发现吗?)
  • 还有什么吗?

答案1

我会把它们放在/var/log/package_name;它比 更好地满足最小意外原则/var/opt/package_name/log。我没有对此的引用;它只是匹配我寻找日志的位置。

我也可能放弃编写自己的日志文件,而是syslog使用适当的标签和设施进行日志记录;如果我正在寻找与已建立的分析工具的干净集成,我不相信我可以在通信渠道方面做得更好:

  • 每个将“日志分析”列为功能的通用工具都已经在关注syslog
  • 日志文件释放和轮换语义由我处理;我不必建立一种机制来logrotate告诉我放弃该文件并打开一个新文件。我什至不必告诉logrotate要轮换的新文件!
  • 如果站点需要,我可以将日志卸载到中央日志服务器;如果需要的话,现有的已建立的工具rsyslog将被使用,所以我不必考虑自己实现该功能。
  • 围绕日志文件的访问控制(POSIX 和 SELinux)已经得到处理,因此我不需要过多关注特定于发行版的安全语义。

除非我为我的日志做一些自定义的二进制格式,即使如此,我还是更喜欢系统日志友好的机器可解析文本格式,例如 JSON。我很难证明我自己的单独日志文件的合理性;分析工具已经syslog像鹰一样观察着。

答案2

由于您的包配置文件遵循 FHS 约定,因此您应该保持一致并将日志文件存储在/var/opt/package_name/log.

FHS 规定:

/opt 中包的变量数据必须安装在/var/opt/中

还指出

/opt、/var/opt 和 /etc/opt 层次结构之外不得存在其他包文件除了那些必须驻留在文件系统树中特定位置才能正常运行的包文件之外。例如,设备锁定文件必须放置在 /var/lock 中,设备必须位于 /dev 中。

将日志文件放在下面/var/opt并不会阻止包正常运行,因此使用它/var/log显然违反了标准。

目前还不清楚你所说的“这是可以发现的吗?”是什么意思?因为您的自定义日志可能无论如何都会由自定义工具处理,但假设通用工具旨在处理它们,那么它应该探索像您这样的非捆绑包的标准位置。

请注意,这syslog是一个有用的工具,可以集中和调整日志记录配置,但当您必须在具有已知路径的纯文件中执行日志操作时,它并不能完全解决在何处存储日志的问题。有时存储在应用程序日志目录中的某些文件被设计为可由应用程序本身或关联程序使用其预期路径进行访问,例如存储进程 ID 的文件,因此syslog不适用于它们。

相关内容