【Linux】 系统日志分析
背景
最近有个程序灰度上线,一周会有两次异常退出,检查程序的日志未发现异常,想起可以通过检查Linux系统的日志找出具体问题。整理了一下常用的日志文件和检查方式,后续方便使用。
Linux的日志默认保存在 /var/log
下。系统的日志就在该文件夹的下,其他程序会在改文件下创建一个文件夹再进行保存,比如nginx,其路径就是 /var/log/nginx
。
常用日志文件
系统日志是由一个名为syslog的服务管理的,如以下日志文件都是由syslog
日志服务驱动的:
- /var/log/boot.log:录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息
- /var/log/lastlog :记录最后一次用户成功登陆的时间、登陆IP等信息
- /var/log/messages :记录Linux操作系统常见的系统和服务错误信息
- /var/log/secure :Linux系统安全日志,记录用户和工作组变坏情况、用户登陆认证情况
- /var/log/btmp :记录Linux登陆失败的用户、时间以及远程IP地址
- /var/log/syslog:只记录警告信息,常常是系统出问题的信息,使用lastlog查看
- /var/log/wtmp:该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件,使用last命令查看
- /var/run/utmp:该日志文件记录有关当前登录的每个用户的信息。如 who、w、users、finger等就需要访问这个文件
备注: /var/log/syslog 或 /var/log/messages 存储所有的全局系统活动数据,包括开机信息。Ubuntu 和 Debian 在 /var/log/syslog 中存储它们,而基于 RedHat 的系统如 RHEL 或 CentOS 则在 /var/log/messages 中存储它们。 /var/log/auth.log 或 /var/log/secure 存储来自可插拔认证模块(PAM)的日志,包括成功的登录,失败的登录尝试和认证方式。Ubuntu 和 Debian 在 /var/log/auth.log 中存储认证信息,而 RedHat 和 CentOS 则在 /var/log/secure 中存储该信息。
例子
查看登陆日志,测试服务器系统为CentOS7.3
# 从最近日志中找到登陆时间点
$ tail -n 500 /var/log |grep "Accepted | head"
Sep 18 16:58:08 localhost sshd[34075]: Accepted password for root from 192.168.1.XXX port 63123 ssh2
# 查找完成的登陆过程
$ tail -n 500 /var/log | grep 34075
Sep 16 16:58:08 localhost sshd[34075]: Accepted password for root from 192.168.1.XXX port 63706 ssh2
Sep 16 16:58:08 localhost sshd[34075]: pam_unix(sshd:session): session opened for user root by (uid=0)
Sep 16 17:39:44 localhost sshd[34075]: Received disconnect from 192.168.1.XXX: 0:
Sep 16 17:39:44 localhost sshd[34075]: pam_unix(sshd:session): session closed for user root
从上述日志,我们能看到 Ip 192.168.1.144
从 9月16号16:58:08登入,在17:39:44登出。