全文字数:1600 阅读时间:5分钟
一
日志平台的作用
在一个完整的信息系统里面,日志系统是一个非常重要的功能组成部分。它可以记录下系统所产生的所有行为,并按照某种规范表达出来。我们可以使用日志系统所记录的信息为系统进行排错,优化系统的性能,或者根据这些信息调整系统的行为。
我们的日志平台在魅族互联网主要解决的问题有:
在分布式系统和服务化的架构下,日志散落在很多个机器上,开发人员查找日志的成本很高;
日志较大的情况下,查找有用信息的时间成本较高;
查询同一个用户的请求,从接入层到业务层到服务层,需要挨个去查询,无法方便的串联起来;
日志中包含的内容没有很好的被利用起来。
二
日志的内容和配置
业务服务日志文件主要分request、error、server三个。
request日志,请求的access日志;
error 日志,仅保存必要的error\fatal级别日志;
server 日志,warn,info,debug三种日志保存在该文件。
日志文件按日滚动,保留1个月日志,过期日志可删除。
其中通过统一配置ConversionPattern来规范日志输出格式,顺便解释下配置的内容:
%c 输出日志信息所属的类的全名
%d 输出日志时间点的日期或时间
%l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
%m 输出代码中指定的信息,如log(message)中的message
%n 输出一个回车换行符
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%t 输出产生该日志事件的线程名
日志构成
日志内容的基本规范要求如下,原则就是:不是为了输出日志而输出,应当是方便解决问题,方便追查问题。
时间,精确到毫秒(最好是ISO-8601格式:2013-10-11 10:00:00,379);
线程名称;
日志级别;
一个事件唯一标识符、业务主键(如:用户ID)。这个非常重要,方便在跟踪问题时区分出某个用户的所有事件;
一个有用的事件内容。
日志记录什么内容
某个操作花费的时间。如请求所花费的时间、请求发生的时间(包括开始和结束)、数据库查询的执行时间、从磁盘、cache取数据的时间等等。
异常堆栈。出现系统错误(如:NullPointException)时,异常堆栈非常有用;但是当出现业务异常(BizException)时,你的堆栈除了能刷屏外毫无价值。如果你的log满屏的刷Exception Stack, 请打住。
业务主键。不论你记录的是啥事件,都需要有明确的业务主键显示在那里,让你自己可以知道哪个log归属于哪个用户,以方便定位问题。
其中错误码另有统一规范,不同业务的业务错误会统一分配,方便统计监控侧统计分析。
三
日志平台框架
业务打了日志之后,接下来的工作就是如何把这些机器上的日志接入到一个统一的平台上。日志有了统一规范,日志平台也可以很好的解析日志了。魅族日志平台由Elasticsearch,Logstash,Kibana,Redis构成。
ElasticSearch:基于Lucene构建的开源,分布式,RESTful搜索引擎。
Logstash:日志传输、处理、管理和搜索的平台,统一对日志进行收集管理。
Kibana:为 Logstash 和 ElasticSearch 提供日志分析的 Web 接口。可对日志进行高效搜索、可视化、分析等各种操作。
接入平台后,开发人员可以在平台页面上很方便的通过用户ID等主键检索出单个用户在业务中不同服务的汇总日志。通过上述日志规范,也可以很方便定位出有异常的原因,耗时,所在idc等关键信息。
四
接入流程
魅族的业务资源使用CMDB进行统一管理。业务只要提供业务名,日志大小,保存时间即可以申请接入了。
五
其他
其他参考方案
读者也可以去了解下其他的日志系统方案,找到最适合自己的方案,例如: graylog fluentd scribe、chukwa、kafka、flume。
日志系统后续
日志平台后续规划,利用kibana提供的自定义统计可以做一些自定义监控,对敏感的业务日志进行查询权限的限制,日志接入大数据平台,可以更好的挖掘日志中包含的有价值内容。
领取专属 10元无门槛券
私享最新 技术干货