1、日志文件概述
日志文件是用来记录linux操作系统中各种运行消息的文件,相当于linux主机的“日记”(主要记录在本机上谁什么时间做了什么事情)。不同的日志文件记载了不同类型的消息,例如linux内核消息、用户登录事件、程序错误等。
所以日志也是运维人员应该注意的地方之一。不要低估日志文件对网络安全的重要作用,因为日志文件能够详细记录系统每天发生的各种各样的事件。可以通过日志文件检查错误产生的原因,或者在受到攻击和黑客入侵时追踪攻击者的踪迹。
日志的两个比较重要的作用是:审核和监测(如系统故障排错、统计访问量)。对于Linux系统而言,日志文件都默认放在/var/log/下。
注:某些第3方软件的日志文件位于软件自己的目录中的log目录或其他位置。
日志数据有3种类型:
- 内核及系统日志
- 用户日志
- 程序日志
2、/var/log/ 常见日志文件
大多数日志文件是纯文本文件,可以用cat 、head、tail等来查看。还有一些是二进制日志文件,需要用专用的命令来查看。
secure | 安全相关,主要是用户认证,如登录、创建和删除账号、sudo等 |
boot.log | 系统启动日志。能看到启动流程。 |
cron | 计划任务日志。会记录crontab计划任务的创建、执行信息。 |
dmesg | 硬件设备信息(device)。纯文本,也可以用dmesg命令查看。 |
yum.log | yum软件的日志。记录yum安装、卸载软件的记录。 |
lastlog | 用来记录用户最后登录事件的日志。用lastlog查看(二进制日志文件) |
btmp | 登录失败的信息(bad)。用lastb查(二进制日志文件) |
wtmp | 该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件,用last查(二进制日志文件)。 |
messages | 记录linux内核消息及各种应用程序的公共日志消息,包括启动、I/O错误、网络错误、程序故障等。对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获取相关的时间记录信息。 |
# 实时查看messages日志
tail -f /var/log/messages
# 打开新的窗口,并启动防火墙
systemctl start firewalld
3、内核及系统日志
这种日志数据由系统服务rsyslog统一管理,根据其主配置文件/etc/rsyslog.conf中的设置决定将内核消息及各种系统程序消息记录到什么位置,系统中有相当一部分程序会把自己的日志文件交由rsyslog管理,因而这些程序使用的日志记录已具有相似的格式。
# 查看rsyslog软件是否安装
rpm -qa | grep rsyslog
# 查看rsyslog软件包提供的文件列表
rpm -ql rsyslog-8.24.0-55.el7.x86_64
# 查看rsyslog软件包提供的配置文件
rpm -ql rsyslog-8.24.0-55.el7.x86_64
a. 日志类别
日志类别主要是用来指定产生日志的程序类型:
LOG_AUTH 安全或授权信息 | LOG_LOCAL0 本地自定义 |
LOG_AUTHPRIV 安全或授权信息 (私有) | LOG_LPR 打印子系统 |
LOG_CRON 计划任务 | LOG_MAIL 邮件子系统 |
LOG_DAEMON 系统守护进程 | LOG_NEWS 新闻组子系统 |
LOG_FTP ftp守护进程相关 | LOG_SYSLOG 系统消息 |
LOG_KERN 内核消息 |
b. 日志等级
日志等级主要用来区分日志消息的重要程度
LOG_EMERG | 紧急,紧急情况,系统不可用(例如系统崩溃)。 |
LOG_ALERT | 警告,需要立即修复,例如系统数据库损坏。 |
LOG_CRIT | 严重,例如硬盘错误,可能会阻碍程序的部分功能。 |
LOG_ERR | 错误,运行出现错误 |
LOG_WARNING | 提醒,可能影响正常功能,但是需要注意的事件 |
LOG_NOTICE | 注意,不是错误,不会影响正常功能,但是需要注意的事件 |
LOG_INFO | 信息,一般信息 |
LOG_DEBUG | 调试,程序或系统调试信息等 |
注:等级为none表示不记录任何信息
c. 自定义系统日志
创建一个跟messages日志文件相同的日志规则,将日志记录到/var/log/my.log文件中
# 在/etc/rsyslog.conf创建和messages一样规则的配置
vim /etc/rsyslog.conf
# 重启rsyslog服务
systemctl restart rsyslog
# 查看my.log
cat /var/log/my.log
# 查看系统的messages日志文件
cat /var/log/messages
d. 日志格式
- 时间标签:消息发出的日期和时间
- 主机名:生成消息的计算机的名称
- 子系统名称:发出消息的应用程序的名称
- 消息:消息的具体内容
4、用户日志
这种日志数据用于记录linux操作系统用户登录及退出系统的相关信息,包括用户名、登录的终端、登录时间、来源主机、正在使用的进程操作等。
在wtmp、btmp、lastlog等日志文件中,保存了系统用户登录、退出等相关的事件消息,但这些文件都是二进制的数据文件,不能直接使用cat、tail等文本查看工具进行浏览,需要使用who、w、users、last和lastb等命令获取日志信息。
查询当前登录的用户情况:
- users、who、w命令
查询用户登录的历史记录:
- last:用于查询成功登录到系统的用户记录
- lastb:用于查询登录失败的用户记录,也可以直接从安全日志文件/var/log/secure中获得相关信息
5、程序日志
有些应用程序会选择由自己独立管理一份日志文件,而不是交给rsyslog服务管理,用于记录本程序运行过程中的各种事件信息。由于这些程序只负责管理自己的日志文件,因此不同程序使用的日志记录格式可能会存在较大的差异。
在Linux系统中,还有相当一部分应用程序没有使用rsyslog服务来管理日志,而是由程序自己维护日志记录。例如,httpd网站服务程序使用两个日志文件access_log和error_log分别记录客户访问事件和错误事件,不同应用程序的日志记录格式差别较大,且没有严格使用统一的格式。
如果程序使用yum安装,日志文件默认保存在/var/log目录下,如果采用源码安装,默认保存在安装目录下log目录,日志路径可以修改。
6、logrotate 日志切割
日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到。对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间。
logrotate可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件
a. 日志切割作用
- 防止日志文件过大
- 定期删除旧日志文件
b. 查看 logrotate.conf
cat /etc/logrotate.conf | grep -v "^#" | grep -v "^$"
weekly #每周一轮滚
rotate 4 #保留4个备份
create #创建新的空日志文件代替旧文件
dateext #使用日期为文件名后缀,禁用此项默认以数字为后缀
include /etc/logrotate.d #加载指定目录下配置文件,此目录下保存日志策略
/var/log/wtmp { #日志文件路径及其个性化轮转策略设置
monthly #每月一轮滚
create 0664 root utmp #创建的新日志文件权限、属主 、属组
minsize 1M #文件最小容量
rotate 1 #保留1个备份
}
/var/log/btmp {
missingok #在日志轮循期间,任何错误将被忽略
monthly
create 0600 root utmp
rotate 1
}
a. 设置轮滚策略
创建配置文件:vim /etc/logrotate.d/myrotate
/var/log/my.log {
daily #每天一轮滚
missingok #丢了也不报错
nodateext #不使用日期为后缀,即用数字为后缀
create #创建新文件
rotate 2 #保留2个备份
compress #启用压缩(后缀为.gz)
}
测试轮滚:logrotate -fv /etc/logrotate.d/myrotate
- -f 是强制轮滚
- -v 显示过程
查看日志文件列表:ls /var/log/my.log*
- 注意:日志文件名后缀的数字越大,文件越旧