引言
日志对于程序非常重要,日志对于定位问题,数据分析有着十分强大的作用,是程序员和运维人员重要的工具。线上90%以上Bug都是依靠程序日志输出定位到。
日志存储选择
日志数据是一种时序数据,是一种记录当前时刻的状态的数据,只是做数据的追加,不做修改,定期删除,日志数据互相之间没有直接依赖关系,同时数据量巨大,根据这些特点logs要能被快速低成本存储,快速查询分析。
如果采用关系型数据库存储查询,成本会非常高,并且关系数据库对于巨额数据查询分析显得不那么给力,所以如果没有非常特殊的要求,不会选择用关系型数据库。
目前市面上的时序数据库对文本类型的数据处理不够给力,虽然在存储成本和效率方面有优势,但是对于查询尤其对文本类数据进行aggregation数据分析显得乏力。
ES作为一种文档数据库,提供高效低成本存储能力和对于巨量数据的分析查询的优秀能力,当仁不让的成为日志存存储的优秀选择。
日志收集工具选择
Logstatsh提供了logs对es的接口功能,将logs转换成结构数据存储到es中,提供日志收集,日志转换,数据缓存等功能。Logstatsh是用jruby 和java开发的需要预先安装jdk,同时本身的性能一值受诟病,放在客户端做为日志收集传输工具显得太笨重了,于是就出现了Logstash-Forwarder这个项目(Filebeat的前身),采用golang编写,高效轻量级同时也易于扩展。
Filebeat开始的设计目的是作为data shippers完成采集传输功能,es 5.x 把