提及日志,你们都是耳熟能详的,一大堆日志插件映入眼帘,日志收集的方式也历历在目,可是,今天咱们的重点不只仅是收集日志了,今天咱们主要说说怎么管理日志html
日志管理的第一件事,就是日志的收集。日志收集是开发者必备的技巧,不论是哪一个开发语言,哪一个开发平台,日志收集的插件都是有不少选择的。例如:java
.net 平台你们钟爱的log4net,支持多种存储方式(文件、数据库),多种格式,多种日志拆分方式。git
java 平台主流的log4j、slf4j、logback,多种选择。数据库
日志收集的组件这里就不一一说明了,使用都是很简单的,这里重点说明一下,日志咱们收集应该注意的地方:后端
等级 | 说明 |
---|---|
debug | 调试信息 |
info | 用来收集关注的信息 |
warn | 警告信息 |
error | 错误信息 |
好多开发工程师记录日志老是喜欢用info级别来记录日志,通常的组件默认级别都是info,全部info默认都是会被记录的,而debug信息发布后,是不会被记录的。这是一种偷懒的作法,但这也是很广泛的作法。正确的方式应该根据日志自己的特性去设置日志的级别,其实规范的日志级别是很是重要的:安全
没有正确的级别,对后期日志分析和处理是留下很大的隐患。error是须要去关注,而且处理掉的问题。info是普通日志的记录,大部分时候是无需关注的。服务器
......运维
为了能很好的反馈当时error产生场景,以上的这些内容都应该被记录,并且越详细越好。tcp
前文说过,error的日志,不只是咱们须要关注的,仍是我须要解决掉的问题,全部error日志很是重要。错误日志的收集,必须是全局统一收集的,AOP是你最好的伙伴,若是你发现你的errorr日志收集是在每一个类中,处处是分布式
try { ...... } catch() { log.error("......") }
这个必定要避免,无论你用那种语言,错误的处理,都是能够经过全局进行统一的处理,错误日志也要经过全局统一收集。
每一个开发人员对日志的收集,都是很是熟悉的,基本都是将日志按照日期的方式进行保存,平常使用日志的时候,也是有一些要求:
由于你们都是经过日期方式保存的,可是由于有的人不重视日志,常常会看到有的系统单个日志文件上百M,有的甚至是几G,而实际你们处理问题关注的都是最近的日志,因此控制单个日志文件的大小,对日志的性能以及后期的运维都是很是便利的。
日志文件小才便于浏览,日志最好能经过网址直接访问到,而不须要一波三折登陆服务器,花10分钟下载下来,再来分析。
日志内容有时会包含敏感信息,特别是error日志,直接把系统的具体错误抛出来,因此日志除了查看方便,还须要确保日志文件的安全。若是是日志文件是html或者txt,请必定记得把你的日志文件权限修改下,特定用户才能访问,不要随便开放,全部人都能访问。
日志是很是占用存储的空间,日志太大对存储的性能也有必定的影响,全部日志要按期进行清理。
固然,这个也不是必定的,根据每一个系统的状况去制定清理计划就能够了。
若是你们是小型网站,一个系统一台服务器,日志管理就简单了。若是系统是作了高可用,后端用了均衡负载,那么,日志存在当前服务器是不太明智的作法,日志必定要统一存储,由于均衡负载随时均可能会切换服务器,当出现故障,你须要去找日志究竟存在哪一个服务器,也是件很浪费时间的事情。日志文件也能够经过:
说到日志的同步,就不得不提Logstash这个日志组件。Logstash是如今应用最广的日志收集组件,基于java平台。其实不少java平台的组件,是不用去了解java开发的,只要简单的配置就能使用。
Logstash支持文件同步,也能够结合rsyslog进行文件同步,固然,也支持经过tcp协议,与第三方对接,好伙伴固然是Elasticsearch。Elasticsearch下文也会作简单的介绍。
Logstash中文手册:点击这里
日志的分析也是一个很大的概念,可能对于运维和安全人员关注的是系统的全部日志,包括访问日志、系统监测的日志等,可是开发人员对于日志更多的是:
因此,开发人员对日志的需求相对而言简单一点,可是处理不当也会面临挑战。若是要根据某些关键字找日志,没有一个靠谱的系统处理,那么你们只能一直在ctrl+f 或者 find 命令中来回查找本身须要的信息,使用过的人都知道,这绝对不是一个很好的体验。那么是否有很好的工具来处理呢?有,这里就介绍另外的两个工具:
Kibana 界面预览
Elasticsearch+Logstash+Kibana 就是传说中的ELK了,应该是如今最流行的日志处理平台。
Elasticsearch中文文档:点击这里
ELK中文文档:点击这里
前文介绍日志收集、日志管理注意的事项,推荐了日志分析中两个比较简单经常使用的工具,这里简单说明一下,本身心目中的日志管理系统。
总体流程如图:
推荐的几个工具虽然是java平台的工具,可是日志处理的思路不论是哪一个平台都是同样的。ELK若是只是做为日志管理的工具,也能够应用到.net平台,无需再进行二次开发就能够很好的使用。ELK的使用是有必定的学习成本的,若有时间能够另起一文探讨,可是,这个学习成本是能够忽略语言之间的差别。 固然,若是你们愿意使用脚本同步或者rsyn文件同步进行日志处理也是能够的。