RHCE9学习指南 第18章 日志

在这里插入图片描述

日志中记录了各种各样的问题,所以读取日志是检测并排除故障的一个重要方式,日志文件默认放在/var/log/目录下。不同的问题要读取不同的日志,例如,邮件发不出去,可以读取日志文件件/var/log/maillog;要查看哪些用户试图用ssh登录到本机,可以读取/var/log/secure日志文件。

在RHEL9/CentOS9中,日志是由rsyslogd服务管理的,不同类型的日志内容放在哪个文件中,由/etc/rsyslog.conf决定。

在/etc/rsyslog.conf中可以定义一系列的规则,决定不同类型的日志保存在哪个文件中。
定义规则的格式如下。
日志类别.日志级别标准线 文件
如果某个应用程序的日志级别 大于等于 日志类别后面的级别标准线,则日志会被记录到指定的文件中。
日志的类别包括以下几种。

(1)auth:用户认证时产生的日志
(2)authpriv:ssh、ftp等登录信息的验证信息
(3)daemon:一些守护进程产生的日志
(4)ftp:FTP产生的日志
(5)lp:打印相关活动
(6)mark:服务内部的信息,时间标识
(7)news:网络新闻传输协议(nntp)产生的消息。
(8)syslog:系统日志
(9)security:安全相关的日志
(10)uucp:Unix-to-Unix Copy 两个UNIX之间的相关通信
(11)console:针对系统控制台的消息。
(12)cron:系统执行定时任务产生的日志。
(13)kern:系统内核日志
(14)local0~local7:自定义程序使用
(15)mail:邮件日志
(16)user:用户进程

日志级别包括以下几种。

	(1)emerg:恐慌状态,如关机、重启系统等(2)alert:紧急状态(3)crit:临界状态(4)err:其他错误(5)warning:警告(6)notice:需要调查的事项(7)info:一般的事件信息(8)debug:仅供调试

不需要详细了解具体每个级别的意义,只需知道这些级别从上往下是越来越低的。emerg级别最高,debug级别最低。

在写程序时,可以在程序的代码中定义一个日志信息,这个日志应该属于哪个类别,以及级别是什么。当程序中这个代码块被执行时,rsyslog决定这个日志会写入哪个文件中。

为了好理解,先看个例子。假设rsyslog.conf终已经定义了4条日志规则,如图18-1所示。
file
图18-1 了解日志的类别和级别
这里定义了不同类别的日志记录的最低标准,以及记录到哪个文件中。例如,第四条规则local5类别的日志,如果级别大于等于info,会记录到file4.log中,如图18-2所示。
file
图18-2 了解日志的类别和级别
现在有一个A应用,在其代码中指定它所使用的日志类别是local5,所以在A应用的日志生成时,会使用第四条规则。因为第四条规则指定的是如何记录local5级别的日志。

那么,A应用所产生的日志到底会不会被第四条规则记录呢?主要由A应用的日志级别是否达到规则要求的最低标准。A应用产生的日志级别为debug,而规则4要记录的最低级别是info,debug的级别低于info。所以,就是A产生的日志没达到规则四的最低“分数线”,所以是不会被记录到file4.log中的。

18.1 rsyslog的配置

用vim编辑器打开/etc/rsyslog.conf,往下找到RULES关键字#### RULES ####,下面定义的都是记录日志的规则,去掉对应的注释行之后内容如下。

*.info;mail.none;authpriv.none;cron.none        /var/log/messages

上面这行 .info中的表示所有类别的日志,都可以匹配到这条规则,但是要求应用程序的日志级别要达到info以上才会记录到/var/log/messages中。

但是这里的*要排除mail、authpriv和cron这三个类别,即这三个类别的日志不匹配这条规则,因为这三个类别后面写的级别是none。

authpriv.*                              		/var/log/secure

这条规则的意思是,只要应用程序产生日志的是authpriv类别的就匹配这条规则,不管日志是哪个级别的,日志记录到/var/log/secure中。

mail.*                                   		-/var/log/maillog

