Linux 日志管理服务

服务简述

在 CentOS 6.x 中日志服务已经由 rsyslogd 取代了原先的 syslogd 服务。Redhat 认为 syslogd 已经不能满足在工作中的需求,rsyslogd 相比 syslogd 具有一些新的特点:

  • 基于 TCP 网络协议传输日志信息;
  • 更安全的网络传输方式;
  • 有日志消息的及时分析框架;
  • 后台数据库;
  • 配置文件中可以写简单的逻辑判断;
  • 与 syslog 配置文件相兼容;

image-20220213163245140

日志文件

日志文件路径日志说明
/var/log/cron记录了系统定时任务相关的日志
/var/log/cups/记录打印信息的日志
/var/log/dmesg记录了系统在开机时内核自检的信息;使用 dmesg 命令直接查看内核自检信息
/var/log/btmp二进制文件,记录错误登录的日志;使用 lastb 命令查看
/var/log/lastlog二进制文件,记录系统中所有用户最后一次的登录时间的日志;使用lastlog 命令查看
/var/log/mailog记录邮件信息
/var/log/message记录系统重要信息的日志;如果系统出现问题时,首先要检查的就应该是这个日志文件
/var/log/secure记录验证和授权方面的信息
/var/log/wtmp二进制文件,永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、 关机事件;使用last命令查看
/var/run/utmp二进制文件,记录当前已经登录的用户的信息;随着用户的登录和注销 而不断变化,只记录当前登录用户的信息;使用w等命令查看
其他/var/log/httpd/、/var/log/samba/等通过rpm方式安装的系统服务也会记录在/var/log中,不过是由自己的日志管理文档来记录日志的

image-20220213164026335

文件格式

由日志服务 rsyslogd 记录的日志文件,他们的格式是一样的,基本日志格式包含以下四列:

  • 事件产生的时间;
  • 发生事件的服务器的主机名;
  • 产生事件的服务名或程序名;
  • 事件的具体信息。

配置文件

/etc/rsyslog.conf:配置文件路径

文件格式:服务名称[连接符号]日志等级-----日志记录位置

# Log cron stuff
cron.*                                                  /var/log/cron

rsyslogd 服务代管的服务日志:

服务名称服务说明
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)有 syslogd 服务产生的日志信息虽然服务名称已经改为rsyslogd,但是很多配置都还是沿用了 syslogd 的,这里 并没有修改服务名。
user(LOG_USER)用户等级类别的日志信息
uucp(LOG_UUCP)uucp 子系统的日志信息,uucp 是早期 linux 系统进行数 据传递的协议,后来也常用在新闻组服务中。

连接符号:

日志的格式:日志服务[连接符号]日志等级 日志记录位置

连接符号说明:

  • “.”代表只要比后面的等级高的(包含该等级)日志都记录下来。比如:“cron.info”代表 cron 服务产生的日志,只要日志等级大于等于 info 级别,就记录

  • “.=”代表只记录所需等级的日志,其他等级的都不记录。比如:“*.=emerg”代表任何日志服务产生的日志,只要等级是 emerg 等级就记录

  • “.!”代表不等于,也就是除了该等级的日志外,其他等级的日志都记录。

日志等级

等级名称等级说明
debug(LOG_DEBUG)一般的调试信息说明
info(LOG_INFO)基本的通知信息
notice(LOG_NOTICE)普通信息,但是有一定的重要性
warning(LOG_WARNING)警告信息,但是还不回影响到服务或系统的运行
err(LOG_ERR)错误信息,一般达到 err 等级的信息以及可以影响到服务或系 统的运行了
crit(LOG_CRIT)临界状况信息,比 err 等级还要严重
alert(LOG_ALERT)警告状态信息,比 crit 还要严重。必须立即采取行动
emerg(LOG_EMERG)疼痛等级信息,系统已经无法使用了
*代表所有日志等级
none忽略这个日志服务,该服务的 所有日志都不再记录。

记录位置

日志记录位置就是当前日志输出到哪个日志文件中保存,当然也可以把日志输出到打印机打印,或者输出到远程日志服务器上(当然日志服务器要允许接收才行)。

  • 日志文件的绝对路径。这是最常见的日志保存方法,如“/var/log/secure”就是保存系统验证和授权信息日志的。
  • 系统设备文件。如“/dev/lp0”代表第一台打印机,如果日志保存位置是打印机设备的话,当有日志时就会在打印机打印。
  • 转发给远程主机。因为可以选择使用 TCP 协议和 UDP 协议传输日志信息,所以有两种发送格式。如使用“@192.168.0.210:514”,就会把日志内容使用 UDP 协议发送到192.168.0.210 的 UDP 514 端口上;如果使用“@@192.168.0.210:514”就会把日志内容使用 TCP 协议发送到 192.168.0.210 的 TCP 514 端口上,其中 514 是日志服务默认端口。当然只要 192.168.0.210 同意接收此日志,就可以把日志内容保存在日志服务器上。
  • 用户名。如“root”,就会把日志发送给 root 用户,当然 root 要在在线,否则就收不到日志信息了。发送日志给用户时,可以使用*代表发送给所有在线用户,如“mail.**”就会把 mail 服务产生的所有级别的日志发送给所有在线用户。如果需要把日志发送给多个在线用户,用户名之间用“,”分隔。忽略或丢弃日志。如果接受日志的对象是“~”,代表这个日志不会记录,而被直接丢弃。如“local3.*~”代表忽略 local3 服务类型所有的日志都不记录。

