zoukankan      html  css  js  c++  java
  • 监控和日志

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

    监控(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


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

  • 相关阅读:
    PHP 操作redis常用方法代码
    PHP 大型网站 高并发大流量解决方案
    Nginx 负载均衡
    maven中mirror与repositories的关系
    Java事件机制---自定义事件
    sql优化几个方面
    临时表的概念
    sql产生临时表
    MySQL rows
    工厂模式 https://www.jianshu.com/p/6dfb5b66d088
  • 原文地址:https://www.cnblogs.com/significantfrank/p/4875810.html
Copyright © 2011-2022 走看看