wKiom1TtkATgkILyAAJp-BJblac839.jpg

生产服务器上运行各种应用程序,这些程序会被一个日志检查的脚本(logcheck.sh)周期性的扫描。采用crontab来控制扫描的频率。每次扫描后脚本都会记录本次扫描的日志的最后一行,这样在下次扫描的时候可以直接从新产生的日志开始从而避免重复扫描。扫描发现的异常会被添加到一个统一的目录下面的日志文件,这个文件是按照服务器和应用来命名的,这样确保每个机器上的每个应用都有一个独立的日志输出文件。如果一台服务器上有多个相同的应用,那么需要对每个应用进行区分。


另一个脚本(maillog.py)脚本会每个半小时或一定时间来查看这个目录,如果发现有新的文件生成,那么就会把这个文件通过邮件和短信的形式来通知到运维组。如果应用产生的日志量不大(<300M),可以适当的增加运行(logcheck.sh)的频率,这样可以做到较低的延迟。


生产服务器产生的日志文件需要同步到日志服务器上。采用rsync技术来同步服务器上的日志文件。如果日志服务器的性能允许并且延迟不是主要的考虑因素,也可以将上面提到的日志检查脚本放到这台服务器上运行。在日志服务器上搭建了一套logstash + Elasticsearch。将日志服务器上的日志读入到Elasticsearch数据库,然后通过logstash界面提供给开发和运维使用。


一种更优的方案是从logstash结合RabbitMQ读入日志消息流,这种方案可以实现近似的实时处理日志。然后分析这些消息流,一旦发现异常,就用邮件和短信报警。