系统日志管理那点事

提及日志,你们都是耳熟能详的,一大堆日志插件映入眼帘,日志收集的方式也历历在目,可是,今天咱们的重点不只仅是收集日志了,今天咱们主要说说怎么管理日志html

收集日志

日志管理的第一件事,就是日志的收集。日志收集是开发者必备的技巧,不论是哪一个开发语言,哪一个开发平台,日志收集的插件都是有不少选择的。例如:java

.net 平台你们钟爱的log4net,支持多种存储方式(文件、数据库),多种格式,多种日志拆分方式。git

java 平台主流的log4j、slf4j、logback,多种选择。数据库

日志收集的组件这里就不一一说明了,使用都是很简单的,这里重点说明一下,日志咱们收集应该注意的地方:后端

1. 日志等级必定要规范
等级 说明
debug 调试信息
info 用来收集关注的信息
warn 警告信息
error 错误信息

好多开发工程师记录日志老是喜欢用info级别来记录日志,通常的组件默认级别都是info,全部info默认都是会被记录的,而debug信息发布后,是不会被记录的。这是一种偷懒的作法,但这也是很广泛的作法。正确的方式应该根据日志自己的特性去设置日志的级别,其实规范的日志级别是很是重要的:安全

  • 正确的级别便于运维。便于统一调整系统日志级别,如特殊状况能够只记录error错误
  • 没有正确的级别,对后期日志分析和处理是留下很大的隐患。error是须要去关注,而且处理掉的问题。info是普通日志的记录,大部分时候是无需关注的。服务器

    2. error日志内容必定要详实 ,info日志要简洁易懂
    运营过大型系统的人都知道,除了数据库存储外,日志、图片、附件是存储的三大债主,他们是会占用很是很是大的空间,全部记录info的日志,要简洁易懂,避免空间浪费。
    而对于error级别的错误,记录必定要详实,由于error的全部问题,是后期都要去解决的。
  • 请求的地址
  • 请求的参数
  • 请求的ip
  • 请求的用户
  • error具体信息
  • 输出的内容
  • ......运维

为了能很好的反馈当时error产生场景,以上的这些内容都应该被记录,并且越详细越好。tcp

3. error日志必定是全局统一收集的

前文说过,error的日志,不只是咱们须要关注的,仍是我须要解决掉的问题,全部error日志很是重要。错误日志的收集,必须是全局统一收集的,AOP是你最好的伙伴,若是你发现你的errorr日志收集是在每一个类中,处处是分布式

try
{
......
}
catch()
{
    log.error("......")
}

这个必定要避免,无论你用那种语言,错误的处理,都是能够经过全局进行统一的处理,错误日志也要经过全局统一收集。

管理日志

每一个开发人员对日志的收集,都是很是熟悉的,基本都是将日志按照日期的方式进行保存,平常使用日志的时候,也是有一些要求:

1. 单个文件的大小要控制

由于你们都是经过日期方式保存的,可是由于有的人不重视日志,常常会看到有的系统单个日志文件上百M,有的甚至是几G,而实际你们处理问题关注的都是最近的日志,因此控制单个日志文件的大小,对日志的性能以及后期的运维都是很是便利的。

2. 日志要便于浏览

日志文件小才便于浏览,日志最好能经过网址直接访问到,而不须要一波三折登陆服务器,花10分钟下载下来,再来分析。

3. 日志的安全性要获得保障

日志内容有时会包含敏感信息,特别是error日志,直接把系统的具体错误抛出来,因此日志除了查看方便,还须要确保日志文件的安全。若是是日志文件是html或者txt,请必定记得把你的日志文件权限修改下,特定用户才能访问,不要随便开放,全部人都能访问。

4. 日志要按期清理

日志是很是占用存储的空间,日志太大对存储的性能也有必定的影响,全部日志要按期进行清理。

  • 空间充足能够保留半年
  • 空间不足最少也要保留3个月

固然,这个也不是必定的,根据每一个系统的状况去制定清理计划就能够了。

若是你们是小型网站,一个系统一台服务器,日志管理就简单了。若是系统是作了高可用,后端用了均衡负载,那么,日志存在当前服务器是不太明智的作法,日志必定要统一存储,由于均衡负载随时均可能会切换服务器,当出现故障,你须要去找日志究竟存在哪一个服务器,也是件很浪费时间的事情。日志文件也能够经过:

  • 共享虚拟目录来存储
  • 定时进行文件同步来存储
    日志存储也是对性能有必定影响的,文件同步虽然看起来麻烦必定,可是比共享虚拟目录的方式来讲,性能会好,推荐使用这种方式。

说到日志的同步,就不得不提Logstash这个日志组件。Logstash是如今应用最广的日志收集组件,基于java平台。其实不少java平台的组件,是不用去了解java开发的,只要简单的配置就能使用。

Logstash支持文件同步,也能够结合rsyslog进行文件同步,固然,也支持经过tcp协议,与第三方对接,好伙伴固然是Elasticsearch。Elasticsearch下文也会作简单的介绍。

Logstash中文手册:点击这里

分析日志

日志的分析也是一个很大的概念,可能对于运维和安全人员关注的是系统的全部日志,包括访问日志、系统监测的日志等,可是开发人员对于日志更多的是:

  • 监控系统运行错误,并获取错误时的相关数据包
  • 记录重要的信息,某些时候便于后期检查

因此,开发人员对日志的需求相对而言简单一点,可是处理不当也会面临挑战。若是要根据某些关键字找日志,没有一个靠谱的系统处理,那么你们只能一直在ctrl+f 或者 find 命令中来回查找本身须要的信息,使用过的人都知道,这绝对不是一个很好的体验。那么是否有很好的工具来处理呢?有,这里就介绍另外的两个工具:

  • Elasticsearch——一个基于lucene的搜索引擎工具,解决日志的搜索问题。固然,也能解决系统的搜索问题,并且是分布式的哦。
  • Kibana——一个可视化的日志操做引擎,结合Elasticsearch能够达到更好的效果。

Kibana 界面预览
Kibana 界面预览

Elasticsearch+Logstash+Kibana 就是传说中的ELK了,应该是如今最流行的日志处理平台。

Elasticsearch中文文档:点击这里
ELK中文文档:点击这里

尾声

前文介绍日志收集、日志管理注意的事项,推荐了日志分析中两个比较简单经常使用的工具,这里简单说明一下,本身心目中的日志管理系统。
总体流程如图:

推荐的几个工具虽然是java平台的工具,可是日志处理的思路不论是哪一个平台都是同样的。ELK若是只是做为日志管理的工具,也能够应用到.net平台,无需再进行二次开发就能够很好的使用。ELK的使用是有必定的学习成本的,若有时间能够另起一文探讨,可是,这个学习成本是能够忽略语言之间的差别。 固然,若是你们愿意使用脚本同步或者rsyn文件同步进行日志处理也是能够的。

相关文章
相关标签/搜索