这条规则的意思是,只要应用程序产生日志的是mail类别的就匹配这条规则,不管日志是哪个级别的,日志记录到/var/log/maillog中。

cron.*                                   		/var/log/cron

这条规则的意思是,只要应用程序产生日志的是cron类别的就匹配这条规则,不管日志是哪个级别的,日志记录到/var/log/cron中。

*.emerg                                         :omusrmsg:*

这条规则的意思是,不管应用程序产生日志的是哪个类别的,只要日志级别是emerg,则会通知所有人(所有终端都会有消息提醒)。

uucp,news.crit                                  /var/log/spooler

这条规则的意思是,只要应用程序产生日志的是uucp或news类别的就匹配这条规则,不管日志是哪个级别的,日志记录到/var/log/spooler中。

local7.*                                        /var/log/boot.log

这条规则的意思是,只要应用程序产生日志的是local7类别的就匹配这条规则,不管日志是哪个级别的,日志记录到/var/log/boot.log中。

下面开始自己写一条规则,在vim编辑模式下,在上面规则的后面添加一条内容如下。

local6.info                                    /var/log/xx.log

这条规则的意思是,只要应用程序产生日志的是local6类别的就匹配这条规则,但是要求日志的级别要大于等于info才能记录到/var/log/boot.log中。

保存退出之后,重启rsyslog,命令如下。

[root@server ~]# systemctl restart rsyslog
[root@server ~]# 

下面模拟一个应用程序产生一个类别为local6、级别为debug的日志,命令如下。

[root@server ~]# logger -p  local6.debug  "1111"
[root@server ~]#

这个命令的意思是,模拟产生一个类别为local6、级别为debug的日志,日志的内容为1111。
这个日志应该会使用配置文件/etc/rsyslog.conf中所定义的如下两条规则。

*.info;mail.none;authpriv.none;cron.none        /var/log/messages
local6.info                                     /var/log/xx.log

第一条规则能匹配到任何类别,但是要求info级别以上的日志,第二条能匹配local6类别,info以上级别的日志。但模拟日志仅仅是debug级别的,不达标,所以模拟日志是不会被记录的,如下所示。

[root@server ~]# ls /var/log/xx.log
ls: 无法访问'/var/log/xx.log': 没有那个文件或目录
[root@server ~]#

现在重新模拟一个local6级别为info的日志,日志内容为2222,命令如下。

[root@server ~]# logger -p local6.info "2222"
[root@server ~]#

按照上面的分析,这条日志会被记录的,且会记录到/var/log/messages和/var/log/xx.log两个日志文件中,下面来验证一下。

[root@server ~]# grep 2222 /var/log/messages
Oct  5 19:36:50 server root[378436]: 2222
[root@server ~]# 
[root@server ~]# cat /var/log/xx.log 
Oct  5 19:36:50 server root[378436]: 2222
[root@server ~]#

可以看到,这条日志被记录到两个文件中了。
现在重新模拟一个local6级别为err的日志,日志内容为3333,命令如下。

[root@server ~]# logger -p local6.err "3333"
[root@server ~]#

然后确认这日志是否被记录,命令如下。

[root@server ~]# grep 3333 /var/log/messages
Oct  5 19:39:40 server root[378477]: 3333
[root@server ~]# cat /var/log/xx.log 
Oct  5 19:36:50 server root[378436]: 2222
Oct  5 19:39:40 server root[378477]: 3333
[root@server ~]#

可以看到,日志现在已经被记录了。

18.2 查看日志

前面分析了rsyslog是如何归纳日志信息的,下面我们看下如何查看日志。
第一种方式就是通过查看日志文件,因为不同类别的日志被记录到不同的日志文件了,所以我们需要查看对应的日志文件即可。
(1)查看系统的启动过程,可以查看/var/log/boot.log。
(2)查看谁通过ssh、ftp等登录系统或尝试登录系统,可以通过/var/log/secure查看。
(3)查看邮件服务器的收发邮件的情况,可以通过/var/log/maillog查看。
(4)查看安装或卸载了哪些包,可以通过/var/log/dnf.log查看。
大部分的日志信息都是记录在/var/log/messages中的,可以在此日志文件中查找相关信息。
除以上文件查看日志的方式外,可以通过journalctl查看,命令如下。

