当前位置: 首页 > news >正文

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所指定的时间点到现在的日志。 

相关文章:

Linux---日志管理

本章主要介绍Linux中的日志管理 了解rsyslog是如何管理日志的查看日志的方法 日志管理简介 工作当中的日志,特指硬件和软件的日志,管理员可以通过它来检查错误发生的原因,或者寻找受到攻击时攻击者留下的痕迹。日志管理包括管理系统日志、应…...

Java高级技术-单元测试

单元测试 Junit单元测试框架 Junit单元测试-快速入门 方法类 测试类 Junit框架的基本注解...

springboot集成邮箱验证功能

准备工作 开启SMTP服务 前往你的邮箱网站,以网易邮箱为例,打开网易邮箱地址,登录你的邮箱,进入邮箱管理后台界面。点击“设置”》》“POP3/SMTP/IMAP”后,点击开启SMTP服务即可。 技术实现 Spring Boot 发送邮件验证…...

HarmonyOS应用程序框架——UIAbility实操

UIAbility概述 UIAbility是一种包含用户界面的应用组件,主要用于和用户进行交互。UIAbility也是系统调度的单元,为应用提供窗口在其中绘制界面。 每一个UIAbility实例,都对应于一个最近任务列表中的任务。 一个应用可以有一个UIAbility&…...

数实融合!低代码推动工业数字化转型走“深”向“实”

当下,“数字化、智能化”已经不再是新鲜词。毕竟,在早几年前就已经有企业喊出大举进军数字化的口号,轰轰烈烈的数字化转型运动也持续了很长一段时间,有一些业内人士甚至判断“如今的企业数字化已经走过了成熟期,来到了…...

OpenGL学习资料

1.学习网站 Song Ho Ahn LearnOpenGL GAMES101:现代计算机图形学入门 OpenGL 官网 2.书籍 Fundamentals of computer graphics OpenGL ES 3.0编程指南 计算机图形学(OpenGL版)第3版 3.参考的一些文章 颜色缓冲区 深度缓冲 VBO,VAO和EBO详解 深入探索透视投影变…...

字符串指令集

字符串指令的格式 例子1就成功发送了指令 例子2就是发送的字符串有误 查询当前位置就会在附加信息中返回当前座位的坐标 第一个指令的参数就是闪灯的两个参数 如第一个示例就是10ms On Time 第二个就是Off Time 使用标准库来接收字符串命令 字符串指令的接收 因为一个指令就是…...

行云海CMS SQL注入漏洞复现

0x01 产品简介 行云海cms是完全开源的一套CMS内容管理系统,简洁,易用,安全,稳定,免费。 0x02 漏洞概述 行云海cms中ThinkPHP在处理order by排序时可利用key构造SQL语句进行注入,LtController.class.php中发现传入了orderby未进行过滤导致sql注入。攻击者除了可以利用 SQL 注入…...

窗口函数之 first_value() 和 last_value()

这次,我要从**last_value()**开始写! last_value() 众所周知,first_value() 和 last_value() 的作用是返回窗口中某个字段的第一行的值和最后一行的值。 但是在应用的时候,突然发现使用last_value() 返回了不止一条数据&#x…...

习题练习讲解

前言:这又是一个新坑,算上之前的4个坑这是第五个坑(1、C/C的讲解,2、C语言小游戏,3、大学生活,4、假哲家因为某些原因没GS),这个就是发一些自己在刷题的过程中遇到自己感觉还不错的习…...

C++STL的string模拟实现

文章目录 前言string的成员变量成员函数构造函数拷贝构造赋值重载 模拟实现string各种接口print迭代器普通迭代器const迭代器 string比较大小push_backinsert 和 eraseinserterase reserve和resizereserveresize swapfindcout和cincoutcin 前言 今天要讲string的底层实现&…...

基于ZLMediaKit的webrtc实时视频传输demo搭建

环境 ubuntu 20.04 ​ gcc version 9.4.0 ​ cmake version 3.16.3 部署ZLMediaKit流媒体服务器 安装openssl 首先可以检查一下自己的openssl的版本如果是1.1.1以上就可以忽略这一步 wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz tar -xvzf openssl-1.1.1k…...

LeetCode双指针:有序数组中的单一元素

LeetCode双指针:有序数组中的单一元素 题目描述 给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。 请你找出并返回只出现一次的那个数。 你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复…...

熬夜会秃头——Beta冲刺总结随笔

