日志管理
一、日志文件类型
日志文件对于诊断和解决系统中的问题很有帮助,因为在Linux系统中运行的程序通常会把系统消息和错误消息写入相应的日志文件,这样系统一旦出现问题就会“有据可查”。此外,当主机遭受攻击时,日志文件还可以帮助寻找攻击者留下的痕迹.
在Linux系统中,日志数据主要包括以下三种类型:
【内核及系统日志】
【用户日志】
【程序日志】
Linux系统本身和大部分服务器程序的日志文件默认情况下都放置在目录“/var/log”中。一部分程序公用一个日志文件,一部分程序使用单个日志文件,而有些大型服务器程序由于日志文件不止一个,所以会在“/var/log”目录中建立相应的子目录来存放日志文件,这样既保证了日志文件目录的结构清晰,又可以快速地定位日志文件。有相当一部分日志文件只有root用户才有权限读取,这保证了相关日志信息的安全性。
1.1 查看日志
[root@localhost ~]# cd /var/log/
[root@localhost log]# ll
总用量 7672
drwxr-xr-x. 2 root root 204 12月 8 20:33 anaconda
drwx------. 2 root root 23 12月 8 20:34 audit
-rw-------. 1 root root 0 1月 14 11:33 boot.log
-rw------- 1 root root 26902 12月 27 18:25 boot.log-20211227
-rw------- 1 root root 26098 12月 29 22:12 boot.log-20211229
-rw------- 1 root utmp 768 1月 3 14:54 btmp
-rw-------. 1 root utmp 384 12月 31 16:19 btmp-20220101
-rw------- 1 root root 79472 1月 15 14:24 cron
-rw-------. 1 root root 15305 1月 2 13:40 cron-20220102
-rw------- 1 root root 1456 1月 14 17:58 vmware-network.1.log
-rw------- 1 root root 1155 1月 14 10:59 vmware-network.2.log
-rw------- 1 root root 1455 1月 13 22:43 vmware-network.3.log
-rw-rw-r--. 1 root utmp 85632 1月 15 14:20 wtmp
-rw------- 1 root root 16652 1月 13 22:32 yum.log
-rw-------. 1 root root 2792 1月 1 14:49 yum.log-20220101
在CentOS7中,系统的日志消息由两个服务负责处理:system-journald和rsyslog。对于Linux系统中的一些常见日志文件,有必要熟悉其相应的用途,这样才能在需要的时候更快地找到问题所在,及时解决各种故障。
扩展:system-journald和rsyslog
systemd-journald.service: 记录与服务、开机引导有关的日志,服务在运行的时候才有相关的日志,它以二进制文件的形式保存在内存中,如果系统被重启或关机之后,systemd-journald.service保存的日志就没有了
rsyslog.service:就是把 systemd-journald.service 保存的二进制日志内容,整理转换成文本文档,并且会保存在 /var/log 中
1.1.1 常见的日志及作用
/var/log目录里存放了一些特定于系统和服务的日志文件,由rsyslog维护。下面介绍一些改目录下的常用日志文件及其总用
日志文件 | 作用 |
---|---|
/var/log/message | 大多数系统日志消息记录都在此处。但不包括与身份验证,电子邮件处理相关的定期作业任务等 |
/var/log/secure | 安全和身份验证相关的信息以及登录失败的日志文件。主要ssh远程连接产生的日志。 |
/var/log/maillog | 与邮件相关的信息日志文件 |
/var/log/cron | 与定期执行任务相关的日志文件 |
/var/log/boot.log | 与系统启动相关的信息记录 |
/var/log/dmesg | 与系统启动相关的信息记录 |
/var/log/wtmp | 是一个二进制文件,记录每个用户的登录次数和持续时间等信息,可以用last命令查看其中内容 |
/var/log/btmp | 与/var/log/wtmp类似,但记录的是错误登录系统的日志,使用lastb命令查看其中内容。如果此文件大于1M,就需要注意是否有人在暴力破解 |
注意: 如果服务是采用的yum和rpm方式安装的服务,日志就会默认保存在上述这些位置进行管理,如果是源码进行安装的服务,服务的管理就是在你源码安装服务的位置中
1.2 rsyslog日志服务
1.2.1 日志的分类
分类 | 说明 |
---|---|
daemon | 后台进程相关的信息 |
kern | 内核产生的信息 |
lpr | 打印系统产生的信息 |
authpriv | 安全认证信息 |
cron | 定时计划任务相关的信息 |
邮件相关的信息 | |
syslog | 日志服务本身的信息 |
news | 新闻系统(过时) |
local0~local7 | 8个系统保留的类,供其他程序使用或用户自定义 |
1.2.2 级别(编码越小,级别越高)
编码 | 优先级 | 严重性 |
---|---|---|
7 | debug | 信息对开发人员调试应用程序有用,在操作过程中没用 |
6 | info | 正常的操作信息,可以收集报告,测量吞吐量等 |
5 | notice | 注意,正常但重要的事件 |
4 | warning | 警告,如果不采取措施,将会发生错误,例如文件系统已使用90% |
3 | err | 错误,阻止某个模块或程序的功能不能正常使用 |
2 | crit | 关键错误,已经影响到整个系统或软件不能正常工作 |
1 | alert | 警报,需要立即修改 |
0 | emerg | 紧急,内核崩溃等严重信息 |
注意:日志级别中的"none"代表是忽略该日志名称的所有日志,不在接收,比如“mail.none”
1.2.3 rsyslog日志服务
在rhel5服务名叫syslog,配置文件为/etc/syslog.conf。到了rhel6/rhel7/rhel8时,服务名叫rsyslog,配置文件是/etc/rsyslog.conf。
[root@localhost ~]# vi /etc/rsyslog.conf
#查看配置文件的内容
#rsyslog v5 configuration file
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
### MODULES ###
#加载模块
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
#加载imixsock模块,为本地系统登录提供支持
$ModLoad imklog # provides kernel logging support (previously done by rklogd)
#加载imklog模块,为内核登录提供支持
#$ModLoad immark # provides --MARK-- message capability
#加载immark模块,提供标记信息的能力
# Provides UDP syslog reception
#$ModLoad imudp
#SUDPServerRun 514
#加载UPD模块,允许使用UDP的514端口接收采用UDP协议转发的日志
# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
#加载TCP摸块,允许使用TCP的514编口接收采用TCP协议转发的日志
#### GLOBAL DIRECTIVES ####
#定义全局设置
# Where to place auxiliary files
$WorkDirectory /var/lib/rsyslog
#定义日志服务的工作目录
#Use default timestamp format
ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
#定义曰志的时间使用默认的时间戳格式
#File syncing capability is disabled by default. This feature is usually not required,
#not useful and an extreme performance hit
#$ActionFileEnableSync on
#文件同步功能。默认没有开启,是注释的
#Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf
#包含/etx/tsyslog.d/目录中所有的".conf"子配置文件。也就是说,这个目录中的所有子配置文件也同时生效
#### RULES ####
#日志文件保存规则
#Log all kernel messages to the console.
#Logging much else clutters up the screen.
#kern.* /dev/console
#kern服务.所有曰志级别 保存在/dev/console
#这个日志默认没有开启,如果需要,则取消注释
#Log anything (except mail) of level info or higher.
#Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
#所有服务.info以上级到的日志保存在/var/log/messages日志文件中
#mail, authpriv^ cron的B志不记录在/var/log/messages曰志文件中,因为它们部有自己的曰志文件
#所以/var/log/messages日志是最重要的系统日志文件,需要经常查看
#The authpriv file has restricted access.
authpriv.* /var/log/secure
#用户认证服务所有级别的日志保存在/vai/1og/secure日志文件中
#Log all the mail messages in one place.
mail.* -/var/log/maillog
#mail服务的所有级别的日志保存在/var/log/maillog 日志文件中
#"-"的含义是日志先在内存中保存.当曰志足够多之后.再向文件中保存
# Log cron stuff
cron.* /var/log/cron
#计划任务的所有日志保存在/var/log/cron日志文件中
# Everybody gets emergency messages #所有日志服务的等级日志对所有在线用户广播
*.emerg :omusrmsg:*
#发送信息到指定的用户,*表示所有用户
#Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
#uucp和news曰志服务的crit以上级别的日志保存在/var/log/sppoler曰志文件中
#Save boot messages also to boot.log
local7.* /var/log/boot.log
#loacl7 日志服务的所有日志写入/var/log/boot.log 日志文件中 #会把开机时的检测信息在显示到屏幕的同时写入/var/log/boot.log 日志文件中
# ### begin forwarding rule ###
#定义转发规到
#The statement between the begin ... end define a SINGLE forwarding
#rule. They belong together, do NOT split them. If you create multiple
# forwarding rules, duplicate the whole block!
# Remote Logging (we use TCP for reliable delivery)
#
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again. #SWorkDirectory /var/lib/rsyslog # where to place spool files #$ActionQueueFileName fwdRulel # unique name prefix for spool files
#$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)
#$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
#$ActionQueueType LinkedList t run asynchronously
#$ActionResumeRetryCount -1 # infinite retries if host is down
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional #*•* @6remote-host:514
# ### end of the forwarding rule ##
这里涉及一个最重要的日志输入规则:分类.级别 存放的绝对路径。其中级别还有单独规则,如果.级别则是指记录高于等于某个级别的日志(严重性高于等于,编码低于等于);如果.=级别则是指记录等于某个级别的日志;如果.!级别则是指除某个级别外全部记录;如果.none则是指排除某个类别。
现在我们再回头看上面的配置信息:
所有高于等于info级别的信息,除了邮件,除了安全认证,除了定时计划任务,都存放到/var/log/message,
*.info;mail.none;authpriv.none;cron.none /var/log/messages
/authpriv.* /var/log/secure
mail.* -/var/log/maillog
cron.* /var/log/cron
*.emerg :omusrmsg:*
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
注意:-/var/log/maillog这里的减号是由于以前的邮件比较多,先将数据存储到内存中,达到一定大小再全部写入硬盘,减少I/O的消耗。如果关机不当,数据会消失。
除了上面的配置信息外,还需要注意两个配置信息,如下:
#$UDPServerRun 514 //去掉注释就是允许514端口接收使用UDP协议转发过来的日志
#$InputTCPServerRun 514 //去掉注释就只允许514端口接收使用TCP协议转发过来的日志
1.3 自定义日志类型和存储位置的管理
这里需要用到local0~local7的自定义分类。我们以sshd为例。
1)首先我们需要使用vim打开sshd服务的配置文件,进行修改配置
[root@localhost ~]# vim /etc/ssh/sshd_config
2)然后找到如下位置,将其更改为我们需要的分类local0
#SyslogFacility AUTH
SyslogFacility AUTHPRIV ##定义日志级别
#LogLevel INFO
修改后,如下所示
#SyslogFacility AUTH
SyslogFacility local0 ##定义日志级别
#SyslogFacility AUTHPRIV
#LogLevel INFO
3)接着我们需要使用vim打开rsyslog服务的配置文件,进行修改配置
[root@localhost ~]# vim /etc/rsyslog.conf
在最后添加一行:
local0.* /var/log/sshd.log
4)最后重启sshd和rsyslog两个服务