我们都知道我们的服务器一般是跑在linux下的,那么一般服务器出问题了以后怎么去排错呢。通常就是日志文件。


# # 第一个问题,日志文件存放在哪里呢?

    常见的,系统默认的都在  /var/log  这个目录下,这是一个绝对路径,直接这么敲就能进来。

     之所以说常见的,那就有特殊的,比方说我们安装的源码包,这相关的日志就在我们安装的源码包下,不在 /var/log 下

 

# # 第二个问题, /var/log 下都有什么常用到的日志文件呢?

linux 日志相关内容_日志文件

linux 日志相关内容_加载_02

 

 # #  日志服务   rsyslogd

只要是由日志服务 rsyslogd 记录的日志文件,他们的格式是一样的。基本日志格式包含以下四列:
  事件产生的时间;
  发生事件的服务器的主机名;
  产生事件的服务名或程序名;
  事件的具体信息。

 

rsyslogd 服务的配置文件 : /etc/rsyslog.conf 配置文件格式

    

# # rsyslogd 文件的内容

[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)
#加载 imuxsock 模块,为本地系统登录提供支持
$ModLoad imklog # provides kernel logging support (previously done by rklogd)
#加载 imklog 模块,为内核登录提供支持
#$ModLoad immark # provides --MARK-- message capability
#加载 immark 模块,提供标记信息的能力
# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514
#加载 UPD 模块,允许使用 UDP 的 514 端口接收采用 UDP 协议转发的日志
# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
#加载 TCP 模块,允许使用 TCP 的 514 端口接收采用 TCP 协议转发的日志
#### GLOBAL DIRECTIVES ####
#定义全局设置
# 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
#包含/etc/rsyslog.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 的日志不记录在/var/log/messages 日志文件中,因为它们都有自己的日志文件。
#所以/var/log/messages 日志是最重要的系统日志文件,需要经常查看!
# The authpriv file has restricted access.
authpriv.* /var/log/secure
#用户认证服务所有级别的日志保存在/var/log/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 *
#所有日志服务的疼痛等级日志对所有在线用户广播。
# 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.
#$WorkDirectory /var/lib/rsyslog # where to place spool files
#$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 ##

 

 # #  自定义日志文件

[root@localhost ~]# vi /etc/rsyslog.conf
#写入一下一句话
*.crit /var/log/alert.log
#把所有服务的“临界点”以上的错误都保存在/var/log/alert.log 日志中
[root@localhost ~]# service rsyslog restart
关闭系统日志记录器: [确定]
启动系统日志记录器: [确定]
#重启 rsyslog 服务
[root@localhost ~]# ll /var/log/alert.log
-rw-------. 1 root root 0 65 10:33 /var/log/alert.log
# alert.log 日志就生成了

 

 

 # # 日志文件的切割与轮替

 日志文件自然是来查看,和排错用的,系统运行,日志文件就会不停的产生, 特别是在生产环境下,日志就更多了。我们一般希望只保留近期的日志,比方说三十天之内的日志。到了第三十一天,就要将第一天的日志删除掉。

  日志轮替最主要的作用就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除。那么旧的日志文件改名之后,如何命名呢?主要依靠  /etc/logrotate.conf 配置文件中“dateext”参数:

  • 如果配置文件中拥有“dateext”参数,那么日志会用日期来作为日志文件的后缀,例如“secure-20180605”。这样的话日志文件名不会重叠,所以也就不需要日志文件的改名,只需要保存指定的日志个数,删除多余的日志文件即可。
  • 如果配置文件中没有“dateext”参数,那么日志文件就需要进行改名了。当第一次进行日志轮替时,当前的“secure”日志会自动改名为“secure.1”,然后新建“secure”日志,用来保存新的日志。当第二次进行日志轮替时,“secure.1”会自动改名为“secure.2”,当前的“secure”日志会自动改名为“secure.1”,然后也会新建“secure”日志,用来保存新的日志,以此类推。
[root@localhost ~]# vi /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
#包含/etc/logrotate.d/目录中所有的子配置文件。也就是说会把这个目录中所有子配置文件读取进来,
#进行日志轮替。
# no packages own wtmp and btmp -- we'll rotate them here
#以下两个轮替日志有自己的独立参数,如果和默认的参数冲突,则独立参数生效。
/var/log/wtmp {
#以下参数仅对此目录有效
monthly
#每月对日志文件进行一次轮替
create 0664 root utmp
#建立的新日志文件,权限是 0664,所有者是 root,所属组是 utmp 组
minsize 1M
#日志文件最小轮替大小是 1MB。也就是日志一定要超过 1MB 才会轮替,否则就算
#时间达到一个月,也不进行日志转储
rotate 1
#仅保留一个日志备份。也就是只有 wtmp 和 wtmp.1 日志保留而已
}
/var/log/btmp {
#以下参数只对/var/log/btmp 生效
missingok
#如果日志不存在,则忽略该日志的警告信息
monthly
create 0600 root utmp
rotate 1
}
# system-specific logs may be also be configured here.

 

 logrotate 配置文件的主要参数

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