单机场景下日志采集比较容易,即使是数据被存放在不同目录下,通过几行代码也可以轻松的完成采集工作。
但分布式场景下,日志产生于不同的计算机上,日志采集工作可以用以下三种方式:
第一种:传统文件方式
可以通过传统文件的方式进行记录,并统一收集处理入库,这样的弊端在于数据的传输与存储不够灵活,且维护成本过高。
第二种:通过数据库进行日志记录
数据库的读写就成了应用服务的瓶颈,一般情况下,数据库的读写会好用较多的时间资源,会影响应用服务的质量、稳定性与可靠性。即使可以使用分布式高性能数据库如hbase,这种应用服务与数据传输的联系也是一个不知何时会爆发的隐患。
第三种:消息对列
应用服务把数据内容通过各种消息队列(kafka)进行传输,然后通过一个高性能的日志采集系统(如Flume)采集这些消息队列中的数据,进行格式统一后,存入目标文件系统。
这种异步处理模式顺利将应用与数据采集解耦,即使数据采集过程出现问题也不会影响应用,进一步保证了用户体验的稳定性。