这个作业属于哪个课程2301-计算机学院-软件工程社区-CSDN社区云这个作业要求在哪里团队作业—beta冲刺事后诸葛亮-CSDN社区这个作业的目标总结Beta冲刺团队名称熬夜会秃头团队置顶集合随笔链接熬夜会秃头——Beta冲刺置顶随笔-CSDN社区 目录 一、Beta冲刺开始前设立的任务完成…...

C++函数模板案例

利用函数模板封装一个排序的函数&#xff0c;可以对不同数据类型数组进行排序排序规则从大到小&#xff0c;排序算法为选择排序分别利用char数组和int数组进行测试 #include<iostream> using namespace std;template<class T> void myswap(T& a, T& b) {T…...

同旺科技 USB TO RS-485 定制款适配器--- 拆解(三)

内附链接 1、USB TO RS-485 定制款适配器 ● 支持USB 2.0/3.0接口&#xff0c;并兼容USB 1.1接口&#xff1b; ● 支持USB总线供电&#xff1b; ● 支持Windows系统驱动&#xff0c;包含WIN10 / WIN11系统32 / 64位&#xff1b; ● 支持Windows RT、Linux、Mac OS X、Windo…...

Vue学习计划-Vue2--Vue核心(六)过滤器和自定义指令

1. 过滤器 定义&#xff1a;对要显示的数据进行特定格式转换再显示&#xff08;适用于一些简单逻辑的处理&#xff09;语法&#xff1a; 注册过滤器&#xff1a;Vue.filter(name, callback) 或 new Vue{filters:{}}使用过滤器&#xff1a;{{ xx | 过滤器名 }} 或 v-bind:属性 …...

Codeforces Round 913 (Div. 3) (A-G)

后天就是 I C P C ICPC ICPC杭州站了&#xff0c;今天把之前做的 d i v 3 div3 div3题补一下&#xff0c;打完这场杭州站这赛季除了 E C F i n a l EC\,\,Final ECFinal就结束了&#xff0c;以后应该要多打 c f cf cf比赛练习保持手感&#xff0c;争取下赛季冲一下金牌。 感觉这…...

CSS——sticky定位

1. 大白话解释sticky定位 粘性定位通俗来说&#xff0c;它就是相对定位relative和固定定位fixed的结合体&#xff0c;它的触发过程分为三个阶段 在最近可滚动容器没有触发滑动之前&#xff0c;sticky盒子的表现为相对定位relative【第一阶段】&#xff0c; 但当最近可滚动容…...

Redis hash表源码解析

1、 整体数据结构 链式hash解决hash冲突、采用渐进式hash来完成扩容过程。 /** 哈希表节点*/ typedef struct dictEntry {// 键void *key;// 值union {void *val;uint64_t u64;int64_t s64;} v;// 指向下个哈希表节点&#xff0c;形成链表struct dictEntry *next;} dictEntry;…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋

随着工业以太网的发展&#xff0c;其高效、便捷、协议开放、易于冗余等诸多优点&#xff0c;被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口&#xff0c;具有实时性、开放性&#xff0c;使用TCP/IP和IT标准&#xff0c;符合基于工业以太网的…...

算法—栈系列

一&#xff1a;删除字符串中的所有相邻重复项 class Solution { public:string removeDuplicates(string s) {stack<char> st;for(int i 0; i < s.size(); i){char target s[i];if(!st.empty() && target st.top())st.pop();elsest.push(s[i]);}string ret…...

CSS 工具对比:UnoCSS vs Tailwind CSS,谁是你的菜?

在现代前端开发中&#xff0c;Utility-First (功能优先) CSS 框架已经成为主流。其中&#xff0c;Tailwind CSS 无疑是市场的领导者和标杆。然而&#xff0c;一个名为 UnoCSS 的新星正以其惊人的性能和极致的灵活性迅速崛起。 这篇文章将深入探讨这两款工具的核心理念、技术差…...

【threejs】每天一个小案例讲解:创建基本的3D场景

代码仓 GitHub - TiffanyHoo/three_practices: Learning three.js together! 可自行clone&#xff0c;无需安装依赖&#xff0c;直接liver-server运行/直接打开chapter01中的html文件 运行效果图 知识要点 核心三要素 场景&#xff08;Scene&#xff09; 使用 THREE.Scene(…...

C#中用于控制自定义特性(Attribute)

我们来详细解释一下 [AttributeUsage(AttributeTargets.Class, AllowMultiple false, Inherited false)] 这个 C# 属性。 在 C# 中&#xff0c;Attribute&#xff08;特性&#xff09;是一种用于向程序元素&#xff08;如类、方法、属性等&#xff09;添加元数据的机制。Attr…...