文章目录
- 1、日志服务简介
- 2、linux系统中的常见日志
- 3、日志服务Rsyslog
- (1)服务对应rpm包
- (2)服务配置文件
- (3)配置文件格式
- 服务名称
- 连接符号
- 日志等级
- 日志记录位置
- (4)配置文件内容
- 4、日志轮替
- (1)配置文件内容详解
- (2)logrotate配置文件的主要参数
- (3)案例解析
1、日志服务简介
在Centos 6.x/Redhat 6.x中日志服务已经由rsyslog取代了原先的syslog服务,rsyslog相比syslog具有一些新的特点:
- 基于TCP网络协议传输日志信息;
- 更安全的网络传输方式;
- 有日志消息的及时分析框架;
- 后台数据库;
- 配置文件中可以写简单的逻辑判断;
- 与syslog配置文件相兼容;
2、linux系统中的常见日志
系统中的日志默认存储路径为:/var/log/
[root@Redhat8 log]# pwd
/var/log
[root@Redhat8 log]# ls
anaconda dnf.librepo.log-20210829 libvirt secure-20210822
audit dnf.librepo.log-20210905 maillog secure-20210829
boot.log-20210821 dnf.log maillog-20210822 secure-20210905
boot.log-20210825 dnf.log.1 maillog-20210829 speech-dispatcher
boot.log-20210902 dnf.rpm.log maillog-20210905 spooler
btmp firewalld mariadb spooler-20210822
btmp-20210901 gdm messages spooler-20210829
chrony glusterfs messages-20210822 spooler-20210905
cron hawkey.log messages-20210829 sssd
cron-20210822 hawkey.log-20210822 messages-20210905 swtpm
cron-20210829 hawkey.log-20210829 private tuned
cron-20210905 hawkey.log-20210905 qemu-ga vmware-vgauthsvc.log.0
cups httpd rhsm wtmp
dnf.librepo.log insights-client samba
dnf.librepo.log-20210822 lastlog secure
日志文件说明:
- /var/log/cron :记录系统定时任务相关日志;
- /var/logcups/ :记录打印信息的日志;
- /var/log/dmesg :记录系统在开机时内核自检的信息,可以使用dmesg命令直接查看内核自检信息;
[root@Redhat8 log]# dmesg
- /var/log/btmp :记录错误登录日志,此文件为二进制文件(保护日志内容,防止陌生用户查看并可修改日志内容),需要使用lastb命令查看;
[root@Redhat8 log]# lastb
- /var/log/lastlog :记录系统中所有用户最后一次的登录时间的日志,此文件为二进制文件,需要使用lastlog命令查看;
[root@Redhat8 log]# lastlog
-
/var/log/maillog :记录邮件信息;
-
/var/log/message :记录系统重要信息的日志,这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题,首先检查此日志文件;
-
/var/log/secure :记录验证和授权方面的信息,只要涉及账户和密码的程序都会被记录;
-
/var/log/wtmp :永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件,此文件为二进制文件,需要使用last命令查看;
[root@Redhat8 log]# last -
/var/log/utmp :记录当前已经登录的用户信息,此文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息,此文件为二进制文件,需要使用w、who、users等命令查看;
[root@Redhat8 log]# w
00:09:31 up 9 days, 5:59, 2 users, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root tty2 tty2 01Sep21 9days 9:11 0.00s /usr/libexec/gsd-disk-utility-notify
root pts/0 10.81.10.55 23:58 0.00s 0.03s 0.00s w
[root@Redhat8 log]#
[root@Redhat8 log]# who
root tty2 2021-09-01 18:12 (tty2)
root pts/0 2021-09-10 23:58 (10.81.10.55)
[root@Redhat8 log]# users
root root
除了系统默认的日志之外,采用rpm方式安装的系统服务也会默认将日志记录在/var/log/目录下,不过这些日志不是由rsyslog服务来记录和管理的,而是各个服务使用自己的日志管理文件来记录自身日志;
/var/log/httpd/
/var/log/mail/
/var/log/samba/
/var/log/ssd/
3、日志服务Rsyslog
(1)服务对应rpm包
[root@Redhat8 log]# rpm -qa rsyslog
rsyslog-8.1911.0-3.el8.x86_64
(2)服务配置文件
[root@Redhat8 log]# rpm -qc rsyslog
/etc/logrotate.d/syslog
/etc/rsyslog.conf
/etc/sysconfig/rsyslog
(3)配置文件格式
#服务名称[连接符号]日志等级 日志记录位置
authpriv.* /var/log/secure
服务名称
- auth (LOG_AUTH) :安全和认证相关消息,不推荐使用authpriv替代;
- authpriv (LOG_AUTHPRIV) :安全和认证相关消息,私有;
- cron (LOG_CRON) :系统定时任务cront与at产生的相关日志;
- daemon (LOG_DAEMON) :各个守护进程产生的日志;
- ftp (LOG_FTP) :ftp守护进程产生的日志;
- kern (LOG_KERN) :内核产生的日志;
- local0-local7 (LOG_LOCAL0-7) :为本地使用预留的服务;
- lpr (LOG_LPR) :打印产生的日志;
- mail (LOG_MAIL) :邮件收发日志;
- news (LOG_NEWS) :与新闻服务器相关的日志;
- syslog (LOG_SYSLOG) :有syslog服务产生的日志;
- user (LOG_USER) :用户等级类别的日志;
- uucp (LOG_UUCP) :uucp子系统的日志信息;
…
连接符号
- " . " :只要比后面的等级高的(包含该等级)日志都记录下来;
- " .= " :只记录所需等级的日志,其他等级不记录;
- " .! " :除了该等级的日志外其他等级全部记录;
日志等级
- debug (LOG_DEBUG) :一般的调试信息说明;
- info (LOG_INFO) :基本的通知信息;
- notice (LOG_NOTICE) :普通信息,有一定重要性;
- warning (LOG_WARNING) :警告信息,不会影响到服务的运行;
- err (LOG_ERR) :错误信息,可以影响服务或系统的运行;
- crit (LOG_CRIT) :临界状况信息,比err等级严重;
- alert (LOG_ALERT) :警告状态信息,比crit等级严重,需要立即采取行动;
- emerg (LOG_EMERG) :疼痛等级信息,系统无法使用;
-
- :所有等级信息;
- none :忽略此日志服务;
日志记录位置
即当前日志输出到那个文件中进行保存,或者输出到某个远程日志服务器上(UDP 514),日志的记录位置是固定的;
- 日志文件的绝对路径:最常见的保护方法;
- 系统设备文件:代表打印机输出方式;
- 转发到远程主机:使用TCP/UDP端口发送到远程主机上,若使用"@192.168.10.10:514",就会把日志内容使用UDP协议发送到192.168.10.10的UDP 514端口,若使用"@@192.168.10.10:514",就会把日志内容使用TCP协议发送到192.168.10.10的TCP 514端口;
- 用户名:此处可以定义接受该日志用户名," * " 代表所有用户;
- " ~ " 代表忽略此日志,不定义接收;
(4)配置文件内容
[root@Redhat8 log]# cat /etc/rsyslog.conf
# rsyslog configuration file
# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# or latest version online at http://www.rsyslog.com/doc/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html
#### MODULES ####
#加载模块
module(load="imuxsock" # provides support for local system logging (e.g. via logger command)
#加载imuxsock模块,为本地系统登录提供支持
SysSock.Use="off") # Turn off message reception via local log socket;
# local messages are retrieved through imjournal now.
module(load="imjournal" # provides access to the systemd journal
StateFile="imjournal.state") # File to store the position in the journal
#module(load="imklog") # reads kernel messages (the same are read from journald)
#加载imklog模块,为内核登录提供支持
#module(load"immark") # provides --MARK-- message capability
#加载immark模块,提供标记信息的能力
# Provides UDP syslog reception
# for parameters see http://www.rsyslog.com/doc/imudp.html
#module(load="imudp") # needs to be done just once
#input(type="imudp" port="514")
#加载UDP模块,允许使用UDP的514端口接收采用UDP协议转发的日志
# Provides TCP syslog reception
# for parameters see http://www.rsyslog.com/doc/imtcp.html
#module(load="imtcp") # needs to be done just once
#input(type="imtcp" port="514")
#加载TCP模块,允许使用TCP的514端口接收采用TCP协议转发的日志
#### GLOBAL DIRECTIVES ####
#定义全局设置
# Where to place auxiliary files
global(workDirectory="/var/lib/rsyslog")
#工作目录位置
# Use default timestamp format
module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat")
#定义日志的时间使用默认的时间戳格式
# Include all config files in /etc/rsyslog.d/
include(file="/etc/rsyslog.d/*.conf" mode="optional")
#包含/etc/rsyslog.d/目录中的所有以conf子配置文件
#### RULES ####
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#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
#所有日志存放在messages文件内,除了邮件、认证、定时任务
# The authpriv file has restricted access.
authpriv.* /var/log/secure
#认证日志记录在secure文件内
# Log all the mail messages in one place.
mail.* -/var/log/maillog
#邮件日志记录在maillog文件内
# Log cron stuff
cron.* /var/log/cron
#定时任务记录在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
# Save boot messages also to boot.log
local7.* /var/log/boot.log
# ### sample forwarding rule ###
#action(type="omfwd"
# 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.
#queue.filename="fwdRule1" # unique name prefix for spool files
#queue.maxdiskspace="1g" # 1gb space limit (use as much as possible)
#queue.saveonshutdown="on" # save messages to disk on shutdown
#queue.type="LinkedList" # run asynchronously
#action.resumeRetryCount="-1" # infinite retries if host is down
# Remote Logging (we use TCP for reliable delivery)
# remote_host is: name/ip, e.g. 192.168.0.1, port optional e.g. 10514
#Target="remote_host" Port="XXX" Protocol="tcp")
4、日志轮替
日志轮替的作用就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超过保存的范围之后,就会进行删除,那么旧日志文件改名之后,命令规范即参考下面配置文件内容;
若配置文件中有 dateext 参数,则日志文件名称不会重叠,此参数不需要日志文件改名,只需要保存指定的日志个数,删除多余的日志文件即可;
[root@Redhat8 log]# ll | grep -w secure
-rw-------. 1 root root 1790 Sep 14 21:50 secure
-rw-------. 1 root root 12375 Aug 21 22:59 secure-20210822
-rw-------. 1 root root 82846 Aug 28 02:19 secure-20210829
-rw-------. 1 root root 7135 Sep 3 21:00 secure-20210905
-rw-------. 1 root root 6715 Sep 11 01:50 secure-20210912
若没有 dateext ,那么日志文件就需要进行改名了,第一次进行日志轮替时,当前的 secure 日志会自动改名为 secure.1 ,然后新建 secure 日志用来保存新的日志,当第二次进行轮替时, secure.1 会自动改名为 secure.2 ,当前的 secure 日志会自动改名为 secure.1 然后也会新建 secure 日志,用来保存新日志,以此类推;
(1)配置文件内容详解
[root@Redhat8 log]# cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# 每周对日志文件进行一次轮替
# keep 4 weeks worth of backlogs
rotate 4
#最多保存四次轮替文件,产生第5个文件则删除第一个备份日志文件
# create new (empty) log files after rotating old ones
create
#在日志轮替时,自动新建新的日志文件
# use date as a suffix of the rotated file
dateext
#以日期作为日志文件后缀进行命名
# uncomment this if you want your log files compressed
#compress
#日志文件是否压缩,如果取消注释,则日志会在转存储过程时进行压缩
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
#包含子目录/etc/logrotate.d中的所有配置文件
# system-specific logs may be also be configured here.
[root@Redhat8 logrotate.d]# ll /etc/logrotate.d/
total 80
-rw-r--r--. 1 root root 91 Dec 11 2019 bootlog
-rw-r--r--. 1 root root 130 Feb 19 2018 btmp
-rw-r--r--. 1 root root 160 May 10 2019 chrony
-rw-r--r--. 1 root root 71 Feb 15 2020 cups
-rw-r--r--. 1 root root 212 Nov 25 2019 dnf
-rw-r--r--. 1 root root 194 Dec 2 2019 httpd
-rw-r--r--. 1 root root 172 Nov 5 2019 iscsiuiolog
-rw-r--r--. 1 root root 165 Mar 16 2020 libvirtd
-rw-r--r--. 1 root root 142 Mar 16 2020 libvirtd.qemu
-rw-r--r--. 1 root root 492 Aug 16 2019 mariadb
-rw-r-----. 1 root named 514 Feb 27 2020 named
-rw-r--r--. 1 root root 106 Jun 2 2015 numad
-rw-r--r--. 1 root root 408 Aug 13 2018 psacct
-rw-r--r--. 1 root root 155 Feb 13 2020 samba
-rw-r--r--. 1 root root 237 Mar 17 2020 sssd
-rw-r--r--. 1 root root 71 Apr 3 2020 subscription-manager
-rw-r--r--. 1 root root 226 Dec 11 2019 syslog
-rw-r--r--. 1 root root 32 Feb 19 2018 up2date
-rw-r--r--. 1 root root 100 Nov 4 2019 wpa_supplicant
-rw-r--r--. 1 root root 145 Feb 19 2018 wtmp
(2)logrotate配置文件的主要参数
- daily :日志的轮替周期是每天;
- weekly :日志的轮替周期是每周;
- monthly :日志的轮替周期是每月;
- rotate number :保留日志文件的个数,0代表无备份;
- compress :日志轮替时旧日志文件是否进行压缩;
- create mode owner group :创建新日志文件时是否指定日志的权限、所属者、所属组;
- mail address :当日志轮替时,输出内容通过邮件外发到指定地址;
- missingok :如果日志不存在,则忽略该日志的告警信息;
- notifempty :如果日志文件为空,则不进行日志轮替;
- minsize number :日志轮替最小值,达到该值才会进行轮替;
- size number :设置轮替为指定大小,超过此大小则进行轮替,取消时间轮替;
- dateext :以日期作为日志轮替的文件后缀;
- sharedscripts :在此关键字之后的脚本只执行一次;
- prerotate/endscript :在日志轮替之前执行脚本命令,endscript表示脚本结束;
- posttrotate/endscript :在日志轮替之后执行脚本命令,endscript表示脚本结束;
(3)案例解析
[root@Redhat8 logrotate.d]# cat ./syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
missingok
sharedscripts
#以下脚本执行一次
postrotate
#在日志轮替之后执行脚本
/usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true
#重启rsyslog服务,并将结果返回为空
endscript
#脚本执行结束
}
prerotate与posttrotate主要用于在日志轮替的同时,执行指定的脚本文件,一般用于日志轮替之后重启服务,需要强调的是,如果日志是写入rsyslog服务的配置文件的,那么把新日志加入logrotate后,一定要重启rsyslog服务,否则你会发现虽然新日志建立了,但是数据还是写入了旧的日志当中,那是因为logrotate文件知道日志轮替了,但是rsyslog服务却不知道,因此就需要重启服务来使得rsyslog服务知道日志轮替了来满足将数据写入新日志文件内;
这里可以使用chattr给文件加入a属性,如果系统文件加入了a属性,那么这个文件就只能增加数据,不能删除和修改已有的数据(root用户也不能修改或删除),此方法可以保护日志文件不被恶意修改;
#chattr
[root@Redhat8 shell]# touch test
[root@Redhat8 shell]# ll
total 0
-rw-r--r--. 1 root root 0 Sep 14 23:51 test
[root@Redhat8 shell]# chattr +a test
[root@Redhat8 shell]# ll
total 0
-rw-r--r--. 1 root root 0 Sep 14 23:51 test
[root@Redhat8 shell]# echo aaa > test
-bash: test: Operation not permitted
[root@Redhat8 shell]# rm -rf test
rm: cannot remove 'test': Operation not permitted
[root@Redhat8 shell]# chattr -a test
[root@Redhat8 shell]# echo aaa > test
[root@Redhat8 shell]# cat test
aaa