[root@server ~]# journalctl 
-- Logs begin at Tue 2023-12-19 01:08:42 CST, end at Thu 2023-12-19 09:01:01 CST. --
1219 01:08:42  server.rhce.cc rsyslogd[10878]: processing: omfile: creat>
... 大量输出...
[root@server ~]#

直接输入“journalctl”,会显示系统所有的日志。此时显示了一页的日志,按【Esc】可以退出来,按【Enter】键可以一行一行地往下继续显示,按空格键可以一页一页地往下显示。
如果按想看最新的日志,命令如下。

[root@server ~]# journalctl -f
-- Logs begin at Tue 2023-12-19 01:08:42 CST. --
12月19 08:56:40 server.rhce.cc dnf[397697]: Updating Subscription Management repositories.
1219 08:56:40 server.rhce.cc dnf[397697]: Unable to read consumer identity...输出...
1219 09:01:01 server.rhce.cc run-parts[397744]: (/etc/cron.hourly) finished 0anacron
1219 09:51:49 server.rhce.cc cupsd[1130]: REQUEST localhost - - "POST / HTTP/1.1" 200 184 Renew-Subscription client-error-not-found

此处日志仍然处于日志打开状态,不会看到终端提示符,如果此时日志有变化,这里会继续输出。按【Ctrl+c】组合键退出。

如果想查看日志中某级别以上的日志,可以加上"-p 级别" 选项来查看。例如,查看emerg级别的日志,命令如下。

[root@server ~]# journalctl  -p emerg
-- Logs begin at Tue 2023-12-19 01:08:42 CST, end at Thu 2023-12-19 09:51:49 CST. --
-- No entries --
[root@server ~]#

这里没有输出,表示的是系统中暂时没有emerg级别的日志。我们先模拟一个类别为local6级别为emerg的日志,命令如下。

[root@server ~]# logger -p local6.emerg "xxxx"
[root@server ~]# 
Broadcast message from systemd-journald@server.rhce.cc (Thu 2023-12-19 10:00:42 CST):root[398250]: xxxxroot[398250]:xxxx

此处按下按【Enter】键可以显示提示符

[root@server ~]# 

然后再次查看所有emerg级别以上的日志,命令如下。

[root@server ~]# journalctl  -p emerg
-- Logs begin at Tue 2023-12-19 01:08:42 CST, end at Thu 2023-12-19 10:01:01 CST. --
1219 10:00:42 server.rhce.cc root[398250]: xxxx
[root@server ~]#

这里可以就能看到有一条emerg级别的日志了。
journalctl还可以查看某个时间段的日志,格式如下。
journalctl --since "时间1" --until "时间2"
这里since指的是起始时间,until指的是终止时间,整体意思是查看的是时间1和时间2之间的日志。例如,要查看自2023-12-19 20:00:00 到2023-12-20 10:18:00之间且级别要高于等于err的日志,命令如下。

[root@server ~]# journalctl  -p err --since "2023-12-19 20:00:00" --until "2023-12-20 10:18:00"
-- Logs begin at Tue 2023-12-19 01:08:42 CST, end at Thu 2023-12-20 10:01:01 CST. --
1220 00:01:40 server.rhce.cc systemd[1]: Failed to start dnf makecache.
1220 03:57:40 server.rhce.cc systemd[1]: Failed to start dnf makecache.
1220 07:16:20 server.rhce.cc systemd[1]: Failed to start dnf makecache.
1220 10:00:42 server.rhce.cc root[398250]: xxxx
[root@server ~]#

如果没有写until,则查看的是从since所指定的时间点到现在的日志。

作业:

作业1:在server2上定义一条规则,要求当出现类别为local7且级别大于等于alert的日志时保存在文件/var/log/test1.log里。
答案:
使用vim编辑器打开/etc/rsyslog.conf,在"#### RULES ####"的下一行添加新的内容如下:

