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

news2024/11/18 1:50:39

日志工具

    • 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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/375104.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【面试一:|和||、和区别】

相同点&#xff1a; ||和&&都是逻辑运算符&#xff0c;而|和&是位运算符。位运算符的优先级要比逻辑运算符的优先级高。 &和&&的区别 &和&&都可以用作逻辑与的运算符&#xff0c;表示逻辑与&#xff08;and&#xff09;&#xff0c;当运…

尚医通(二十五)就医提醒和预约统计

目录一、就医提醒1、搭建定时任务模块二、后台管理系统-预约统计功能1、开发每天预约数据接口2、封装远程调用接口3、搭建统计分析模块4、整合统计功能前端一、就医提醒 我们通过定时任务&#xff0c;每天8点执行&#xff0c;提醒就诊 1、搭建定时任务模块 &#xff08;1&…

Python IDE:对于 Python 初学者来说,最好的 IDE 是什么?

Python 是科技界最简单、使用最广泛的编程语言之一。它是一种高级通用编程语言&#xff0c;强调代码可读性并使用面向对象的方法。Python可以用来完成很多任务&#xff0c;包括网站开发、软件开发、 自动化 和数据分析 专业开发人员使用Python开发各种流行的软件程序&#xff0…

【C++】list 相关接口的模拟实现

list 模拟实现回顾准备构造析构函数的构造构造方法析构方法赋值运算符重载容量相关接口元素获取元素修改相关接口push 、popinserterase清空交换迭代器 **&#xff08;重点&#xff09;迭代器基本概念迭代器模拟实现回顾 在上一篇博客中我们大致了解了 list 相关接口的使用方法…

零基础、非计算机系学Python该如何上手?

首先我觉得要放平心态&#xff0c;不用过多去纠结是不是专业出身这回事。 想学那就认真去学&#xff0c;我们最终目标是掌握Python这门技能。 非计算机专业同时零基础&#xff0c;想自学Python该如何上手&#xff1f;分享我自学Python的几点建议吧。 1、重视基础 Python是一…

《数据库系统概论》学习笔记——第七章 数据库设计

教材为数据库系统概论第五版&#xff08;王珊&#xff09; 这一章概念比较多。最重点就是7.4节。 7.1 数据库设计概述 数据库设计定义&#xff1a; 数据库设计是指对于一个给定的应用环境&#xff0c;构造&#xff08;设计&#xff09;优化的数据库逻辑模式和物理结构&#x…

TIA博途Wincc中自定义配方画面的具体方法示例

TIA博途Wincc中自定义配方画面的具体方法示例 前面和大家分享了通过TIA博途自带的配方视图组态配方功能的具体方法,具体内容可参考以下链接中的内容: TIA PORTAL wincc中配方recipe组态及配方视图的使用方法 但是,使用配方视图的时候感觉不是很方便,同时一部分使用人员也感…

机加行业MES解决方案,助力企业打造数字化透明车间

机械加工行业的主要原材料占整个生产物料成本的95%~99%&#xff0c;以挖掘机为例&#xff0c;原材料有各种规格的钢板、焊丝、焊条、油漆以及各种气体等&#xff0c;其中主要原材料是钢板&#xff0c;占原材料比率的98%以上。 因此机械加工mes的原材料管理是机械加工行业信息化…

【GO】30.grpc拦截器源码分析

一.服务端拦截器server端原理serverOptions配置中的Interceptor&#xff0c;其中unary为一元拦截器&#xff0c;stream为流式拦截器。本文只看一元式拦截器&#xff0c;即最常见的客户端向服务器发送单个请求并返回单个响应。创建一个新的grpc server时&#xff0c;这个方法将拦…

什么?你还不明白什么是ClassLoader?不如试试从JVM来入手ClassLoader是什么玩意吧!

文章目录环境配置篇如何执行一个文件配置JDK环境&#xff08;简述&#xff09;Java文件执行流程编译加载JVM环境准备BootStrapClassLoadersun.misc.laucherAppClassLoader解释执行回收ClassLoader讲解主要的三个ClassLoader双亲委派模型loadClass方法讲解自定义ClassLoaderJVM内…

