想分析日志价值,你需要了解系统日志数据的重要性
与一个简单的算法不同,一个合格的系统不仅仅要求具有运行的高效和计算的准确,同时又必须兼顾稳定性、可靠性。其次,对于开发人员来说,又必须具有可拓展性和可维护性。各方面都必须很完善,这样的一个系统才能称得上是一个合格完美的系统。简单的站在开发人员的角度分析,比较重视的是系统的可维护性,毕竟开发人员直面的是系统的代码实现。
一个代码结构冗杂、模块设计混乱、命名“异想天开”的系统对于开发者来说简直到了咬牙切齿的地步!不能忍!坚决不能忍!所以在平时的开发过程中就要时刻注意着系统的实现机制,从宏观设计和微观实现上面同时进行精雕细琢。前几天看到阿里巴巴出的《Java 开发规范》,建议大家看看。
说到可维护性,不得不涉及到系统监控和Bug的快速定位。
在开发阶段还比较容易对系统进行监控,一般都会在本机上对系统的运行进行实时监控。而对于bug的定位,开发者都会熟练使用debug功能进行bug定位,更有甚者通过多年的开发经验根据系统的异常信息直接能分析出来Bug产生的原因、位置以及解决方案。但是,系统毕竟是人开发的,我们无法预料到在运行中会出行什么想不到的问题,即使在各种测试中没有出现,但是也无法保证不会出现一些意想不到的问题。那么在系统运行期间如果产生问题出现异常且无法在测试环境中重现,我们又该如何快速、准确地对bug进行定位分析和解决 呢?
举个亲身的例子吧:公司一套设备监控系统,用来对上万个节点进行实时监控,如果该节点有异常(比如温度过高、电压过高等)则向系统进行发出告警信息。在开发环境中只有五十多个设备被安全(不会产生什么告警)的放在机房中供开发和测试使用,这种测试环境根本无法模拟实际环境。系统在测试中没有出现过什么大的问题。然而,在实际的运行环境中,偶尔发现系统的一个模块功能会丧失,失去告警接收的功能。在本地测试的时候从来没有发现过类似问题,但是部署在实际环境中就会有发生。我们不可能实时的24小时对系统进行人工监控,那么该如何定位功能丧失的原因呢?这时,对于系统日志来说就“是时候表演真正的技术了”(PS:肯定是个王者级别选手)。
后来通过系统日志分析之后,发现功能的丧失是由于大量的告警同时上报,导致数据库链接不够用,产生大量connectionTimeout进而导致OOM异常,这个模块彻底死了。可见,日志对于运行环境中系统的监控和问题定位是至关重要的,在系统设计、开发和实现的过程中必须时刻注意着log的输出,这将会对于日后的系统监控和异常分析起至关重要的作用!
那么,在系统日志实现上应该注意哪些问题呢?如何做到不滥用日志、减少大量无用信息,让日志记录足够精简明了?
第一:系统的哪些运行信息,需要进行日志记录?
1、功能模块的启动和结束(完整的系统由多个功能模块组成,每个模块负责不同的功能,因此需要对模块的启动和结束进行监控。是否在需要的时机正常加载该模块?又是否在退出结束的时候正常完成结束操作,正常退出?)
2、用户的登录和退出(哪位用户在什么时间通过什么IP登录或退出了系统)
3、系统的关键性操作(数据库链接信息、网络通信的成功与失败等)
4、系统运行期间的异常信息(NPE、OOM以及其他的超时、转换异常等)
5、关键性方法的进入和退出(一些重要业务处理的方法,在进入和结束的时候需要有日志信息进行输出)
……
……
第二:什么样的日志格式,有助于开发者进行明确的分析?
日志信息要求必须精简,过多的无用信息不但对系统分析起不到什么作用,反而会增加系统的运行压力、消耗系统的运行资源。这里有个日志模板,可供参考。
时间-[线程名][日志等级]-日志输出位置(全类名,可以精确到方法名):日志信息
2013-09-04 10:49:20.296-[Thread-initRedis21504][INFO]-com.shanghai.LoginController.initLogInfo:LingMing[User] is logining
日志信息的内容可以根据不同的情况进行设计,但是前面的时间到日志输出位置必须要保证完整性,这样才有利于日志的分析。
第三:如何对不同的日志信息进行等级划分?
日志等级通常分为四种:DEBUG、INFO、WARN、ERROR
DEBUG:系统调试信息,通常用于开发过程中对系统运行情况的监控,在实际运行环境中不进行输出。
INFO:系统运行的关键性信息,通常用于对系统运行情况的监控。
WARN:告警信息,系统存在潜在的问题,有可能引起运行异常,但此时并未产生异常。
ERROR:系统错误信息,需要进行及时处理和优化。
这里列出来了各种等级的日志信息,在开发过程中哪些信息需要设置为哪种等级有赖于开发者的自己判断,这里只是给个建议。
日志的管理是系统很重要的一部分,千万不可忽略其重要性。完整的日志将会在系统维护中起着异常重要的作用,就好像磨刀不误砍柴工一样。日志易 作为国内实时的日志分析产品,支持本地化部署,可对系统进行分析,灵活、强大、便捷。选择专业的日志分析产品日志易,对系统分析起来就能达到事半功倍的效果。
开发者必须要明白日志的价值和意义,万万不可忽略和轻视,并且在系统设计之初就建议制定一份关于日志管理的说明规范,明确哪些方法、操作必须进行日志输出,在进行开发过程中也要严格遵守。
至于日志输出的实现,不同的开发语言有不同的日志管理框架,同一种语言也有很多不同的日志管理方案,这里就不再进行赘述。本文目的就是想让开发者看到日志的重要性。