Linux---日志管理

本章主要介绍Linux中的日志管理

  • 了解rsyslog是如何管理日志的
  • 查看日志的方法

日志管理简介

  工作当中的日志,特指硬件和软件的日志,管理员可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。日志管理包括管理系统日志、应用程序日志、安全日志、日志审计、网络日志等。

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

  在RHEL8/CentOS8中,日志是由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级别最低。   

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

为了更好地理解,先看一个例子。假设rsyslog.conf中已经定义了4条日志规则,如下图所示。 

   这里定义了不同类别的日志记录的最低标准,以及记录到哪个文件中。例如,第4条规则 local5类别的日志,如果级别大于等于info,会记录到 file4.log中,如下图所示。 

  现在有一个A应用,在其代码中指定它所使用的日志类别是local5,所以在A应用的日志生成时,会使用第4条规则。因为第4条规则指定的是如何记录 local5级别的日志。 

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


  

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这三个类别,即这三个类别的日志不匹配这条规则,因为这三个类别后面写的级别是non。 

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类别的就匹配这条规则,日志级别大于或者等于crit时,日志都记录到/var/log/spooler 中。 

local7.*                                                /var/log/boot.log

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

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

local6.info                                             /var/log/xx.log

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

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

[root@rhel03 ~]# systemctl restart rsyslog.service

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

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

这个命令的意思是,模拟产生一个类别为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@rhel03 ~]# ls /var/log/xx.log
ls: 无法访问'/var/log/xx.log': 没有那个文件或目录
[root@rhel03 ~]#

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

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

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

[root@rhel03 ~]# grep -w "2222" /var/log/messages
Dec  7 11:58:19 rhel03 root[7372]: 2222
[root@rhel03 ~]#
[root@rhel03 ~]# cat /var/log/xx.log 
Dec  7 11:58:19 rhel03 root[7372]: 2222
[root@rhel03 ~]#

可以看到,这个日志被记录到两个文件中了。

现在重新模拟—个local6级别为err 的日志,日志内容为3333,命令如下。 

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

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

[root@rhel03 ~]# grep 3333 /var/log/messages
Dec  7 12:03:41 rhel03 root[7454]: 3333
[root@rhel03 ~]# cat /var/log/xx.log 
Dec  7 11:58:19 rhel03 root[7372]: 2222
Dec  7 12:03:41 rhel03 root[7454]: 3333
[root@rhel03 ~]# 

查看日志 

前面分析了rsyslog是如何归纳日志信息的,下面来看如何查看日志。

  第一种方式就是查看日志文件,因为不同类别的日志被记录到不同的日志文件了,所以我们查看对应的日志文件即可。 

  • 查看系统的启动过程,可以通过/var/log/boot.log来查看。
  • 查看谁通过ssh、ftp等登录系统或尝试登录系统,可以通过/var/log/secure 来查 看。
  • 查看邮件服务器收发邮件的情况,可以通过/var/log/maillog来查看。
  • 查看安装或卸载了哪些包,可以通过/var/log/dnf.log来查看。 

  大部分的日志信息都是记录在/var/log/messages中的,可以在此日志文件中查找相关信 息。除以上查看日志文件的方式外,还可以通过 journalctl 命令来查看,命令如下。 

[root@rhel03 ~]# journalctl 
-- Logs begin at Thu 2023-12-07 05:47:36 +03, end at Thu 2023-12-07 12:03:41 +03. --

  直接输人“journalctl”,会显示系统所有的日志。此时显示了一页的日志,按【Esc】键 可以退出来,按【Enter】键可以一行一行地往下显示,按空格键可以一页一页地往下显示。 

如果想查看最新的日志,命令如下。 

[root@rhel03 ~]# journalctl -f
-- Logs begin at Thu 2023-12-07 05:47:36 +03. --

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

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

[root@rhel03 ~]# journalctl -p emerg 
-- Logs begin at Thu 2023-12-07 05:47:36 +03, end at Thu 2023-12-07 12:03:41 +03. --
-- No entries --
[root@rhel03 ~]# 

  没有任何输出,说明系统中暂时没有emerg级别的日志。我们先模拟一个类别为local6、 级别为emerg的日志,命令如下。 

