日志工具
- 2.1 rsyslogd(syslogd)
- 2.1.1 介绍
- 2.1.2 语法
- 2.1.3 配置文件syslog.conf
- 2.1.4 syslog.conf的配置规则
- 2.1.5 示例
- 2.2 logrotate
- 2.2.1 介绍
- 2.2.2 配置文件
- 2.2.3 示例一
- 2.2.4 示例二
- 2.3 dmesg
- 2.3.1 命令简介
- 2.3.2 使用示例
- 2.4 关于重启/死机的日志
- 2.4.1 last
- 2.4.2 日志查看
2.1 rsyslogd(syslogd)
官网 https://www.rsyslog.com/doc/master/
2.1.1 介绍
rsyslog是一个开源的软件程序,它负责写入日志。它记录绝大部分的日志记录,和系统有关的、安全、认证ssh和su、计划任务at和cron等日志。
rsyslogd是syslogd的升级版,其配置语法与syslogd的配置文件一致。ubuntu-gnome-16.04使用的是rsyslogd。
syslogd记录的日志一般在/var/log/下,当然也有存储在另外的服务器上的。因为syslogd记录的信息实在是太重要了,所以还要涉及日志安全的问题。
一般系统中日志信息:
/var/log/secure: 记录系统的安全信息,比如ssh、ftp、pop3等;
/var/log/wtmp: 记录谁曾经登陆过系统,由于本日志被编码过,所以只能用last命令查看;
/var/log/boot.log: 顾名思义,记录开启或者关闭系统及武夫的信息;
/var/log/message:系统发生的错误信息都会记录在这个日志中,比如iptables中您使用log功能的日志;
/var/log/mail: 邮件信息
/var/log/httpd/、/var/log/mysqld.d ,记录的就是这些服务的日志。
2.1.2 语法
RSYSLOGD(8) Linux System Administration
NAME
rsyslogd - reliable and extended syslogd
SYNOPSIS
rsyslogd [ -d ] [ -D ] [ -f config file ] [ -i pid file ] [ -n ] [ -N level ] [ -C ] [ -v ]
DESCRIPTION
Rsyslogd is a system utility providing support for message logging. Support of both internet and unix domain sockets enables
this utility to support both local and remote logging.
[root@dbc-server-554 log]# systemctl status rsyslog.service
● rsyslog.service - System Logging Service
Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2023-02-23 17:40:11 CST; 3 days ago
...
Hint: Some lines were ellipsized, use -l to show in full.
大多数情况下,我们不必使用参数启动,因为系统已经为我们启动好了。如果需要查阅参数,可以通过man rsyslog
2.1.3 配置文件syslog.conf
rsyslogd的配置文件一般在/etc/rsyslog.conf
中。这个文件依然遵循你所见过的其它配置文件的规则,比如 # 是注释。您可以看看您的syslogd都在帮助您记录着什么。这是我的rsyslog.conf中的一部分
[root@zabbix-svr-2 ~]# cat /etc/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)
$ModLoad imjournal # provides access to the systemd journal
#$ModLoad imklog # reads kernel messages (the same are read from journald)
#$ModLoad immark # provides --MARK-- message capability
# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514
# Provides TCP syslog reception
#$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
# 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
# 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
*.warning /var/log/syslog
# ### 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
...
# ### end of the forwarding rule ###
我们为了显示syslog内容,添加的*.warning /var/log/syslog
我的配置
[root@zabbix-svr-2 ~]# cat /etc/rsyslog.conf | grep -v ^# | grep -v ^$
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
$WorkDirectory /var/lib/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
$OmitLocalLogging on
$IMJournalStateFile imjournal.state
*.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
*.warning /var/log/syslog
2.1.4 syslog.conf的配置规则
配置规则:服务名称.信息等级 存放或者显示地点
服务名称
mail http at cron kern 等等。
信息等级
- info: 一些提示信息资料;
- notice: 需要您注意的信息;
- warn或者waring: 警告信息;
上面三个信息虽然是提醒您注意,但是却还没有到错误的情况。下面的信息就要注意了。
- error或者err: 错误信息。您需要仔细检查发生错误的原因了;
- crit: 很严重的错误,到达临界点了;
- alert: 警告! 是否想起了“Red Alert”?不过,在这里这可是相当严重的错误啊;
- emerg或者panic:系统混乱,重做吧;
特别的:
- debug: 将显示很多信息;
- none: 顾名思义,什么信息也不记录。
存放或者显示地点
日志的绝对路径: 比如/var/log;
您的一个用户 ;
网络上的主机: @log.company.com
打印机: /dev/lp0
2.1.5 示例
vi /etc/rsyslog.conf
#在配置中加入
*.warning /var/log/syslog
#重启syslog服务,使配置生效
service rsyslog restart 或者 /bin/systemctl restart rsyslog.service
当加入如下安全策略,/var/log/syslog 就会记录
vi /etc/pam.d/system-auth
#增加 认证失败策略
auth required pam_tally2.so deny=6 onerr=fail no_magic_root unlock_time=120
参数:
auth 要求并验证密码
required 必须success才能进行继续
pam_tally2.so 身份验证模块
deny=6 失败登录次数超过6次后拒绝访问
onerr=fail 表示连续失败
unlock_time=120 超出失败登录次数限制后,120秒后解锁
no_magic_root 用户例外root用户不在限制范围
当配置如上策略后,用户登录时 就会在 /var/log/secure 和/var/log/syslog 就会有如下记录
2.2 logrotate
日志管理工具(日志文件的轮转/切割)
2.2.1 介绍
默认情况下,文件的日志信息会通过logrotate日志管理工具定期清理。logrotate的配置文件是/etc/logrotate.conf
,此处是logrotate的缺省设置,通常不需要对它进行修改。日志文件的轮循压缩等设置存放在独立的配置文件中,它(们)放在/etc/logrotate.d/目录下,它会覆盖缺省设置。
通俗的讲:logrotate是对日志文件做轮换。就是把现在的log命名为log.1,然后继续写log。如果存在log.1就命名log.1为log.2然后命名log为log.1,依此类推,但并非没有尽头。这个尽头就是您在logrotate的配置文件中的定义,我的系统默认的是到4。那么对log.4做什么操作呢?删除。
如果不想记录相关信息,则可以直接将相关文件删除即可。如果系统不存在该文件,则需要在此路径touch一个文件就可以继续记录相关信息了。
logrotate日志轮转
① 如果没有日志轮转,日志文件会越来越大,最后导致日志打不开或者是打开时间过长
② 将丢弃系统中最旧的日志文件,以节省空间
③ logrotate本身不是系统进程,即日志的轮转不会自动执行,它是通过写到相应的配置文件中使用计划任务crond每天执行
④ 对日志的切割,你只需要给他定义一个规则
2.2.2 配置文件
[root@logrotate ~]# rpm -qa |grep logrotate
logrotate-3.7.8-16.el6.x86_64
logrotate是一个异类,安装即可用
系统默认都是安装好了的,没有安装就安装一下,并且这个程序安装后不用开启服务,修改后写到配置文件后会自动执行
logrotate 配置文件:
主配置文件决定全局日志轮转规则,子配置文件决定特定服务(rpm安装的程序)的日志轮转规则
服务日志的轮转规则文件是在安装rpm包时就自动提供的,无需人为手动编写,只有自己创建的日志文件才需要自己编写日志轮转规则文件
logrotate主配置文件:
[root@zabbix-svr-2 ~]# cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# 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
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
# system-specific logs may be also be configured here.
子配置文件:
[root@zabbix-svr-2 ~]# ls /etc/logrotate.d/ -l
total 40
-rw-r--r--. 1 root root 91 Sep 30 2020 bootlog
-rw-r--r--. 1 root root 160 Sep 19 2018 chrony
-rw-r--r--. 1 root root 93 Sep 30 2020 firewalld
-rw-r--r--. 1 root root 810 Oct 1 2020 mariadb
-rw-r--r--. 1 root root 351 Oct 19 06:47 nginx
-rw-r--r--. 1 root root 224 Oct 13 2020 syslog
-rw-r--r--. 1 root root 100 Oct 30 2018 wpa_supplicant
-rw-r--r--. 1 root root 103 Oct 1 2020 yum
-rw-r--r--. 1 root root 132 Jan 30 03:05 zabbix-agent
-rw-r--r--. 1 root root 131 Jan 30 03:05 zabbix-proxy
[root@zabbix-svr-2 ~]# cat /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
missingok
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
[root@zabbix-svr-2 ~]# cat /etc/logrotate.d/bootlog
/var/log/boot.log
{
missingok
daily
copytruncate
rotate 7
notifempty
}
主要参数
参数 | 参数说明 |
---|---|
daily | 日志的轮替周期是毎天 |
weekly | 日志的轮替周期是每周 |
monthly | 日志的轮控周期是每月 |
rotate n | 保留的日志文件的个数。0指没有备份 |
compress | 当进行日志轮替时,对旧的日志进行压缩 |
create mode owner group | 建立新日志,同时指定新日志的权限与所有者和所属组.如create 0600 root utmp |
mail address | 当进行日志轮替时.输出内存通过邮件发送到指定的邮件地址 |
missingok | 如果日志不存在,则忽略该日志的警告信息 |
nolifempty | 如果日志为空文件,則不进行日志轮替 |
minsize 大小 | 日志轮替的最小值。也就是日志一定要达到这个最小值才会进行轮持,否则就算时间达到也不进行轮替 |
size大小 | 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替,如size 100k |
dateext | 使用日期作为日志轮替文件的后缀,如secure-20130605 |
sharedscripts | 在此关键宇之后的脚本只执行一次 |
prerotate/endscript | 在日志轮替之前执行脚本命令。endscript标识prerotate脚本结束 |
postrotate/endscripl | 在日志轮替之后执行脚本命令。endscripi标识postrotate脚本结束 |
hourly、daily、weekly、monthly、yearly //轮转的周期
rotate 4 //保留4份
create //轮转后创建新文件 create mode owner group 创建新文件、权限、属主、属组
dateext //使用日期作为后缀
compress //是否压缩
minsize 1M //最小达到1M才轮转,即到了规定的时间未达到大小不会轮转
maxsize 100M //最大达到100M才轮状
missingok //丢失不提示
notifempty //如果为空,不轮转
这些参数中较为难理解的应该是 prerotate/endscript 和 postrotate/endscript,我们利用man logrotate
中的例子来解释一下这两个参数。例如:
"/var/log/httpd/access.log" /var/log/httpd/error.log {
#日志轮替的是/var/log/httpd/中RPM包默认安装的apache正确访问日志和错误日志
rotate 5
#轮替5次
mail www@my.org
#把信息发送到指定邮箱
size 100k
#日志大于100KB时才进行日志轮替,不再按照时间轮替
sharedscripts
#以下脚本只执行一次
postrotate
#在日志轮替结束之后,执行以下脚本
/usr/bin/killall -HUP httpd
#重启apache 服务
endscript
#脚本结束
}
prerotate 和 postrotate 主要用于在日志轮替的同时执行指定的脚本,一般用于日志轮替之后重启服务。这里强调一下,如果你的日志是写入 rsyslog 服务的配置文件的,那么把新日志加入 logrotate 后,一定要重启 rsyslog 服务,否则你会发现,虽然新日志建立了,但数据还是写入了旧的日志当中。那是因为虽然 logrotate 知道日志轮替了,但是 rsyslog 服务并不知道。
同理,如果采用源码包安装了 apache、Nginx 等服务,则需要重启 apache 或 Nginx 服务,同时还要重启 rsyslog 服务,否则日志也不能正常轮替。
不过,这里有一个典型应用就是给予特定的日志加入 chattr 的 a 属性。如果系统文件加入了 a 属性,那么这个文件就只能增加数据,而不能删除和修改已有的数据,root 用户也不例外。
因此,我们会给重要的日志文件加入 a 属性,这样就可以保护日志文件不被恶意修改。不过,一旦加入了 a 属性,那么在进行日志轮替时,这个日志文件是不能被改名的,当然也就不能进行日志轮替了。我们可以利用 prerotate 和 postrotate 参数来修改日志文件的 chattr 的 a 属性。
2.2.3 示例一
如果有些日志默认没有加入日志轮替(比如源码包安装的服务的日志,或者自己添加的日志),那么这些日志默认是不会进行日志轮替的,这样当然不符合我们对日志的管理要求。如果需要把这些日志也加入日志轮替,那该如何操作呢?
这里有两种方法:
第一种方法是直接在 /etc/logrotate.conf 配置文件中写入该日志的轮替策略,从而把日志加入轮替;
第二种方法是在 /etc/logrotate.d/ 目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被包含到主配置文件中,所以也可以把日志加入轮替。
我们推荐第二种方法,因为系统中需要轮替的日志非常多,如果全部直接写入 /etc/logrotate.conf 配置文件,那么这个文件的可管理性就会非常差,不利于此文件的维护。
以/var/log/alert.log
为例,具体步骤如下:
[root@localhost ~]# chattr +a /var/log/alert.log #先给日志文件赋予chattr的a属性,保证日志的安全
[root@localhost ~]# vi /etc/logrotate.d/alter
#创建alter轮替文件,把/var/log/alert.log加入轮替
/var/log/alert.log {
weekly
#每周轮替一次
rotate 6
#保留6个轮替曰志
sharedscripts
#以下命令只执行一次
prerotate
#在日志轮替之前执行
/usr/bin/chattr -a /var/log/alert.log
#在日志轮替之前取消a属性,以便让日志可以轮替
endscript
#脚本结朿
sharedscripts
postrotate
#在日志轮替之后执行
/usr/bin/chattr +a /var/log/alert.log
#在日志轮替之后,重新加入a属性
endscript
sharedscripts
postrotate
/bin/kill -HUP $(/bin/cat /var/run/syslogd.pid 2>/dev/null) fi>/dev/null
endscript
#重启rsyslog服务,保证日志轮替正常进行
}
这样我们自己生成的日志 /var/log/alert.log 也就可以进行日志轮替了,当然这些配置信息也是可以直接写入 /etc/logrotate.conf 这个配置文件的。
2.2.4 示例二
可以模仿/etc/logrotate.d/
目录下面已经存在的日志切割配置格式,进行配置自己的日志文件
[root@logrotate ~]# vim /etc/logrotate.d/ssh
/mnt/ssh.log {
dateext
rotate 4
missingok
notifempty
size 30k
yearly
create 0600 root root
}
[root@logrotate ~]# logrotate -f /etc/logrotate.conf
[root@logrotate ~]# ls /mnt
ssh.log ssh.log-20201026
说明:
当切割之后创建新文件,新文件有新的inode number
如果希望进程如rsyslog、nginx把新的日志写入新日志文件中,应该在日志切割后,告诉一下rsyslog、nginx进程reload 或 信号(1 or HUP)
postrotate
kill -1 进程pid
endscript
2.3 dmesg
下面我们展示一些最负盛名的dmesg
命令工具以及其实际使用举例:
2.3.1 命令简介
Linux dmesg(英文全称:display message
)命令用于显示开机信息。kernel 会将开机信息存储在 ring buffer 中。您若是开机时来不及查看信息,可利用 dmesg 来查看。开机信息亦保存在 /var/log 目录中,名称为 dmesg 的文件里。
格式及参数:
NAME
dmesg - print or control the kernel ring buffer
SYNOPSIS
dmesg [options]
dmesg --clear
dmesg --read-clear [options]
dmesg --console-level level
dmesg --console-on
dmesg --console-off
DESCRIPTION
dmesg is used to examine or control the kernel ring buffer.
The default action is to read all messages from kernel ring buffer.
参数选项 | 参数说明 |
---|---|
-C, --clear | 清除内核环形缓冲区(ring butter) |
-c, --read-clear | 读取并清除所有消息 |
-D, --console-off | 禁止向终端打印消息 |
-d, --show-delta | 显示打印消息之间的时间差 |
-e, --reltime | 以易读格式显示本地时间和时间差 |
-E, --console-on | 启用向终端打印消息 |
-F, --file <文件> | 用 文件 代替内核日志缓冲区 |
-f, --facility <列表> | 将输出限制为定义的设施 |
-H, --human | 易读格式输出 |
-k, --kernel | 显示内核消息 |
-L, --color | 显示彩色消息 |
-l, --level <列表> | 限制输出级别 |
-n, --console-level <级别> | 设置打印到终端的消息级别 |
-P, --nopager | 不将输出通过管道传递给分页程序 |
-r, --raw | 打印原生消息缓冲区 |
-S, --syslog | 强制使用 syslog(2) 而非 /dev/kmsg |
-s, --buffer-size <大小> | 查询内核环形缓冲区所用的缓冲区大小 |
-T, --ctime | 显示易读的时间戳(如果您使用了SUSPEND/RESUME 则可能不准) |
-t, --notime | 不打印消息时间戳 |
-u, --userspace | 显示用户空间消息 |
-w, --follow | 等待新消息 |
-x, --decode | 将设施和级别解码为可读的字符串 |
-h, --help | 显示此帮助并退出 |
-V, --version | 输出版本信息并退出 |
2.3.2 使用示例
1、查看命令版本
[root@dbc-server-554 log]# dmesg -V
dmesg from util-linux 2.23.2
2、获取命令帮助
[root@dbc-server-554 log]# dmesg -h
Usage:
dmesg [options]
选项:
-C, --clear 清除内核环形缓冲区(ring butter)
-c, --read-clear 读取并清除所有消息
-D, --console-off 禁止向终端打印消息
-d, --show-delta 显示打印消息之间的时间差
-e, --reltime 以易读格式显示本地时间和时间差
3、查看所有开机日志信息
[root@dbc-server-554 log]# dmesg|head
[ 0.000000] microcode: microcode updated early to revision 0x28, date = 2019-11-12
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
[ 0.000000] Linux version 3.10.0-1160.83.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Wed Jan 25 16:41:43 UTC 2023
[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.10.0-1160.83.1.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8
[ 0.000000] e820: BIOS-provided physical RAM map:
[ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000057fff] usable
[ 0.000000] BIOS-e820: [mem 0x0000000000058000-0x0000000000058fff] reserved
[ 0.000000] BIOS-e820: [mem 0x0000000000059000-0x000000000009efff] usable
4、过滤想查看信息
#建议使用-i参数过滤时忽略大小写
[root@dbc-server-554 log]# dmesg|grep -i cpu
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Initializing cgroup subsys cpuacct
...
[ 0.109184] mce: Detected Haswell CPU. MCE quirk HSD131, HSM142, HSW131, BDM48, or HSM142 enabled.
[ 0.109294] Brought up 8 CPUs
[ 0.139272] ACPI: SSDT ffff89ee3a4a1000 003D3 (v01 PmRef Cpu0Cst 00003001 INTL 20051117)
[ 0.505837] ACPI: Requesting acpi_cpufreq
[ 0.552396] cpuidle: using governor menu
[ 6.563464] cryptd: max_cpu_qlen set to 1000
5、便于阅读的方式显示日志日期和时间
[root@dbc-server-554 log]# dmesg -d -T |grep -i Memory
[Thu Feb 23 17:39:39 2023 < 0.000000>] Base memory trampoline at [ffff89ecc0097000] 97000 size 24576
[Thu Feb 23 17:39:39 2023 < 0.000000>] Reserving 161MB of memory at 720MB for crashkernel (System RAM: 8067MB)
[Thu Feb 23 17:39:39 2023 < 0.000000>] Early memory node ranges
[Thu Feb 23 17:39:39 2023 < 0.000000>] Reserving Intel graphics memory at [mem 0xdb200000-0xdf1fffff]
...
[Thu Feb 23 17:39:39 2023 < 0.000000>] PM: Registered nosave memory: [mem 0xff000000-0xffffffff]
[Thu Feb 23 17:39:39 2023 < 0.000000>] Memory: 5132340k/8910848k available (7988k kernel code, 649248k absent, 643056k reserved, 5756k data, 2176k init)
[Thu Feb 23 17:39:39 2023 < 0.000000>] please try 'cgroup_disable=memory' option if you don't want memory cgroups
[Thu Feb 23 17:39:39 2023 < 0.000171>] Initializing cgroup subsys memory
[Thu Feb 23 17:39:39 2023 < 0.000050>] x86/mm: Memory block size: 128MB
[Thu Feb 23 17:39:39 2023 < 0.281043>] Freeing initrd memory: 32056k freed
[Thu Feb 23 17:39:39 2023 < 0.000307>] Non-volatile memory driver v1.3
[Thu Feb 23 17:39:39 2023 < 0.000063>] crash memory driver: version 1.1
[Thu Feb 23 17:39:39 2023 < 0.001867>] Freeing unused kernel memory: 2176k freed
[Thu Feb 23 17:39:39 2023 < 0.001101>] Freeing unused kernel memory: 192k freed
[Thu Feb 23 17:39:39 2023 < 0.002384>] Freeing unused kernel memory: 528k freed
6、实时监控查看日志末尾N行
[root@dbc-server-554 log]# watch "dmesg | tail -10"
7、查看指定级别格式日志
dmesg -l [list]
-l, --level list
Restrict output to defined (comma separated) list of levels. For example
dmesg --level=err,warn
will print error and warning messages only. For all supported levels see dmesg --help output.
#支持的日志级别(优先级):
emerg - 系统无法使用
alert - 操作必须立即执行
crit - 紧急条件
err - 错误条件
warn - 警告条件
notice - 正常但重要的条件
info - 信息
debug - 调试级别的消息
[root@dbc-server-554 log]# dmesg -l warn
[ 0.000000] ACPI: RSDP 00000000d8ca7000 00024 (v02 ALASKA)
[ 0.000000] ACPI: XSDT 00000000d8ca7080 0007C (v01 ALASKA A M I 01072009 AMI 00010013)
...
[ 0.000000] Zone ranges:
[ 0.000000] DMA [mem 0x00001000-0x00ffffff]
[ 0.000000] DMA32 [mem 0x01000000-0xffffffff]
[ 0.000000] Normal [mem 0x100000000-0x21fdfffff]
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x00001000-0x00057fff]
...
[ 1.123710] ACPI Error: [DSSP] Namespace lookup failure, AE_NOT_FOUND (20130517/psargs-359)
[ 1.123713] ACPI Error: Method parse/execution failed [\_SB_.PCI0.SAT0.SPT5._GTF] (Node ffff89ee3ae6f5d0), AE_NOT_FOUND (20130517/psparse-536)
[ 1.124550] ACPI Error: [DSSP] Namespace lookup failure, AE_NOT_FOUND (20130517/psargs-359)
[ 1.124553] ACPI Error: Method parse/execution failed [\_SB_.PCI0.SAT0.SPT5._GTF] (Node ffff89ee3ae6f5d0), AE_NOT_FOUND (20130517/psparse-536)
[ 49.426433] TECH PREVIEW: Overlay filesystem may not be fully supported.
Please review provided documentation for limitations.
[101569.947943] perf: interrupt took too long (2520 > 2500), lowering kernel.perf_event_max_sample_rate to 79000
[150035.568272] perf: interrupt took too long (3153 > 3150), lowering kernel.perf_event_max_sample_rate to 63000
[218334.434190] perf: interrupt took too long (3942 > 3941), lowering kernel.perf_event_max_sample_rate to 50000
[root@dbc-server-554 log]# dmesg -l err
[ 0.567132] EFI: Problem loading in-kernel X.509 certificate (-129)
[ 0.567212] EFI: Problem loading in-kernel X.509 certificate (-129)
[ 0.642991] ip_local_port_range: prefer different parity for start/end values.
[ 0.643360] systemd[1]: Failed to start Apply Kernel Variables.
[ 1.007444] ERROR: Unable to locate IOAPIC for GSI 37
...
[ 7.048060] kvm: disabled by bios
8、打印并清除内核环形缓冲区
]# dmesg-c
2.4 关于重启/死机的日志
2.4.1 last
last命令用于显示用户最近登录信息。
单独执行 last 指令,它会读取位于 /var/log/目录下,名称为 wtmp 的文件,并把该文件记录登录的用户名,全部显示出来。
语法
last [options] [username...] [tty...]
参数说明:
options:
-R 省略主机名 hostname 的列
-a 把从何处登入系统的主机名称或IP地址显示在最后一行。
-d 将IP地址转换成主机名称。
-f<记录文件> 指定记录文件。
-n<显示行数>或-<显示行数> 显示名单的行数。
-R 不显示登入系统的主机名称或IP地址。
-x 显示系统关机,重新开机,以及执行等级的改变等信息。
username:
username: 显示指定用户 username 的登录信息。
tty:
tty 设置登录的终端,tty 的名称可以缩写, last 0 与 last tty0 相同。
2.4.2 日志查看
在程序的日常运维中,有时候也会遇到操作系统死机重启的情况,此时我们可能需要对此进行诊断
1、查看系统版本
[root@zabbix-svr-2 ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@zabbix-svr-2 ~]# uname -a
Linux zabbix-svr-2 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
2、查看过去重启日志
[root@zabbix-svr-2 ~]# last |grep reboot
reboot system boot 3.10.0-1160.el7. Mon Feb 27 00:30 - 01:30 (00:59)
reboot system boot 3.10.0-1160.el7. Sun Feb 26 22:07 - 01:30 (03:23)
reboot system boot 3.10.0-1160.el7. Sun Feb 26 20:22 - 01:30 (05:07)
reboot system boot 3.10.0-1160.el7. Thu Feb 23 20:24 - 20:22 (2+23:58)
reboot system boot 3.10.0-1160.el7. Tue Feb 14 06:15 - 20:12 (9+13:56)
reboot system boot 3.10.0-1160.el7. Tue Feb 14 06:11 - 20:12 (9+14:00)
3、查看最近一条重启记录
[root@zabbix-svr-2 ~]# last reboot|head -1
reboot system boot 3.10.0-1160.el7. Mon Feb 27 00:30 - 01:31 (01:01)
4、查看上一次关机日期和时间
[root@zabbix-svr-2 ~]# last -x|grep shutdown | head -1
shutdown system down 3.10.0-1160.el7. Sun Feb 26 20:22 - 20:22 (00:00)
[root@zabbix-svr-2 ~]# last -x shutdown
shutdown system down 3.10.0-1160.el7. Sun Feb 26 20:22 - 20:22 (00:00)
shutdown system down 3.10.0-1160.el7. Thu Feb 23 20:12 - 20:24 (00:12)
wtmp begins Tue Feb 14 06:11:46 2023
5、执行history查看系统执行了哪些操作
[root@zabbix-svr-2 ~]# history
1 ip a
2 ll /etc/sysconfig/network-scripts/ifcfg-ens33
3 vi /etc/sysconfig/network-scripts/ifcfg-ens33
4 systemctl restart network
6、查看/var/log/message
我们还可以查看/var/log/message文件,以进一步分析操作系统重启的一些信息:
# cat /var/log/messages | more
Nov 8 03:37:19 midea-oss-hk-07 rsyslogd: [origin software="rsyslogd" swVersion="8.24.0-41.el7_7.4" x-pid="1816" x-info="http://www.rsyslog.com"] rsyslogd was HUPed
Nov 8 03:37:19 compile-machine systemd: Removed slice User Slice of root.
Nov 8 03:38:01 compile-machine systemd: Created slice User Slice of root.
Nov 8 03:38:01 compile-machine systemd: Started Session 68942 of user root.
Nov 8 03:38:01 compile-machine systemd: Removed slice User Slice of root.