热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

定制嵌入式系统中Apache的日志回滚工具

定制嵌入式系统中Apache的日志回滚工具--Linux企业应用-Linux服务器应用信息,下面是详情阅读。
目前世界上使用最广泛的 web 服务器。随着 Apache 的广泛使用,访问次数越多,日志就越多,如何有效的管理日志将是一个很重要的问题,因此选择一个好的日志管理程序是很有必要的。

引言

目前,为了方便地管理和配置嵌入式设备,很多嵌入式设备都提供了 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 存放在年/月/日/的目录下面。但是该工具同样存在不删除旧的日志文件,使存储占用量越来越大,因此对嵌入式系统也是不合适的。




如何定制日志回滚工具

由于以上的工具并不适合嵌入式系统,下面将详细的讲解和实现一个满足日志回滚工具的原理并实现一个满足嵌入式系统的日志工具。该工具提供了与其他的日志工具相似的接口,可以设定的日志文件的大小,同时设定旧日志的保留数目。

系统准备:

第一,由 Apache 管道模式的原理可知,我们需要使用管道操作符“|”来启动 Apache 服务器的管道机制。因此为了确保能正确运行,需要确保当前的系统下面是否有 shell 脚本执行器存在。通常在嵌入式系统中一般都是使用最小的 linux 系统,使用 busybox 命令工具来提供最常用的系统命令。为了与 PC 上的 linux 系统具有相似性,建议在 /bin 文件夹下创建一个 sh 的链接文件。

第二,许多的嵌入式系统的文件系统都是使用只读文件系统,因此为了确保能成功创建日志文件,请确保你要保存日志的文件系统是可写的。

原理与实现:

由于 Apache 服务器会把日志信息输出到屏幕,通过管道变成标准输入。因此,日志回滚首先需要读取屏幕获取输出的日志信息,其中0表示标准输入的文件描述符。

n_log = read(0, log_buf, sizeof(log_buf));


其次,在把读到的日志信息写入文件前,需要判断当前是否已存在日志文件可供写入。如果存在,并且该日志的大小还未达到指定的文件大小,就写入该文件。否则,新建一个日志文件。

if(log_fd >= 0)
{
if( filesize(log_fd) >= f_size)
{
fclose(log_fd);
log_fd = -1;
}
}
if(log_fd == -1)
{
log_fd = create_new_log();
}


最后,当一切都准备就绪以后,我们可以放心地将该条信息写入日志文件中。

write(log_fd, log_buf, n_log);
n_log = read(0, log_buf, sizeof(log_buf));


这样就完成了一次日志信息的登记,完成以后又重新开始下一次日志操作。其实现的简单的流程如下:

图2 回滚日志工具流程图

图 2. 回滚日志工具流程图
回滚日志工具流程图

以上介绍了一个适合于的嵌入式系统的常用日志回滚工具。由于嵌入式系统差异性很大或需求不同,用户可以根据实际应用定制有针对性的日志工具。
推荐阅读
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
author-avatar
波波利一_830
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有