local7.alert            /var/log/test1.log

保存并退出。
重启rsyslogd服务,命令如下。

[root@server2 ~]# systemctl restart rsyslog
[root@server2 ~]#

模拟产生一个类别为local7且级别为alert的日志,然后日志是否保存在指定的文件里了。

[root@server2 ~]# cat /var/log/test1.log 
Feb  1 13:29:19 server2 root[8135]: this is a test 111
[root@server2 ~]#

可以看到日志已经正确的写进来了。

作业2:请列出今天的且级别为alert以上的日志。
答案
通过jouranlctl可以直接查看日志,命令如下。

[root@server2 ~]# journalctl  -p alert  -S today
-- Logs begin at Tue 2023-12-19 09:59:49 CST, end at Tue 2023-12-19 13:29:19 CST. --
1219 13:29:19 server2 root[8135]: this is a test 111
[root@server2 ~]#

这里选项是大写的字母S,-S可以换成–since。

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

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

相关文章

【38 Pandas+Pyecharts | 奥迪汽车销量数据分析可视化】

文章目录 🏳️‍🌈 1. 导入模块🏳️‍🌈 2. Pandas数据处理2.1 读取数据2.2 查看数据信息2.3 数据处理 🏳️‍🌈 3. Pyecharts数据可视化3.1 奥迪用户购车时间分布3.2 奥迪各系销量占比饼图3.3 奥迪各系销量…

外汇天眼:CQG 与 TradeStation Securities 的经纪服务集成

TradeStation Securities, Inc.,一家自营的在线股票、ETF、期权和期货交易经纪公司,宣布与CQG合作,CQG是一家为交易员、经纪商、商业套保者和交易所提供高性能技术解决方案的全球供应商,已与TradeStation Securities的经纪服务集成…

Zustand 状态管理

Zustand 状态管理 安装创建 Store给 Store 添加TS类型约束在页面使用 Store返回 Store 中所有状态在 Store 中使用 async 异步方法使用 Immer Middleware (中间件) 更新深层嵌套的 State使用 get 方法,在 set 方法外访问 State 中的数据使用 selector什么是 selecto…

GNN如何处理表格?

链接: https://ieeexplore.ieee.org/document/10184514 在这篇综述中,我们深入探讨了使用图神经网络(GNNs)进行表格数据学习(TDL)的领域,这是一个深度学习方法在分类和回归任务中相比传统方法表现出越来越…

Unity中BRP下的深度图

文章目录 前言一、在Shader中使用1、在使用深度图前申明2、在片元着色器中 二、在C#脚本中开启摄像机深度图三、最终效果 前言 在之前的文章中,我们实现了URP下的深度图使用。 Unity中URP下使用屏幕坐标采样深度图 在这篇文章中,我们来看一下BRP下深度…

2024-01-03 无重叠区间

435. 无重叠区间 思路:和最少数量引爆气球的箭的思路基本都是一致了!贪心就是比较左边的值是否大于下一个右边的值 class Solution:def eraseOverlapIntervals(self, points: List[List[int]]) -> int:points.sort(keylambda x: (x[0], x[1]))# 比较…

2023-12-30 买卖股票的最佳时机 II和跳跃游戏以及跳跃游戏 II

122. 买卖股票的最佳时机 II 思路:关键点是每一次利用峰值来计算【画图好理解一点,就是计算陡坡的值】!每一次累加和的最大! 或者可以这样理解,把利润划分为每天的,如假如第 0 天买入,第 3 天卖出&#xf…

ELF文件格式解析二

使用objdump命令查看elf文件 objdump -x 查看elf文件所有头部的信息 所有的elf文件。 程序头部(Program Header)中,都以 PT_PHDR和PT_INTERP先开始。这两个段必须在所有可加载段项目的前面。 从上图中的INTERP段中,可以看到改段…

《GreenPlum系列》GreenPlum详细入门教程02-GreenPlum安装