[root@rhel03 ~]# logger -p local6.emerg "xxxx"
[root@rhel03 ~]# 
Broadcast message from systemd-journald@rhel03 (Thu 2023-12-07 12:09:22 +03):root[7532]: xxxxMessage from syslogd@rhel03 at Dec  7 12:09:22 ...root[7532]:xxxx
[root@rhel03 ~]#

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

[root@rhel03 ~]# journalctl -p emerg 
-- Logs begin at Thu 2023-12-07 05:47:36 +03, end at Thu 2023-12-07 12:09:22 +03. --
12月 07 12:09:22 rhel03 root[7532]: xxxx
[root@rhel03 ~]# 

可以看到,有一条emerg 级别的日志了。

journalctl还可以查看某个时间段的日志,格式如下。 

  • journalctl ‐‐since "时间1" ‐‐until "时间2"

  这里since指的是起始时间,until指的是终止时间,整体的意思是查看的是时间1和时间2 之间的日志。例如,要查看自2023-10-6 20:00:00到2023-10-07 10:00:00且级别要大于等于 err 的日志,命令如下。 

[root@rhel03 ~]# journalctl -p err --since "2023-10-6 20:00:00" --until "2023-10-07 10:00:00"
-- Logs begin at Thu 2023-12-07 05:47:36 +03, end at Thu 2023-12-07 12:09:22 +03. --
[root@rhel03 ~]#

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

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

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

相关文章

智能外呼常见场景有哪些?

智能外呼常见场景是什么? 智能外呼在各种场景下都有应用,以下是一些常见的场景: 营销推广 通过智能外呼向潜在客户进行产品或服务的宣传和推广,收集客户对产品或服务的反馈。根据客户的反馈自动调整宣传策略,从而提…

mac本地部署stable-diffusion

下载Homebrew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" ①输入“1”选择中科大版本,然后输入Y(YES),直接输入开机密码(不显示)然后回车确认,开始下载 ②…

