Board logo

标题: 定制嵌入式系统中 Apache 的日志回滚工具(1) [打印本页]

作者: look_w    时间: 2018-5-23 18:22     标题: 定制嵌入式系统中 Apache 的日志回滚工具(1)

引言目前,为了方便地管理和配置嵌入式设备,很多嵌入式设备都提供了 Web 的接入访问模式。Apache服务器是目前各种的 Web 服务器中最被广泛使用的。为了有效地管理 Web 服务器,掌握和反馈服务器的活动、性能以及出现的问题,通常我们都会开启 Web 服务器的日志文件(访问日志和错误日志)以方便后续的查询和统计。虽然目前的嵌入式设备较之以往在性能和存储容量上都有很大的提高,但是相比硬盘来说,嵌入式设备中的 flash 存储容量还是很小的。即使是一个并不繁忙的服务器,当长时间的运行以后,日志文件就会变得越来越大。如果不进行处理,那么日志文件就会影响 Web 服务器运行效率、速率,还可能耗尽嵌入式设备本来就小的存储空间,导致系统变慢甚至无法正常运行,因此就有必要定期回滚日志文件。如何定制日志处理程序来管理日志就是本文讨论的重点。
Apache 的日志模式Apache 服务器有两种开启日志的方式:普通模式和管道模式。
1) 普通日志使用模式Apache 服务器在默认的情况下会自动打开2个日志文件:访问日志文件和错误日志文件。我们通过在配置文件 httpd.conf 中分别对 CustomLog 访问指令使用命令 “CustomLog /usr/local/apache/logs/access_log common“和对 ErrorLog 错误指令使用命令 “ErrorLog /usr/local/apache/logs/error_log common”来指示。其中错误日志文件,更为重要。Apache 服务器会将运行中的诊断信息和处理请求中出现的错误存放到该文件中,以供将来的错误诊断和解决。通过这种方式产生的默认日志文件是不分割的,并随着时间越变越大。这样一个大文件既不易于管理,也不易于后期的分析与统计。因此就有必要定期回滚日志文件。
2) 管道模式最新的 Apache 服务器版本提供了一种新的日志处理方式,即服务器不是直接将日志写入一个文件中,而是通过管道将访问记录和出错信息传递给另一个通常被称为日志回滚的进程,由其根据用户的设定进行分割(回滚)。其实现的原理图如下:
图 1. 管道机制原理图该模式无须对主服务器进行编程,同时又允许在不重新启动服务器的状态下可以进行日志回滚,这个功能显著地增强了日志的灵活性。
管道模式的使用是比较简单的,只需要在配置文件的 ‘CustomLog’ 或 ‘ErrorLog’ 指令中以管道操作符 "|" 开始,并在其后给出一个回滚工具文件路径,就可以使这个程序从标准输入设备获得日志记录。Apache 提供了一种可靠的管道日志技术,在其启动时,会同时启动这个管道日志进程,并且在运行过程中,如果该回滚进程崩溃的话,会重新启动此进程。
当前流行的日志回滚工具下面将介绍当前最流行的三种日志文件回滚工具,简单描述其使用方法,分析各自的优势、劣势及其适用的场景。
1) logrotate 工具logrotate 工具是一个 Linux 系统自带的日志回滚程序,由系统计划服务工具 cron 程序启动,可以对各种系统日志进行回滚。对于 web 服务器的日志管理,只需要在 logrotate.conf 配置文件中添加相应的指令即可轻松实现。
这是一种不使用其它第三方工具就可以实现日志文件回滚的方式。该工具可以通过指定回滚时间或日志文件大小来回滚日志,同时还可以指定保留的备份文件的数目。对于存储空间有限的嵌入式系统是非常不错的选择。但是 logrotate 工具存在一个严重的缺点,即通过对 web 服务器进程发送 HUP 重新启动命令来实现对当前日志文件的截断和轮循。通过这种方式实现日志的回滚会严重的影响 web 服务的连续性,因此对于实时监控的系统来说是不实用的。
2) rotatelogs 工具rotatelogs 工具是 Apache 自带的一个比较简单的日志回滚程序,可以通过在 Apache 配置文件中添加如下命令来启动: errorlog “|/usr/local/apache2/bin/rotatelogs /usr/local/apache2/logs/apache_error_log 86400”。
这是一种通过管道方式、可以不重启服务器就实现对日志文件的回滚,大大加强了对日志的处理能力。该工具提供了按时间或按文件大小来控制日志的方式。对于按时间回滚日志文件时,所指定的时间是指回滚的时间间隔,并且是相对于服务器启动时间的。即如果 web 服务器在中途被重启时,会产生一个新的日志文件,并且新产生的文件与上次产生的文件时间间隔不是设定的回滚时间间隔,这可能对日志文件后续分析程序产生影响。按文件大小回滚时,指定的文件大小最小是以兆为单位。这对于存储有限的嵌入式系统不是很恰当。此外 rotatelogs 工具不会删除旧的日志文件,也不能指定要保留的旧的回滚日志文件数目,因此,如果对于产生的旧日志文件不进行及时的转移或删除,就会越来越占用存储空间,这对于嵌入式系统来说也是不合适的。
3) cronolog 工具cronolog 是一个简单小巧而高效的日志文件回滚工具,其启动方式与 rotatelog 一样,即ErrorLog  "|/usr/sbin/cronolog /web/logs/%Y/%m/%d/errors.log"。但是其生成的日志文件的名字是由指令中的文件名模板和当前的日期时间组成。
cronolog 工具只能按时间的方式来回滚日志文件,但是提供了可以按年、月、日等多种形式的方式回滚日志。同时你也设定目录结构的格式,使日志文件清晰的存放。例如按 %Y/%m/%d/error_log 的方式指定,将使 error_log 存放在年/月/日/的目录下面。但是该工具同样存在不删除旧的日志文件,使存储占用量越来越大,因此对嵌入式系统也是不合适的。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0