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]: xxxx


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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ArcGIS提示当前许可不支持影像服务器

1、问题&#xff1a; 在用ArcGIS上处理影像栅格数据时&#xff08;比如栅格数据集裁剪、镶嵌数据集构建镶嵌线等&#xff09;经常会出现。 无法启动配置 RasterComander.ImageServer <详信息 在计算机XXXXX上创建服务器对象实例失败 当前许可不支持影像服务器。 ArcGIS提示当…

如何通过内网穿透实现无公网IP也能远程访问内网的宝塔面板

文章目录 一、使用官网一键安装命令安装宝塔二、简单配置宝塔&#xff0c;内网穿透三、使用固定公网地址访问宝塔 宝塔面板作为建站运维工具&#xff0c;适合新手&#xff0c;简单好用。当我们在家里/公司搭建了宝塔&#xff0c;没有公网IP&#xff0c;但是想要在外也可以访问内…

java聊天程序(群聊)简单版

先运行服务端&#xff0c;如果不先连接服务端&#xff0c;就不监听&#xff0c;那客户端不知道连接谁 服务端 import java.io.*; import java.net.*; import java.util.ArrayList; public class QLFWD{public static ServerSocket server_socket;public static ArrayList<S…

LeetCode:1466. 重新规划路线(DFS C++、Java)

目录 1466. 重新规划路线 题目描述&#xff1a; 实现代码与解析&#xff1a; DFS 原理思路&#xff1a; 1466. 重新规划路线 题目描述&#xff1a; n 座城市&#xff0c;从 0 到 n-1 编号&#xff0c;其间共有 n-1 条路线。因此&#xff0c;要想在两座不同城市之间旅行只有…

联想范建平:联想混合AI架构具备两大明显优势

12月7日&#xff0c;首届AI PC创新论坛在北京联想集团总部举办。联想集团副总裁、联想研究院人工智能实验室负责人范建平表示&#xff0c;为提供真正可信、个性化的AI专属服务&#xff0c;联想提出了混合智能&#xff08;Hybrid AI&#xff09;概念&#xff0c;并已经显现出更强…

物联网智能水表如何保证用户隐私和数据安全?

随着科技的发展, 物联网已经渗透到了我们生活的各个领域, 智能水表作为其中的一种应用之一。但是&#xff0c;在使用智能水表时&#xff0c;不可避免地涉及到用户隐私和数据安全的问题。所以&#xff0c;我们应该如何保证智能水表的用户隐私和数据安全呢&#xff1f; 首先&…

Java面向对象(高级)-- 注解(Annotation)

文章目录 一、 注解概述&#xff08;1&#xff09; 什么是注解&#xff08;2&#xff09; 注解与注释&#xff08;3&#xff09; 注解的重要性 二、常见的Annotation作用&#xff08;1&#xff09;示例1&#xff08;2&#xff09;示例2&#xff08;3&#xff09;示例3 三、 三个…

自动化测试:PO模式详解!

PO&#xff08;Page Object&#xff09;模式是一种在自动化测试中常用的设计模式&#xff0c;将页面的每个元素封装成一个对象&#xff0c;通过操作对象来进行页面的交互。 概括来说就是&#xff0c;每个页面都有对应的PO类&#xff0c;PO类中包含了页面的元素定位和操作方法。…

OMSA无法打开无法显示等服务异常时如何处理

文章目录 为何需要重启OMSAWindows 重启OMSA服务Linux 重启OMSA服务VMware 环境重启OMSA服务重启无效的解决办法推荐阅读 为何需要重启OMSA 在安装 OMSA 的服务器中&#xff0c;OMSA 管理软件运行可能会不稳定。例如&#xff1a; 某些信息&#xff08;如存储信息&#xff09;…

使用DockerUI结合内网穿透工具轻松实现公网访问和管理docker容器