小航助学2023年6月GESP_Scratch二级真题(含题库答题软件账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号 单选题3.00分 删除编辑附件图文 答案:D 第1题高级语言编写的程序需要经过以下( )操作,可以生成在计算机上运行的可执行代码。 A、编辑B、…

​LeetCode解法汇总1466. 重新规划路线

目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 描述: n 座城市&…

在王者荣耀中脸探草丛的正确姿势是什么?

引言 Cocos中躲草丛效果的实现原理。 在游戏开发中,我们经常用透视或者半透明效果去表现模型被遮挡的效果。 本文将介绍一下如何在Cocos中实现王者荣耀中的躲草丛效果。 本文源工程在文末获取,小伙伴们自行前往。 躲草丛效果的实现原理 要在Cocos中…

Android Studio的笔记--String和byte[]

String和byte[]的相互转换,字节数组转换 String转换byte[]文本16进制字节数组 byte[]转换String文本16进制 其它 String转换byte[] 文本 将字符串(String)转换为字节(byte)的方法。默认使用的是UTF-8编码 StandardCh…

Linux本地部署1Panel服务器运维管理面板并实现公网访问

文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透3. 配置1Panel公网访问地址4. 公网远程访问1Panel管理界面5. 固定1Panel公网地址 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器,包括主机监控、…

linux进程通信

匿名管道 struct_file的两套资源 管道只能单向通信 特征 1.如果管道没有数据 读端在读 默认会直接阻塞正在读取的进程 2.写端写满 在写会阻塞 等待对方读取 管道设计 命名管道 实现管道通信 #pragma once #include<iostream> #include<string> #include<sys/…

windows MYSQL解决中文乱码问题

1.首先确保你已经把mysql配置了环境变量 2.打开window终端 3.输入mysql -u root -p 4.输入密码&#xff0c;就是安装的时候设置的root超级管理员权限密码 5.输入&#xff1a; SHOW VARIABLES LIKE ‘character%’; 出现上图&#xff0c;说明就会出现中文乱码问题。 6.该怎么办…

redis-学习笔记(hash)

Redis 自身已经是 键值对 结构了 Redis 自身的键值对就是通过 哈希 的方式来组织的 把 key 这一层组织完成后, 到了 value 这一层, 还可以用 哈希类型 来组织 (简单的说就是哈希里面套哈希 [数组里面套数组 -> 二维数组] ) [ field value ] hset key field value [ field va…

【Java 基础】23 国际化

文章目录 1.概念2.原理1&#xff09;Locale2&#xff09;ResourceBundle3&#xff09;MessageFormat 3.例子1&#xff09;准备资源文件2&#xff09;加载资源文件3&#xff09;格式化消息&#xff08;非必须&#xff09; 总结 在全球化的今天&#xff0c;开发支持多语言的应用变…

STM32F1的TIM输出比较(PWM)

目录 1. OC&#xff08;Output Compare&#xff09;输出比较 2. PWM简介 3. 输出比较通道(高级) 4. 输出比较通道(通用) 5. PWM基本结构 6. 配置介绍 6.1 输出比较模块配置 6.2 给输出比较结构体赋一个默认值 6.3 配置强制输出模式 6.4 配置CRR寄存器的预装…

【文件上传系列】No.1 大文件分片、进度图展示(原生前端 + Node 后端 Koa)

分片&#xff08;500MB&#xff09;进度效果展示 效果展示&#xff0c;一个分片是 500MB 的 分片&#xff08;10MB&#xff09;进度效果展示 大文件分片上传效果展示 前端 思路 前端的思路&#xff1a;将大文件切分成多个小文件&#xff0c;然后并发给后端。 页面构建 先在页…

低代码与MES:智能制造的新篇章

一、引言 随着工业4.0和智能制造的兴起&#xff0c;企业对于生产过程的数字化、智能化需求日益迫切。制造执行系统&#xff08;MES&#xff09;作为连接计划层与控制层的关键信息系统&#xff0c;在提升生产效率、优化资源配置、保障产品质量等方面发挥着重要作用。然而&#…

AIGC实战——WGAN(Wasserstein GAN)

AIGC实战——WGAN 0. 前言1. WGAN-GP1.1 Wasserstein 损失1.2 Lipschitz 约束1.3 强制 Lipschitz 约束1.4 梯度惩罚损失1.5 训练 WGAN-GP 2. GAN 与 WGAN-GP 的关键区别3. WGAN-GP 模型分析小结系列链接 0. 前言 原始的生成对抗网络 (Generative Adversarial Network, GAN) 在…

深入探索C语言中的二叉树:数据结构之旅

引言 在计算机科学领域&#xff0c;数据结构是基础中的基础。在众多数据结构中&#xff0c;二叉树因其在各种操作中的高效性而脱颖而出。二叉树是一种特殊的树形结构&#xff0c;每个节点最多有两个子节点&#xff1a;左子节点和右子节点。这种结构使得搜索、插入、删除等操作…

【React Hooks】useReducer()

useReducer 的三个参数是可选的&#xff0c;默认就是initialState&#xff0c;如果在调用的时候传递第三个参数那么他就会改变为你传递的参数&#xff0c;实际开发不建议这样写。会增加代码的不可读性。 使用方法&#xff1a; 必须将 useReducer 的第一个参数&#xff08;函数…

MySQL - 并发控制与事务的隔离级别

目录 第1关&#xff1a;并发控制与事务的隔离级别 第2关&#xff1a;读脏 第3关&#xff1a;不可重复读 第4关&#xff1a;幻读 第5关&#xff1a;主动加锁保证可重复读 第6关&#xff1a;可串行化 第1关&#xff1a;并发控制与事务的隔离级别 任务描述 本关任务&#…

linux初级学习

(420条消息) 红帽认证-RHCSA_rhcsa红帽认证_yyyzf的博客-CSDN博客 OS&#xff1a;用户和机器的接口&#xff0c;UI:CMD,GUI shell: 通用格式 命令 选项&#xff08;调控功能&#xff09; 参数&#xff08;操作对象&#xff09;参数 省略参数对象一般使用当前目录作为参数对…

vue3日常知识点学习归纳

1&#xff0c;父子组件传递&#xff1a; 父组件传递参数 <template><div><!-- 子组件 参数&#xff1a;num 、nums --><child :num"nums.num" :doubleNum"nums.doubleNum" increase"handleIncrease"></child>&l…