多芯片设计 Designing For Multiple Die

Why a system-level approach is essential, and why its so challenging作者&#xff1a;Ann MutschlerAnn Mutschler is executive editor at Semiconductor Engineering.将多个裸片或芯粒集成到一个封装中&#xff0c;与将它们放在同一硅片上有着很大的区别。在同一硅片上&a…

断点续传实现

断点续传 1、 什么是断点续传 通常视频文件都比较大&#xff0c;所以对于媒资系统上传文件的需求要满足大文件的上传要求。http协议本身对上传文件大小没有限制&#xff0c;但是客户的网络环境质量、电脑硬件环境等参差不齐&#xff0c;如果一个大文件快上传完了网断了没有上…

分布式之ZAB协议

写在前面 假定我们现在使用zk执行了如下的指令&#xff1a; [zk: 192.168.0.10:2181(CONNECTED) 0] create /dongshidaddy 123 Created /dongshidaddy [zk: 192.168.0.10:2181(CONNECTED) 1] create /dongshidaddy/mongo 456 Created /dongshidaddy/mongo假定因为节点故障最终…

Python曲线肘部点检测-膝部点自动检测

文章目录一. 术语解释二. 拐点检测肘部法则是经常使用的法则。很多时候&#xff0c;可以凭人工经验去找最优拐点&#xff0c;但有时需要自动寻找拐点。最近解决了一下这个问题&#xff0c;希望对各位有用。一. 术语解释 **肘形曲线(elbow curve)**类似人胳膊状的曲线&#xff…

Echarts 每个柱子一种渐变色的象形柱状图

第023个点击查看专栏目录本示例是解决每个柱状图的每一个柱子都呈现一种渐变色&#xff0c;每个柱子的颜色都不同。这里同时采用了象形的柱状图效果。 文章目录示例效果示例源代码&#xff08;共125行&#xff09;相关资料参考专栏介绍示例效果 示例源代码&#xff08;共125行&…

JavaScript DOM【快速掌握知识点】

目录 DOM简介 获取元素 修改元素 添加和移除元素 事件处理 DOM简介 JavaScript DOM 是指 JavaScript 中的文档对象模型&#xff08;Document Object Model&#xff09;&#xff1b;它允许 JavaScript 与 HTML 页面交互&#xff0c;使开发者可以通过编程方式动态地修改网页…

RocketMQ源码分析

RocketMQ源码深入剖析 1 RocketMQ介绍 RocketMQ 是阿里巴巴集团基于高可用分布式集群技术&#xff0c;自主研发的云正式商用的专业消息中间件&#xff0c;既可为分布式应用系统提供异步解耦和削峰填谷的能力&#xff0c;同时也具备互联网应用所需的海量消息堆积、高吞吐、可靠…

汽轮机胀差及轴向位移(转载的)

这个文章是微信公众号推送看到的。搬运到这里方便以后学习用。 1、轴向位移和胀差的概念 轴位移指的是轴的位移量&#xff0c;而胀差则指的是轴相对于汽缸的相对膨胀量,一般轴向位移变化时其数值较小。轴向位移为正值时&#xff0c;大轴向发电机方向移&#xff0c;若此时汽缸膨…

如何快速了解一个系统?

前言 开发人员经常会面临下面一些场景&#xff1a; 新人入职&#xff0c;需要学习已有系统&#xff0c;作为 landing 的一部分&#xff0c;如何学习&#xff1f;被拉过去参与一个陌生系统的迭代开发或者系统维护&#xff08;bugfix&#xff09;&#xff0c;如何快速上手&…

关键词聚类和凸现分析-实战1——亚急性甲状腺炎的

审稿人问题第8页第26行-请指出#是什么意思&#xff0c;并解释为什么亚急性甲状腺炎在这里被列为#8。我认为在搜索亚急性甲状腺炎相关文章时&#xff0c;关键词共现分析应该提供关键词共现的数据。这些结果的实际用途是什么?亚急性甲状腺炎是一种较为罕见但重要的甲状腺疾病&am…