上一篇说到了如何用 rsyslog 搭建本地的日志服务,地址在这里,没有看的童鞋可以先瞅一眼 :
http://www.cnblogs.com/smallrookie/p/5677004.html
显然这个是比较简单粗暴的,如果没有做过什么特殊的输出配置,所有的输出都会写到一个文件里面,当然 rsyslog 是支持关键词匹配,然后把日志定向的写到你想写的文件里面的,如果你只有数量比较小的接口并且一段时间内,接口的数量不会发生变更,那么使用这种方式是OK的。不过实际情况是,我们通常要处理的是大量的接口(几十,上百),如果每个接口都需要去单独写一个配置的话就非常不爽了,这也会一定程度上影响 rsyslog 的执行效率。另外,新增一个接口,你就需要同步的去变更 rsyslog 的配置,如果忘记了就悲催了,日志可能就没有记上。
那么,如果来解决多接口日志单独归档的问题呢? rsyslog 还提供了一种更加灵活的处理日志的方式,也就是我们今天要说的 rsyslog 的 omprog 模块,该模块提供了一个功能为可以把输出已unix标准输入的形式给到外部应用程序,从而提供更好的灵活性以及更高的处理效率。关于模块更加详细的介绍,请参考:
http://www.rsyslog.com/doc/v8-stable/configuration/modules/omprog.html
接下来,介绍一下如何利用php的后台处理程序和 omprog 模块实现日志的归档。
- rsyslog.conf 的配置的变更
如上图所示,你需要加载 omprog 模块,然后再 aciton 中将输出 type 配置为 omprog ,Binary是你需要执行的二进制程序,这里以PHP为例,其它语言比如python等程序也是支持的。
配置完成后需要重启 rsyslog 服务如下:
service rsyslog restart
- php后台处理程序
上面说到,omprog 模块会把输出以标准输入的形式给到应用程序,已php为例,可以按照如下方式写:
<?php while ( !feof(STDIN)) ) { // ... } ?>
逻辑写完后,启动php 后台处理程序,在php程序中根据一定的格式实现日志归档,这样一个日志自动归档服务就基本搭建起来了。不过要让这套系统正常的运转,到这里还是不够的,你还需要更加详细的配置rsyslog.conf,比如分配多大的内存,内存中多少条日志的时候往硬盘写等等,另外,你还需要一个监控服务,来监控整套系统的正常运转,这些下次再说,就酱。