CHAPTER 2 CentOS的日志系统(日志工具)

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.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值