rsyslog.conf

# rsyslog 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 ####					----------加载的模块

# The imjournal module bellow is now used as a message source instead of imuxsock.
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
# ----加载imuxsock模块,为本地系统登陆提供支持
$ModLoad imjournal # provides access to the systemd journal
# imjournal支持对系统日志的访问
#$ModLoad imklog # reads kernel messages (the same are read from journald)
# imklog 模块,为内核登录提供支持
#$ModLoad immark  # provides --MARK-- message capability
# immark模块,提供标记信息的能力
# Provides UDP syslog reception	-----------------UPD 模块,允许使用 UDP 的 514 端口接收采用 UDP 协议转发的日志
#$ModLoad imudp
#$UDPServerRun 514

# Provides TCP syslog reception------------------TCP 模块,允许使用 TCP 的 514 端口接收采用 TCP 协议转发的日志
#$ModLoad imtcp
#$InputTCPServerRun 514


#### 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	# -----------------------包含子配置文件

# Turn off message reception via local log socket;
# local messages are retrieved through imjournal now.
$OmitLocalLogging on	#-----------------------省略本地登陆

# File to store the position in the journal
$IMJournalStateFile imjournal.state


#### 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 日志中

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog # ----------“-”号的含义是日志先在内存之中保存,当日志够多之后,再向文件中保存


# Log cron stuff
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

# Save boot messages also to boot.log
local7.*                                                /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.
#$ActionQueueFileName fwdRule1 # 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   # 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
#*.* @@remote-host:514
# ### end of the forwarding rule ###

操作实践

定义自己的日志:把所有服务的info级别的日志都保存在/var/log/info.log中

# 修改配置文件:vim /etc/rsyslog.conf 
vim /etc/rsyslog.conf 
# 添加以下规则
*.=info	/var/log/info.log
# 重启服务
systemctl restart rsyslog
# 验证是否生成了相关文件

image-20220213172633900

image-20220213172716465

日志轮替

日志轮替最主要的作用就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除。那么旧的日志文件改名

之后,如何命名呢?主要依靠 /etc/logrotate.conf 配置文件中“dateext”参数:

  • 如果配置文件中拥有“dateext”参数,那么日志会用日期来作为日志文件的后缀,例如 “secure-20180605”。这样的话日志文件名不会重叠,所以也就不需要日

    志文件的改名, 只需要保存指定的日志个数,删除多余的日志文件即可。

  • 如果配置文件中没有“dateext”参数,那么日志文件就需要进行改名了。当第一次进行日志轮替时,当前的“secure”日志会自动改名为“secure.1”,然后新

    建“secure”日志, 用来保存新的日志。当第二次进行日志轮替时,“secure.1”会自动改名为“secure.2”, 当前的“secure”日志会自动改名为“secure.1”,然后也

    会新建“secure”日志,用来保存新的日志,以此类推。

logrotate 配置文件:

[root@yunmx log]# cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly	#---------------------每周对日志进行一次轮替
	
# keep 4 weeks worth of backlogs
rotate 4	# -------保存 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	# -----------包含的其他子配置文件

# no packages own wtmp and btmp -- we'll rotate them here	--------以下有自己独立的参数配置,独立参数优先级更高
/var/log/wtmp {
    monthly			# 每月轮替
    create 0664 root utmp	# 建立新的日志文件,并赋予相关权限
        minsize 1M			# 日志轮替的大小是1M,超过1M才轮替
    rotate 1				# 保留一个月
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.

主要的参数说明:

参数参数说明
daily日志的轮替周期是每天
weekly日志的轮替周期是每周
monthly日志的轮替周期是每月
rotate 数字保留的日志文件的个数;0 表示没有备份
compress日志轮替时,旧的日志进行压缩
create mode owner group建立新日志,同时指定新日志的权限与所有者和所属组
mail address当日志轮替时,输出内容通过邮件发送到指定的邮件地址
missingok如果日志不存在,则忽略该日志的警告信息
notifempty如果日志为空文件,则不进行日志轮替
minsize 大小日志轮替的最小值。也就是日志一定要达到这个最小值才会轮 替,否则就算时间达到也不轮替
size 大小日志只有大于指定大小才进行日志轮替,而不是按照时间轮替。 如 size 100k
dateext使用日期作为日志轮替文件的后缀
sharedscripts在此关键字之后的脚本只执行一次
prerotate/endscript在日志轮替之前执行脚本命令。endscript 标示 prerotate 脚本结束
postrotate/endscript在日志轮替之后执行脚本命令。endscript 标示 postrotate 脚本结束

prerotate 和 postrotate 主要用于在日志轮替的同时,执行指定的脚本,一般用于日志轮替之后的重启服务。

举例说明:如果要把nginx服务的日志加入日志轮替,在postrotate/endscript之间就要执行重启rsyslog服务和ngnx服务的脚本。

logrotate 命令

我们日志轮替之所以可以在指定的时间备份日志,其实也要依赖系统定时任务;/etc/cron.daily/目录,就会发现这个目录中是有 logrotate 文件,

logrotate 通过这个文件依赖定时任务执行的。

image-20220213180210273

命令格式:logrotate [选项] 配置文件名

选项:

  • -v: 显示日志轮替过程。加了-v 选项,会显示日志的轮替的过程
  • -f: 强制进行日志轮替。不管日志轮替的条件是否已经符合,强制配置文件中所有 的日志进行轮替
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值