监控和日志

为什么监控和日志很重要?

监控(Monitoring)和日志(Logging)是大型分布式系统中最关键的基础设施(infrastructure)之一,因为没有监控,就没办法知晓服务的运行情况,就没办法知道集群中有没有Down机,机器的CPU使用率、负载是否正常,网站的Traffic是否正常,服务的出错率是不是在可容忍范围之内。 简而言之,监控使得我们可以实时的了解网站的运营情况和可用性(Availability)情况。


监控通常是从整体上了解网站的情况,需要具备实时性。而日志则是详尽的记录着系统运行情况,每一次service的调用,每一次数据库的访问,都应该写进日志,特别是当系统出现问题时,我们希望日志系统能为我们提供完整的错误堆栈(Exception Stack) 和尽可能完备的上下文(Context),为系统维护提供支持。日志可以容忍一定程度的延迟,不需要实时性,特别是基于日志的报表,因为分析日志需要一定的时间,也没办法做到实时。


监控和日志有时候是可以互相协作的,例如,日志中所携带的大量系统信息(客户端IP,运行Transaction所需时间,SQL的利用率(Use Ratio,在一个Transaction中,use ratio>1的话,说明有问题),等一切用户愿意写入日志的信息)本身就可以为监控提供信息来源(Source),实际上除了监控,利用日志信息我们还可以做很多和业务相关的事情,比如分析用户的行为,统计系统的使用情况,不过因为日志信息体量巨大,也就是我们通常说的大数据,像ebay每天的日志信息在几十个TB,对如此庞大的数据进行存储和分析,可不是一件容易的事情,通常我们需要借助于FDMS和Hadoop等技术手段。


监控和日志系统架构

纵观所有的监控和日志系统,无外乎就是下面三步

1.  在业务系统中埋点。
     此处需要注意的是,对一些公共组件,例如SOA framework,我们希望在日志中记录每个到达SOA Service的request以及request的payload, 那么这个点应该设在framework中,而不是具体的SOA service中,从而起到一个AOP(Aspect Oriented Programming)的效果,并且确保了记录该信息的风格统一。(前些天,和同事讨论到这个AOP,他说对于这个统一打印log的功能,要留一个后门,因为对一些敏感信息,如信用卡卡号,我们需要Mask然后再输出,也有道理,但是这个后门要怎么设计呢? 各位有没有好的思路?)

2. 将日志 监控信息发送到日志系统后端
     这个发送的过程应该遵循一个高性能的设计原则,因为写日志的地方会很多,因此对整个业务系统的影响也就非常大,所以一定要高效。例如在eBay CAL系统中,其采用的手段就是:内存中收集日志信息并缓存,当缓存到达2K时,通过Socket通信,异步的发送到日志系统后端。利用缓存+Socket+异步,使得写一条日志的过程占用正常业务处理的时间是降到极低,不到1MS

3. 日志系统存储、分析日志信息,对外提供日志检索,日志浏览、视图展现等服务
    对海量日志的存储和搜索,可以采用上文提到的Hadoop技术,对于日志浏览(LogView)服务,需要注意的一点是,我们应该用REST的GET方法提供服务,一个很实际的需求就是,员工之间通常需要传递LogView的URL来进行沟通,典型情况是QA会发送一个出错日志的URL给PD,说看一下是什么地方出了错,因为GET的所有参数都在URL中,所以PD点击URL就能浏览到相应的日志了。 还有就是Access LogView的不一定都是人,也可能是另一个程序,那么日志系统可以保持REST的接口不变,而对不同的客户端(浏览器,或Java Client)提供不同Format的response(HTML,或JSON,XML)

A log view REST URL sample for eBay CAL

http://hostname/logviewui/environment/raptorqasql/pool/r1pgwpmtsoa-envhu4744im8fv4q/machine/phx5qa01c-83ea.stratus.phx.qa.ebay.com/eventDetail?datetime=2014/05/13%2019:43&thread=0x9e&evt=1400035419680


监控和日志系统详细设计

如果深入到Detail,还是有很多技术细节的,特别是日志的存储和分析,更是涉及到现在的热门技术,大数据和Hadoop这两位好兄弟,有时间再详细趴吧,暂时先放一些公司的技术文档,以备不时之需:


关于eBay CAL 更多细节,请阅读: http://server.dzone.com/articles/monitoring-ebay-big-data

点评的集中式日志: http://www.docin.com/p-737666327.html

点评开源: https://github.com/dianping/cat


Hawkeye


Sherlock



Log sending sequence


版权声明:本文为博主原创文章,未经博主允许不得转载。

原文地址:https://www.cnblogs.com/significantfrank/p/4875810.html