linux分析日志?linux系统内核
Linux系统怎么分析Nginx日志
Linux系统下Nginx日志可以查看系统运行记录和出错说明,对Nginx日志的分析可以了解系统运行的状态。那么Linux系统Nginx日志怎么分析呢?
Nginx日志相关配置有 2个地方:access_log和 log_format。
默认的格式:
access_log/data/logs/nginx-access.log;
log_format old‘$remote_addr[$time_local]$status$request_time$body_bytes_sent’
‘“$request”“$http_referer”“$http_user_agent”’;
相信大部分用过 Nginx的人对默认 Nginx日志格式配置都很熟悉,对日志的内容也很熟悉。但是默认配置和格式虽然可读,但是难以计算。
Nginx日志刷盘相关策略可配置:
比如,设置 buffer,buffer满 32k才刷盘;假如 buffer不满 5s钟强制刷盘的配置如下:
access_log/data/logs/nginx-access.log buffer=32k flush=5s;
这决定了是否实时看到日志以及日志对磁盘 IO的影响。
Nginx日志能够记录的变量还有很多没出现在默认配置中:
比如:
请求数据大小:$request_length
返回数据大小:$bytes_sent
请求耗时:$request_time
所用连接序号:$connection
当前连接发生请求数:$connection_requests
Nginx的默认格式不可计算,需要想办法转换成可计算格式,比如用控制字符 ^A(Mac下 ctrl+v ctrl+a打出)分割每个字段。
log_format的格式可以变成这样:
log_format new‘$remote_addr^A$http_x_forwarded_for^A$host^A$time_local^A$status^A’
‘$request_time^A$request_length^A$bytes_sent^A$http_referer^A$request^A$http_user_agent’;
这样之后就通过常见的 Linux命令行工具进行分析了:
查找访问频率最高的 URL和次数:
cat access.log| awk-F‘^A’‘{print$10}’| sort| uniq-c
查找当前日志文件 500错误的访问:
cat access.log| awk-F‘^A’‘{if($5== 500) print$0}’
查找当前日志文件 500错误的数量:
cat access.log| awk-F‘^A’‘{if($5== 500) print$0}’| wc-l
查找某一分钟内 500错误访问的数量:
cat access.log| awk-F‘^A’‘{if($5== 500) print$0}’| grep’09:00’| wc-l
查找耗时超过 1s的慢请求:
tail-f access.log| awk-F‘^A’‘{if($6》1) print$0}’
假如只想查看某些位:
tail-f access.log| awk-F‘^A’‘{if($6》1) print$3″|”$4}’
查找 502错误最多的 URL:
cat access.log| awk-F‘^A’‘{if($5==502) print$11}’| sort| uniq-c
查找 200空白页
cat access.log| awk-F‘^A’‘{if($5==200&&$8《 100) print$3″|”$4″|”$11″|”$6}’
查看实时日志数据流
tail-f access.log| cat-e
或者
tail-f access.log| tr‘^A’‘|’
照着这个思路可以做很多其他分析,比如 UA最多的访问;访问频率最高的 IP;请求耗时分析;请求返回包大小分析;等等。
这就是一个大型 Web日志分析系统的原型,这样的格式也是非常方便进行后续大规模 batching和 streaming计算。
以上就是Linux系统Nginx日志怎么分析的全部内容了,可以看出来Nginx日志还是有很强大的作用的。
linux中怎样查看日志
方法/步骤
先必须了解两个最基本的命令:
tail-n 10 test.log查询日志尾部最后10行的日志;
tail-n+10 test.log查询10行之后的所有日志;
head-n 10 test.log查询日志文件中的头10行日志;
head-n-10 test.log查询日志文件除了最后10行的其他所有日志;
场景1:按行号查看---过滤出关键字附近的日志
因为通常时候我们用grep拿到的日志很少,我们需要查看附近的日志.
我是这样做的,首先: cat-n test.log|grep"地形"得到关键日志的行号
<3>得到"地形"关键字所在的行号是102行.此时如果我想查看这个关键字前10行和后10行的日志:
cat-n test.log|tail-n+92|head-n 20
tail-n+92表示查询92行之后的日志
head-n 20则表示在前面的查询结果里再查前20条记录
场景2:那么按日期怎么查呢?通常我们非常需要查找指定时间端的日志
sed-n'/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log
特别说明:上面的两个日期必须是日志中打印出来的日志,否则无效.
关于日期打印,可以先 grep'2014-12-17 16:17:20' test.log来确定日志中是否有该时间点,以确保第4步可以拿到日志
这个根据时间段查询日志是非常有用的命令.
如果我们查找的日志很多,打印在屏幕上不方便查看,有两个方法:
(1)使用more和less命令,如: cat-n test.log|grep"地形"|more这样就分页打印了,通过点击空格键翻页
(2)使用>xxx.txt将其保存到文件中,到时可以拉下这个文件分析.如:
cat-n test.log|grep"地形">xxx.txt
这几个日志查看方法应该可以满足日常需求了.
Linux 中实时查看日志的3种方法
在Linux中实时查看日志的3种方法,本文将介绍使用`tail`命令、`multitail`工具和`less`命令来实时监控日志文件。
首先,利用`tail`命令实时查看日志文件。`tail`命令用于查看文件的末尾内容,通过添加`-f`选项,它能持续显示新添加到文件中的内容。若想停止跟踪日志,只需使用`Ctrl+C`快捷键。
为了更有效地跟踪日志文件中的特定术语,可以结合使用`tail`和`grep`命令。`grep`命令用于搜索特定的字符串,`-C`选项可以显示搜索结果的前后几行,帮助更好地跟踪日志信息。同时,还可以使用`grep`来处理多个搜索项,并且使用`-i`选项来忽略大小写,提高搜索的灵活性。
当面临日志文件轮转(rotation)问题时,使用`tail`命令的默认行为可能不够理想。日志文件轮转后,`tail`可能指向一个存档日志文件,而不再记录新添加的内容。为解决此问题,可以按照日志文件的名称跟踪日志文件,即使在发生日志旋转时也能确保`tail`始终指向当前的日志文件。
对于同时监控多个日志文件的需求,可以使用`multitail`工具。`multitail`允许你同时查看多个文件,并在不同行和列中显示不同的文件,提供类似`screen`命令的分割视图,使跟踪更加方便。不过,需要注意的是,`multitail`在大多数Linux系统中可能未被默认安装,需要在使用前进行手动安装。
而`less`命令则为读取实时更改的文本文件提供了另一种方法。添加`+F`选项后,`less`命令能实时跟踪文件更改,且不会使屏幕混乱,方便快速查看日志的更新。
最后,对于系统日志,许多Linux发行版已开始使用`journal`日志,此时应使用`journalctl`命令进行查看和分析,而不是传统的`syslogs`。