关于LOG那点事儿

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于LOG那点事儿相关的知识,希望对你有一定的参考价值。

日志,作为记录系统中硬件、软件和系统问题的信息,同时还可以监视系统中发生的事件,是产品运维中非常重要的数据之一,用户可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。


日志根据程序和不同领域,可分为消息日志,事件日志,数据库日志等等。


对于Java工程师而言,程序代码的日志是由工程师主动记录的一类为跟踪业务流程执行过程数据的日志,但很多程序员其实并不知道,LOG也是有国际标准的:


Emergency: system is unusable

Alert: action must be taken immediately

Critical: critical conditions

Error: error conditions

Warning: warning conditions

Notice: normal but significant condition

Informational: informational messages

Debug: debug-level messages  


其中标粗部分是程序员常见的一些日志等级,但在实际业务系统中,有可能不完全按照这个标准来定义日志,比如Java中的Log4j就有自己的一套日志等级体系。


在Java领域,其实有许多日志是被大家忽略的,大家最熟知的可能就是控制台日志输出了,其实从操作系统到数据库的各个环节都会产生日志,例如:windows的系统日志,Linux的syslog,docker的容器日志等。这里简要回顾一些常见后端服务中的日志:nginx日志,mysql 日志 和 tomcat 日志。


Nginx日志主要分为两种:访问日志和错误日志。访问日志主要记录客户端访问Nginx的每一个请求,格式可以自定义。通过访问日志,可以得到用户地域来源、跳转来源、使用终端、某个URL访问量等相关信息。错误日志主要记录客户端访问Nginx出错时的日志,格式不支持自定义。通过错误日志,可以得到系统某个服务或server的性能瓶颈等。在分析nginx 日志时, 老码农目前比较喜欢的工具是goaccess。


Tomcat下相关的日志文件有Cataline引擎的日志文件,文件名catalina。日期.log;Tomcat下内部代码丢出的日志,文件名localhost.日期.log;Tomcat下默认manager应用日志,文件名manager.日期.log ;控制台输出的日志,Linux下默认重定向到catalina.out ;通过Servlet.xml配置的Access日志,应用程序以log4j.properties:${catalina.base}/logs/probe.log重定向的日志等等。 就分析工具而言,老码农目前觉得Awstats是个不错的工具。


MySQL有以下几种日志:

错误日志:记录启动、运行或停止时出现的问题,一般也会记录警告信息。

一般查询日志:记录建立的客户端连接和执行的语句。

慢查询日志:记录所有执行时间超过longquerytime秒的所有查询或不使用索引的查询,可以帮我们定位服务器性能问题。

二进制日志:任何引起或可能引起数据库变化的操作,主要用于复制和即时点恢复。

中继日志:从主服务器的二进制日志文件中复制而来的事件,并保存为的日志文件。

事务日志:记录InnoDB等支持事务的存储引擎执行事务时产生的日志。


MySQL 中的日志不仅仅是跟踪信息,而且成为了业务系统的一部分。就日志分析而言,老码农最喜欢的就是percona-toolkit了,尤其是其中的慢查询分析工具pt-query-degist。


因此,日志存在于我们构建系统的方方面面,而充分地分析和监控日志,可以为系统的稳定运行与持续优化提供重要的情报来源,但日志往往是被程序员忽略的一个点。


以上是关于关于LOG那点事儿的主要内容,如果未能解决你的问题,请参考以下文章

关于SSL/TLS的那点事儿

笔记:关于链接库那点事儿

笔记:关于链接库那点事儿

笔记:关于链接库那点事儿

关于质数那点事儿

关于PHP中对象复制的那点事儿