文章目录 前言1. 安装部署DockerUI2. 安装cpolar内网穿透3. 配置DockerUI公网访问地址4. 公网远程访问DockerUI5. 固定DockerUI公网地址 前言 DockerUI是一个docker容器镜像的可视化图形化管理工具。DockerUI可以用来轻松构建、管理和维护docker环境。它是完全开源且免费的。基…

C - 语言->内存函数

目录 系列文章目录 前言 1. memcpy使⽤和模拟实现 1.2 memcpy函数的模拟实现: 2. memmove 使⽤和模拟实现 2.1memmove的模拟实现&#xff1a; 3. memset 函数的使⽤ 4. memcmp 函数的使⽤ 系列文章目录 ✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff…

我有才打造知识付费小程序

一站式线上线下活动管理 为用户提供“精彩城市生活和人脉资源”。 在线活动提供创业、互联网、科技、投资、金融、教育、亲子、生活、聚会交友、医疗、设计、分享会、脱口秀、音乐演出等多种活动类型, 为职场白领提升技能、拓展人脉、聚会交友的首选平台。 为主办方提供“一…

迅镭激光受邀参加中国船舶与海洋工程产业知识产联盟年会

近日&#xff0c;由中国船舶工业行业协会知识产权分会、中国船舶与海洋工程产业知识产权联盟主办的“知识产权高质量发展高端论坛暨中国船舶工业行业协会知识产权分会及中国船舶与海洋工程产业知识产权联盟年会”在南通举行。 本次会议荟聚中国船舶行业专家、高校、科研院所及船…

基于ssm学生请假系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本学生请假系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&am…

Java网络编程——创建非阻塞的HTTP服务器

HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超级文本传输协议&#xff09;是网络应用层的协议&#xff0c;建立在TCP/IP基础上。HTTP使用可靠的TCP连接&#xff0c;默认端口是80端口。HTTP的第1个版本是HTTP/0.9&#xff0c;后来发展到了HTTP/1&#xff0c;现在最…

拼多多选品大作战:利用类目榜单找到潜力爆品

想要在激烈的电商竞争中脱颖而出&#xff0c;选品是至关重要的一环。 而拼多多提供的类目榜单数据&#xff0c;为商家们提供了一个寻找热门产品和趋势的利器。本文将详细介绍如何利用拼多多类目榜单进行选品&#xff0c;并帮助您找到畅销产品。 拼多多新手选品核心两要素&…

ARCGIS 中使用 ChatGPT 的 5 种方式

ChatGPT 一度成为最热门的话题。什么是 ChatGPT&#xff1f;谁能比 ChatGPT 本身更好地回答这个问题呢&#xff1f;我们要求它写一个关于 ChatGPT 是什么的简短描述&#xff0c;这是它的回应&#xff1a; ChatGPT 是一个聊天机器人&#xff0c;使用 OpenAI 开发的 GPT-3 语言模…

【AI】VIT Transformer论文学习笔记

论文&#xff1a;Dosovitskiy A, Beyer L, Kolesnikov A, et al. An image is worth 16x16 words: Transformers for image recognition at scale[J]. arXiv preprint arXiv:2010.11929, 2020 1.文章背景 计算机视觉当前最热门的两大基础模型就是Transformer和CNN了。 Transf…

1146-table performance-schema.session_variables don‘t exits打卡navicat连接MySQL报错

navicat连接MySQL时报错&#xff1a; 管理员权限打开cmd 输入下面代码&#xff1a; mysql_upgrade -u root -p --force输入密码 然后就可以正常连接了。 mysql_upgrade检查所有数据库中与mysql服务器当前版本不兼容的所有表。 mysql_upgrade也会升级系统表&#xff0c;以便你…

mysql的组合查询

mysql的组合查询 1、mysql的内连接查询 在 MySQL 中&#xff0c;内连接&#xff08;INNER JOIN&#xff09;是一种根据两个或多个表之间的匹配条件&#xff0c;将多个表中的数据进行联接的操作。内连接只返回符合联接条件的行&#xff0c;而不会返回未匹配的行。 内连接的语…