日志文件保存在 /var/log 和 /var/run 目录下。在 RedHat 7 中,系统日志消息由两个服务负责处理,它们是 systemd-journald 和 rsyslogd。
日志的保存时间系统默认是4周,可以通过 cat /etc/logrotate.conf 里面的一项参数查到。rotate 可以修改。
主要日志文件介绍:
/var/log/messages:系统日志,主要记录内核和公共消息。
/var/log/cron:计划执行任务日志。
/var/log/dmesg:系统引导日志。
/var/log/maillog:邮件日志。
/var/log/lastlog:用户登录日志。(用 lastlog 命令)
/var/log/boot.log:系统启动日志。
/var/log/secure:安全和身份验证日志 。
/var/log/wtmp:记录所有用户登录的详细信息。(用 last 命令)
/var/log/btmp:记录失败的登录记录(用 lastb 命令)
/var/run/utmp:用户登录、注销及系统开、关等事件。(用 w / who 命令)
(wtmp、btmp 和 utmp 是二进制文件,不能用cat、vi、tail、more这些命令打开查看)
1、/var/log/messages:系统日志,主要记录内核和公共消息。
1)、messages 信息项包括:事件发生的日期和时间、主机,终端名、进程 和 事件日志。
2)、红色下划线:systemctl restart sshd 重启 sshd 服务。
黄色下划线:tail /var/log/messages 查看 messages 日志。
蓝色方框:messages 日志已经可以查到重启 sshd 服务的记录。
绿色下划线:每个动作都记录得很清楚。暂停中(Stopping)、已暂停(Stopped)、启动中(Starting) 和 已启动(Started)
2、/var/log/cron:计划执行任务日志。
1)、cron 信息项包括:事件发生的日期和时间、主机,终端名、进程 和 事件日志。
2)、cron 保存的是计划任务的日志,我们也可以通过特定输出查看计划进程的一些规律。从中也可以梳理一下计划任务的概念。好像 run-parts(/etc/cron.hourly) 进程,基本都是从开机开始,整点 1 个小时就执行一次。一次由两个事件为一组,一条 starting 0anacron ,另一条 finished 0anacron。
输入 grep run-parts'('/etc/cron.hourly')' 的时候,()括号需要用单引号引起来。
CROND进程,基本上也是从开机开始,整点 1 个小时就执行一次。
run-parts(/etc/cron.daily) 进程每天开机执行一次。一次由四个事件为一组,四个事件里面有两个事件是对应关系。starting man-db.cron 对应 finished man-db.cron,starting logrotate 对应 finished logrotate。
从 cron 日志知道系统的计划任务什么时候触发,执行了什么事件,产生了什么信息。
3、/var/log/dmesg:系统引导日志,显示硬件相关的信息。
head -20 dmesg | nl 列出开头 20 行信息。
4、/var/log/maillog:邮件日志。
红色下划线:tail maillog 查看 maillog 后 10 行信息。
黄色下划线:starting the Postfix mail system 启动 Postfix 邮件系统。daemon started 守护进程启动完成。
maillog 记录的信息都是和邮件有关。
5、/var/log/lastlog:记录所有用户登录最后一次登录本系统的时间信息。用 lastlog 读取信息。lastlog 的几列内容:Username(用户名)、Port(端口)、From(登录IP)、Latest(最后登录时间)。
系统用户是调用系统当中一些特殊服务的用户,不能登录系统(所以它们的登录状态都是显示“**Never logged in**”从来没有登录)。能够登录系统的只有 root 和 新建的普通用户。
6、/var/log/boot.log:系统启动日志。
head /var/log/boot.log 列出头 10 条系统启动的信息(内容较长,里面记录了多次启动的信息)。
通过 3 次的重启,查看 boot.log 大小。每重启一次文件的容量就会增大。也证明了每次启动都会往 boot.log 这个文件写信息。
7、/var/log/secure:安全和身份验证日志 。
tail secure 列出 secure 文件最后 10 行信息。通过 secure 的信息可以发现记录的是安全相关的信息,记录最多的是哪些用户登录服务器的相关日志。
黄色下划线:Failed password for root —— root 的密码错误。
红色下划线:Accepted password for root —— 密码正确,root 用户接受的密码。
绿色下划线:pam_unix(sshd:session): session opened for user root —— 为 root 用户建立会话。
8、/var/log/wtmp:记录所有用户登录的详细信息。一个二进制文件,不能用cat、vi、tail、more这些命令打开查看。用 last 命令查看。last 作用是显示近期用户或终端登录的情况(包括:登录、注销及系统的启动、停机的事件。因此随着系统正常运行时间的增加,该文件的大小也会越来越大,)
last -n 10 —— -n 跟一个数字,指定显示最近登录的数据。(或者 last -10 一样效果)
显示的内容有六列:
第一列:用户名。
第二列:终端位置。(pts/0 伪终端,SSH 或 telnet 等工具远程连接的用户,tty0 直接连接到计算机或本地连接的用户,后面的数字代表连接编号)。
第三列:登录 IP 或 内核。(如果是 0.0 或者 什么都没有,意味着用户通过本地终端连接,除了启动活动,内核版本会显示在状态中)。
第四列:开始时间。
第五列:结束时间。(still、login in 尚未推出,down 直到正常关机,crash 直到强制关机)。
第六列:持续时间。
9、/var/log/btmp:记录失败的登录记录,主要查看错误的登录信息。一个二进制文件,不能用cat、vi、tail、more这些命令打开查看。用 lastb 命令查看。
lastb -n 10 —— -n 跟一个数字,指定显示最近登录的数据。(或者 lastb -10 一样效果)
显示的内容有六列:
第一列:用户名。
第二列:终端位置。(连接失败:notty)。
第三列:登录 IP。
第四列:开始时间。
第五列:结束时间。
第六列:持续时间。
10、/var/run/utmp:用户登录、注销及系统开、关等事件。一个二进制文件,不能用cat、vi、tail、more这些命令打开查看。用 w / who 命令查看。
w 命令:查看登录者的信息及行为。
第一行:系统当前时间、系统没有中断持续性的运行时间、当前登录用户数、CPU在之前 1 分钟、5分钟、15分钟的平均负载。
USER: 登录用户名。
TTY:登录后系统分配的终端号。(tty:物理机本机终端、pts:远程终端)
FROM:远程主机名 IP。(tty 物理机本机不显示、pts 远程终端会显示 IP)
LOGIN@ :登录时间。
IDLE:用户闲置时间 。这是个计时器,用户执行任何 *** 作,计时器就会被重置。(这里显示的时间是距离上次命令 *** 作后多久没有进行 *** 作的闲置时间)
JCPU:执行命令进程所消耗的总时间。 终端连接的所有进程占用时间,包括当前正在运行作业占用的时间。
PCPU:当前进程所消耗 CPU 的时间。
WHAT:用户正在运行的进程 或 命令。(-bash 进程是终端进程)
who 命令:显示关于当前在本地系统上的所有用户信息。who 和 w 差不多,who 显示的内容更为简洁。who 命令显示以下内容:登录名、tty、登录日期 和 时间。如果用户是从远程终端登录的,那么该终端的 IP 也会显示出来。
11、whoami:显示自己的登录用户。
在上文中,我们已经详细介绍 linux 三剑客的基本使用,接下来我们看看具体在性能测试领域的运用,本文主要介绍的是在 Tomcat 和 Nginx access日志的统计分析。
server.xml 使用配置方式,%D-请求时间,%F-响应时间
字段说明如下:
日志样例:
使用默认 combined 的经典格式上扩展response_time&upstream_response_time
nginx.conf 使用配置方式:
字段说明如下:
日志示例:
为了能理解 AWK 程序,我们下面概述其基本知识。
模式( pattern ) 用于匹配输入中的每行文本。对于匹配上的每行文本,awk 都执行对应的 动作( action )。模式和动作之间使用花括号隔开。awk 顺序扫描每一行文本,并使用 记录分隔符(一般是换行符)将读到的每一行作为 记录,使用 域分隔符( 一般是空格符或制表符 ) 将一行文本分割为多个 域, 每个域分别可以使用 2, … 表示。1 表示第一个域,表示第二个域,n 表示第 n 个域。 $0 表示整个记录。模式或动作都可以不指定,缺省模式的情况下,将匹配所有行。缺省动作的情况下,将执行动作 {print},即打印整个记录。
此处使用Nginx access.log 举例,Tomcat 日志自己举一反三。 使用 awk 分解出Nginx access日志中的信息
以此类推…… 当我们使用默认的域分割符时,我们可以从日志中解析出下面不同类型的信息:
我们不难发现,仅使用默认的域分隔符,不方便解析出请求行、引用页和浏览器类型等其他信息,因为这些信息之中包含不确定个数的空格。 因此,我们需要把域分隔符修改为 “ ,就能够轻松读出这些信息。
注意:这里为了避免 Linux Shell 误解 “ 为字符串开始,我们使用了反斜杠,转义了 “ 。 现在,我们已经掌握了 awk 的基本知识,以及它是怎样解析日志的。
此处使用Nginx access.log 举例,Tomcat 日志自己举一反三。
如果我们想知道那些类型的浏览器访问过网站,并按出现的次数倒序排列,我可以使用下面的命令:
此命令行首先解析出浏览器域,然后使用管道将输出作为第一个 sort 命令的输入。第一个 sort 命令主要是为了方便 uniq 命令统计出不同浏览器出现的次数。最后一个 sort 命令将把之前的统计结果倒序排列并输出。
我们可以使用下面的命令行,统计服务器返回的状态码,发现系统可能存在的问题。
正常情况下,状态码 200 或 30x 应该是出现次数最多的。40x 一般表示客户端访问问题。50x 一般表示服务器端问题。 下面是一些常见的状态码:
HTTP 协议状态码定义可以参阅: https://www.w3.org/Protocols/rfc2616/rfc2616.html
查找并显示所有状态码为 404 的请求
统计所有状态码为 404 的请求
现在我们假设某个请求 ( 例如 : URI: /path/to/notfound ) 产生了大量的 404 错误,我们可以通过下面的命令找到这个请求是来自于哪一个引用页,和来自于什么浏览器。
有时候会发现其他网站出于某种原因,在他们的网站上使用保存在自己网站上的图片。如果您想知道究竟是谁未经授权使用自己网站上的图片,我们可以使用下面的命令:
注意:使用前,将 www.example.com 修改为自己网站的域名。
统计共有多少个不同的 IP 访问:
统计每一个 IP 访问了多少个页面:
将每个 IP 访问的页面数进行从小到大排序:
统计 2018 年 8 月 31 日 14 时内有多少 IP 访问 :
统计访问最多的前十个 IP 地址
查看某一个 IP访问了哪些页面:
统计某个 IP 的详细访问情况,按访问频率排序
列出传输大小最大的几个文件
列出输出大于 204800 byte ( 200kb) 的页面以及对应页面发生次数
列出访问最频的页面(TOP100)
列出访问最频的页面([排除php页面】(TOP100)
列出页面访问次数超过100次的页面
列出最近1000条记录,访问量最高的页面
统计每分钟的请求数,top100的时间点(精确到分钟)
统计每小时的请求数,top100的时间点(精确到小时)
统计每秒的请求数,top100的时间点(精确到秒)
统计当天的 pv
说明:
可以使用下面的命令统计出所有响应时间超过 3 秒的日志记录。
注意:NF 是当前记录中域的个数。$NF 即最后一个域。
列出php页面请求时间超过3秒的页面,并统计其出现的次数,显示前100条
列出相应时间超过 5 秒的请求,显示前20条
统计蜘蛛抓取次数
统计蜘蛛抓取404的次数
通过本文的介绍,我相信同学们一定会发现 linux三剑客强大之处。在命令行中,它还能够接受,和执行外部的 AWK 程序文件,可以对文本信息进行非常复杂的处理,可以说“只有想不到的,没有它做不到的”。
下面是常见的日志类型,但并不是所有的Linux发行版都包含这些类型:类型
说明
auth用户认证时产生的日志,如login命令、su命令。
authpriv与 auth 类似,但是只能被特定用户查看。
console针对系统控制台的消息。
cron系统定期执行计划任务时产生的日志。
daemon某些守护进程产生的日志。
ftpFTP服务。
kern系统内核消息。
local0.local7由自定义程序使用。
lpr与打印机活动有关。
mail邮件日志。
mark产生时间戳。系统每隔一段时间向日志文件中输出当前时间,每行的格式类似于 May 26 11:17:09 rs2 -- MARK --,可以由此推断系统发生故障的大概时间。
news网络新闻传输协议(nntp)产生的消息。
ntp网络时间协议(ntp)产生的消息。
user用户进程。
uucpUUCP子系统。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)