文章目录 第二章 GreenPlum安装1.Docker创建centos容器1.1 拉取centos7镜像1.2 创建容器1.3 进入容器1.4 容器和服务器免密操作1.4.1 生成密钥1.4.2 拷贝密钥 1.5 安装ssh服务和网络必须应用1.6 容器设置root密码1.6.1 安装passwd应用1.6.2 容器本机root设置密码 1.7 容器本机免…

uniapp获取手机当前信息及应用版本

appVersion 是app端查询的数据信息 appWgtVersion 是浏览器端查询的数据信息 onLoad() {const systemInfo uni.getSystemInfoSync();console.log(systemInfo);// #ifdef H5const uniAppVersion systemInfo.appVersion;// #endif// #ifndef H5const uniAppVersion systemIn…

C++学习笔记——对象的指针

目录 一、对象的指针 二、减少对象的复制开销 三、应用案例 游戏引擎 图像处理库 数据库管理系统 航空航天软件 金融交易系统 四、代码的案例应用 一、对象的指针 是一种常用的技术,用于处理对象的动态分配和管理。使用对象的指针可以实现以下几个方面的功…

无法访问Bing网站 - 解决方案

问题 Bing官方网址:https://www.bing.com/ 电脑无法访问Bing网站,但手机等移动设备可以访问Bing网站,此时可尝试以下方案。 以下方案适用于各种系统,如Win/Linux系统。 解决方案 方案1 修改Bing网址为:https://www4…

JAVA毕业设计632—基于Java+ssm的宠物店商城系统(源代码+数据库)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于Javassm的宠物店商城系统(源代码数据库)632 一、系统介绍 本项目分为用户、营养师、管理员三种角色 1、用户: 登录、注册、宠物信息、宠物粮食、宠物用品、宠物疫…

二叉树基础oj练习(单值二叉树、相同的树、二叉树的前序遍历)

讲了这么多数据结构相关的知识(可以看我的数据结构文章专栏): 抓紧刷题巩固一下了 目录 1.单值二叉树 题目描述 思路1 代码1 思路2 代码2 2.相同的树 题目描述 思路 代码 3.二叉树的前序遍历 代码 思路 1.单值二叉树 965. 单值二叉树 - 力扣(LeetCod…

pycharm社区版配置flask开发环境

新建配置文件,类型选择Shell Script 设置Execute中flask.exe的路径 设置options :--appflask_app.py run --port5000 --debug 设置working 路径 设置环境变量FLASK_APPflask_app.py;FLASK_ENVdevelopment 注意:FLASK_APPflask_app.py和上…

YOLOv8 损失函数改进 | 引入 Shape-IoU 考虑边框形状与尺度的度量

🗝️改进YOLOv8注意力系列一:结合ACmix、Biformer、BAM注意力机制 论文讲解加入代码本文提供了改进 YOLOv8注意力系列包含不同的注意力机制以及多种加入方式,在本文中具有完整的代码和包含多种更有效加入YOLOv8中的yaml结构,读者可以获取到注意力加入的代码和使用经验,总…

Android Studio 最新版本首次下载和安装以及汉化教程【+第二次安装使用教程】

🌟博主领域:嵌入式领域&人工智能&软件开发 前言:本教程详解首次安装和下载最新版本的Android Studio ,以及汉化教程。另外详解当第二次下载使用时解决遇到的问题。 目录 1.Android Studio 下载 2.Android Studio 首次…

【云计算】云计算概述

1. 云计算概述 1.1 云计算的定义 美国国家标准与技术研究院(NIST)定义 云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件…

Xmind - win10安装破解Xmind2023

Xmind - win10安装破解Xmind2023 1、下载 Xmind下载 提取码:we6i 2、安装 Step 1:双击运行 exe文件 Step 2:忽略最新版本 最近更新选择继续升级至Pro选择取消Step 4:直接选择同意授权

Java线程池最全详解

1. 引言 在当今高度并发的软件开发环境中,有效地管理线程是确保程序性能和稳定性的关键因素之一。Java线程池作为一种强大的并发工具,不仅能够提高任务执行的效率,还能有效地控制系统资源的使用。 本文将深入探讨Java线程池的原理、参数配置…