最近经常和技术大牛在交流,每次的碰撞都会让我产生更多的想法。例如这次谈到的,某企业信息化用了二三十种的公有云服务、有二十多种业务系统的数据库使用了同一个物理库、云产品的稳定性是值得肯定的。今天我们就来谈一谈日志在数据库中的作用以及如何采集日志。
一、为什么采集日志
提到大数据,第一步总是数据的采集,有了原始数据,才有接下来的存储、处理、分析、应用、展示。
数据采集,有两个难点,一是如何采集到数据(技术问题),二是非本公司的数据如何能拿到(政策问题)。
政策问题更多是靠双方的平等交换,为数据提供方带来利益,这个问题相比技术问题更难有效持久解决。我们今天重点讨论如何采集数据这个技术问题。
二、如何采集日志数据
采集数据一般来讲,有两种技术方式。一种是直接对已入库的数据库中直接抽取数据,另一种是数据需要自己去从用户的使用行为中采集。我们重点讲第二种,如何采集行为数据。
如Html的网页、H5的手机页面,WWW服务器会自动将访问网页的行为检测探针与真实网页内容一起返回给客户的PC、手机。
当行为检测探针的JavaScript代码为有效触发时,将日志数据源源不断地送给公有云中的日志服务。日志服务原则上不作业务处理,仅进行简单日志保存。
为提升日志的真实有效性,日志服务可以提供一些增值服务,例如非法日志的恶意攻击,实现较复杂。
对于手机端的APP程序,一般会将探针内嵌到SDK中,将日志进行汇聚后再送到日志服务。
客户端上传一般采用http的POST方式进行上传,放到当天的access_log文件中。
三、日志服务分流处理
大家一定会联系到,日志服务器的压力很大,成千上万的客户端都会向日志服务中送数据,如何解决,我们再继续分析。
一方面,我们可以进行分流处理,将关键、非关键的日志送入不同的日志服务器。
另一方面,对同种类的日志可以通过Hash等方式选择日志服务器,尽量让更多的日志服务分担任务。
对于在高峰期的日志上报请求,我们也可以用于将非关键日志限流,先本地客户端存储,低谷期再上传的处理方案。