【linux】日志管理和分析

一、概述

在Linux系统的管理和运维中,日志文件起到至关重要的作用。它们记录了系统运行过程中的各种事件,包括系统故障、性能数据和安全事件。

二、 日志的作用和分类

日志的作用

日志文件记载了系统的生命线,利用它们可以:
1. 诊断系统故障
2. 监控系统状态和性能
3. 发现潜在的安全问题
4. 满足法规审计要求

日志的分类

Linux系统日志通常分为以下几类:
1. 内核及系统日志

内核及系统日志由系统服务rsyslog统一管理,记录了系统内核、应用程序等各种事件。
2. 用户日志

用户日志记录了系统用户的登录和退出信息。
3. 程序日志

程序日志由各个应用程序独立管理,格式不统一,记录了应用程序的运行状态和错误信息等。

三、 日志的管理

为了确保系统的稳定性和安全性,需要对日志进行有效管理,包括备份、归档、轮转和权限控制。

日志轮转和切割

日志轮转是指将当前日志文件归档并开始新的日志,以实现日志文件的循环利用。

为了控制日志文件的大小和数量,需要对日志进行切割,将一个大的日志文件分割成多个小的日志文件。

常见的日志轮转和切割方法包括:
1. 根据时间轮转
2. 根据大小轮转
3. 根据数量轮转

日志级别

根据日志消息的重要程度,可以将Linux系统中的日志分为不同的级别,如警告(Warning)、错误(Error)、信息(Info)、调试(Debug)等。通过设置适当的日志级别,可以帮助管理员快速定位和解决问题,同时避免在生产环境中记录过多的无用信息。

四、日志分析

日志分析是对日志文件进行深入检查,以提取有意义的信息、发现模式和异常的活动。

在Linux中,通过日志分析查找错误通常涉及以下步骤:

1. 确定日志文件位置:

  - 大多数Linux系统的日志文件存储在`/var/log`目录下。
  - 应用程序可能有自己的日志,通常在其配置文件中指定。

2. 常见日志文件:

  - /var/log/syslog 或 /var/log/messages:系统日志,记录系统活动。
  - /var/log/auth.log:身份验证日志,记录用户登录和授权信息。
  - /var/log/kern.log:内核日志,记录与内核相关的消息。
  - /var/log/dmesg:记录系统启动时内核检测到的硬件和驱动信息。
  - /var/log/apache2/ 或 /var/log/httpd/:Web服务器日志(Apache)。
  - /var/log/mysql/:MySQL数据库日志。

3. 查看日志文件:

  - 使用文本查看器,如`less`, more, cat, 或`tail`。
  - 例如,`tail -f /var/log/syslog`可以实时查看最新日志。

4. 搜索特定条目:

  - 使用`grep`命令搜索错误消息,例如:`grep "error" /var/log/syslog`。
  - 结合使用管道和`grep`来过滤日志,例如:`cat /var/log/syslog | grep "error" | less`。

5. 分析日志内容:

  - 查找错误代码或异常消息。
  - 注意时间戳,以确定错误发生的时间。
  - 关注错误之前和之后的日志条目,以获取上下文。

6. 使用日志分析工具:

  - logwatch、goaccess、multitail等工具可以帮助分析和监控日志文件。

7. 跟踪系统状态:

  - 使用`systemctl status service-name`查看服务状态。
  - 使用`journalctl`命令查看系统日志管理器`systemd`的日志。

8. 日志旋转:

  - 了解日志旋转设置,日志文件可能会被归档或删除。

9. 设置日志级别:

  - 如果需要更详细的日志,可以调整日志级别。

10. 文档记录:

   - 记录发现和所采取的步骤,以备将来参考。

五、命令和工具使用

dmesg

dmesg 命令显示的内容通常不直接存储在一个持久的日志文件中,而是从内核的环形缓冲区中提取的,这个缓冲区包含了系统启动以来的内核消息。不过,这些消息可以被配置为写入到磁盘上的日志文件中,这通常是通过系统的日志守护进程如`rsyslog`或`syslog`来完成的。

在基于 systemd 的系统中,内核消息可以通过 journalctl 命令来访问,这个命令会从 systemd 的日志系统 journald 中提取日志,包括内核消息。要查看实时的内核消息,可以使用 journalctl -k 命令,这与 dmesg 提供的信息类似。

如果想查找与 dmesg 相关的日志文件,可以查看以下位置:

- /var/log/dmesg(在某些系统上,启动时的 dmesg 输出可能会被存储在这里)

- /var/log/kern.log(在许多基于 Debian 的系统上,内核日志消息会被存储在这里)

- /var/log/messages(在一些其他的系统上,通用的系统日志消息会被存储在这里,包括内核消息)

以下是一些常用的方法:

1. 使用管道(pipe)和过滤器(filter):通过管道将dmesg的输出传递给其他命令行工具,如grep、awk、sed等,可以用来过滤和查找特定的信息。例如,要查找与特定硬件相关的信息,可以使用grep命令来过滤输出结果。例如:

dmesg | grep "硬件关键字"

查看以太网连接 dmesg | grep eth;探测系统内核模块 dmesg | grep acpi;查看硬盘信息 dmesg | grep sd*;CPU 的信息可以输入命令 dmesg | grep cpu 等。

2.使用less或more命令:这两个命令可以逐页显示输出结果,并支持向上和向下滚动以查看更多内容。例如:

dmesg | less

使用less命令时,可以使用箭头键或其他快捷键进行导航。
3. 使用tail命令:tail命令可以显示文件的最后几行内容,结合-f选项可以实时查看正在添加到文件中的新内容。例如:

tail -f /var/log/dmesg

这将实时显示/var/log/dmesg文件中的新增内容,包括内核日志消息。

4. 自定义显示参数:通过指定选项和参数,可以定制dmesg的输出格式和显示内容。例如,使用-n选项可以设置日志的显示级别,-s选项可以设置缓冲区的大小。例如:

dmesg -n 3

这将只显示级别为3或以上的日志信息。

5. 查看其他日志文件:如果dmesg的输出被重定向到其他日志文件中,可以查看这些文件以获取更多信息。例如,开机信息可以存进文档里面 dmesg > bootinfo.txt。

logrotate

这个工具可以帮助管理员定期轮转、压缩和删除日志文件,以确保系统不会因为日志文件过大而出现问题。

许多系统管理员会配置自定义的日志轮转计划,以便旧的日志文件被移动到归档位置,并保持系统日志目录的整洁。需要检查 /etc/logrotate.conf 和 /etc/logrotate.d/ 目录下的配置文件来了解是否有任何自定义的日志轮转计划。

rsyslog

这是一个流行的日志守护进程,它可以从各种来源接收并处理日志消息,然后将它们写入到指定的日志文件中。

journalctl

用于查询和控制systemd journal。它可以帮助管理员检索系统日志、过滤特定事件以及实时监控系统状态。

对于使用 systemd 管理的服务,可以使用 systemctl status service-name 命令来获取服务的状态和最近的日志条目。

在使用 systemd 的系统上,可以查询 systemd 的 journal 来查看特定服务的日志。例如,要查看名为 example.service 的服务的日志,可以使用:journalctl -u example.service.

还可以实时查看日志更新,例如:journalctl -u example.service -f.

对于使用systemd的系统(如最新的Debian、Ubuntu、Fedora、CentOS等),可以使用journalctl命令来查看启动日志。
以下是一些使用journalctl命令查看启动日志的方法:
1. 查看当前启动的日志: 

journalctl -b

2. 查看上一次启动的日志: 

 journalctl -b -1

3. 查看特定启动的日志(其中`0`是当前启动,`-1`是上一次启动,依此类推): 

   journalctl -b -2

4. 查看内核的启动消息:

   journalctl -k

此外,还有一些其他有用的选项和功能,

按时间范围查看日志
使用--since--until选项,您可以查看特定时间范围内的日志条目。例如,要查看自上次启动以来的日志,可以使用:

journalctl --since "last boot"

过滤日志
使用--boot选项,您可以查看特定启动会话期间的日志。这对于故障排除很有用,特别是当您怀疑问题与特定系统启动有关时。

过滤特定服务日志
如果您只想查看特定服务的日志,可以使用-u选项后跟服务名称。例如,要查看sshd服务的日志,可以使用:

journalctl -u sshd

查看特定优先级以上的日志
使用--priority选项,您可以过滤出特定优先级以上的日志条目。这对于快速筛选出关键信息非常有用。

显示完整的日志条目
默认情况下,journalctl可能会截断日志条目以节省空间。使用--no-short-show选项可以显示完整的条目。

实时跟踪日志
除了-f选项之外,您还可以使用--follow选项来实时跟踪特定的日志条目或服务。这对于观察正在发生的事情非常有用。

其他有用的选项

  • --utc:以UTC时间显示日志条目。
  • --boot=-1:显示上一个启动周期的日志。
  • --lines=N:只显示最后N条日志条目。

与其他工具结合使用
尽管journalctl是一个强大的工具,但您还可以结合其他工具(如grepawklesstail等)来进一步筛选、格式化和分析日志数据。

自定义输出格式
使用--output-fields选项,您可以指定要显示的字段,例如时间戳、进程ID、消息等。这可以帮助您定制输出以满足特定的需求。

Logwatch

logwatch是一个可定制的日志分析系统,它可以解析和汇总Linux系统上的各种日志文件,并将报告发送到你的邮箱或者输出到屏幕。
1. 安装Logwatch: 

   sudo apt-get install logwatch # Debian/Ubuntu系统sudo yum install logwatch # RedHat/CentOS系统

2. 运行Logwatch:
  - 默认情况下,logwatch会分析所有日志文件并输出到屏幕:   

logwatch

  - 可以通过命令行选项来定制输出,例如,指定时间范围:   

logwatch --range 'between -7 days and -1 days'

  - 将报告发送到邮箱:

logwatch --mailto your-email@example.com

3. 配置Logwatch:
  - logwatch的配置文件通常位于`/usr/share/logwatch/default.conf/logwatch.conf`。
  - 可以复制这个文件到`/etc/logwatch/`目录并根据需要修改它。

GoAccess

goaccess是一个实时的Web日志分析器和交互式查看器,它在终端中运行。
1. 安装GoAccess: 

   sudo apt-get install goaccess # Debian/Ubuntu系统sudo yum install goaccess # RedHat/CentOS系统

2. 运行GoAccess:

  - 可以直接在终端中运行`goaccess`来分析特定的日志文件:

goaccess /var/log/apache2/access.log -c

 -c选项会显示配置对话框,让你选择日志和日期格式。
3. 使用GoAccess:
  - goaccess提供了一个实时的Web界面,可以通过浏览器访问。
  - 可以使用`-o`选项输出一个HTML报告:

goaccess /var/log/apache2/access.log -o report.html --log-format=COMBINED

Multitail

multitail允许同时监控多个日志文件,并在一个或多个窗口中显示输出。
1. 安装Multitail: 

   sudo apt-get install multitail # Debian/Ubuntu系统sudo yum install multitail # RedHat/CentOS系统

2. 运行Multitail:
  - 监控两个日志文件:   

     multitail /var/log/apache2/access.log /var/log/apache2/error.log

  - 可以使用`-s`选项来分割屏幕,显示多个日志文件。
3. 配置Multitail:
  - multitail可以通过命令行选项进行配置,也可以通过配置文件`/etc/multitail.conf`进行更持久的配置。

六、清空日志

在Linux系统中清空日志文件通常可以通过将空内容重定向到文件来实现。这可以用`truncate`命令或者简单的重定向操作来完成。在进行这些操作之前,确保了解正在清空的日志文件的重要性,因为这将永久删除日志内容,这可能对系统故障排查和安全审计不利。以下是一些清空日志文件的方法:

1. 使用`truncate`命令:

sudo truncate -s 0 /path/to/logfile
这里的`-s 0`选项将文件大小设置为0,`/path/to/logfile`是您想要清空的日志文件的路径。

2. 使用重定向操作: 

   sudo echo -n > /path/to/logfile
  或者 
   sudo tee /path/to/logfile < /dev/null
  这些命令会将空内容重定向到日志文件中,从而清空它。

3. 对于`systemd`系统,您可以使用`journalctl`来清理旧的日志条目: 

   sudo journalctl --vacuum-size=1M
  这将删除所有日志,只保留最后1MB的数据。

4. 另一个`journalctl`的选项是按时间清理日志: 

   sudo journalctl --vacuum-time=1d
  这将删除一天之前的所有日志。在执行这些操作之前,请确保不会删除任何重要的系统日志,这可能对系统的维护和故障排查至关重要。如果不确定,最好是备份这些日志文件,而不是直接删除它们。

5. 手动触发logrotate

某些日志文件可能会由日志轮转工具(如logrotate)自动管理,这些工具通常会定期压缩和删除旧的日志文件。在这种情况下,可以手动触发`logrotate`,而不是直接清空日志文件:

sudo logrotate /etc/logrotate.conf --force
这将强制`logrotate`根据其配置立即轮转日志。

  

 

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

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

相关文章

震惊!原来这就是JavaScript闭包的秘密

&#x1f4e2; 鸿蒙专栏&#xff1a;想学鸿蒙的&#xff0c;冲 &#x1f4e2; C语言专栏&#xff1a;想学C语言的&#xff0c;冲 &#x1f4e2; VUE专栏&#xff1a;想学VUE的&#xff0c;冲这里 &#x1f4e2; CSS专栏&#xff1a;想学CSS的&#xff0c;冲这里 &#x1f4…

硬盘基本知识(磁头、磁道、扇区、柱面)

概述 盘片&#xff08;platter&#xff09; 磁头&#xff08;head&#xff09; 磁道&#xff08;track&#xff09; 扇区&#xff08;sector&#xff09; 柱面&#xff08;cylinder&#xff09; 盘片 片面 和 磁头 硬盘中一般会有多个盘片组成&#xff0c;每个盘片包含两个面…

Eviews 11安装包下载及安装教程

Eviews 11下载链接&#xff1a;https://docs.qq.com/doc/DUmRGdXVUeVBSU1lK 1.选中下载好的安装包&#xff0c;右键解压到“Eviews 11”文件夹 2.选中"Setup.exe"鼠标右键选择以管理员身份运行 3.点击“Next” 4.勾选“I Accept...”&#xff0c;点击“Next” 5.选择…

理解String 及 String.intern() 在实际中的应用

1. 首先String不属于8种基本数据类型&#xff0c;String是一个对象。     因为对象的默认值是null&#xff0c;所以String的默认值也是null&#xff1b;但它又是一种特殊的对象&#xff0c;有其它对象没有的一些特性。   2. new String()和new String(“”)都是申明一个…

记一次 .NET某工控 宇宙射线 导致程序崩溃分析

一&#xff1a;背景 1. 讲故事 为什么要提 宇宙射线, 太阳耀斑 导致的程序崩溃呢&#xff1f;主要是昨天在知乎上看了这篇文章&#xff1a;莫非我遇到了传说中的bug&#xff1f; &#xff0c;由于 rip 中的0x41变成了0x61出现了bit位翻转导致程序崩溃&#xff0c;截图如下&am…

Jenkins接口调用

Jenkins是好用&#xff0c;但是接口文档写的稀烂 1、授权&#xff0c;Jenkins不推荐使用创建单个任务时创建的token&#xff0c;推荐这个用户下的创建user token。 点击自己账号信息&#xff0c;即可创建token。 2、postman选择basic auth&#xff0c;输入账号密码&#xff0…

CentOS 7 基于官方源码和openssl制作openssh 9.6 rpm包(含ssh-copy-id) —— 筑梦之路

之前写了一篇&#xff1a; CentOS 7 制作openssh 9.6 rpm包更新修复安全漏洞 —— 筑梦之路_升级openssh9.6-CSDN博客 有好几个网友反馈&#xff0c;ssh-keygen生成密钥存在问题&#xff0c;之前的rsa \ dsa加密算法用不了&#xff0c;因此写了一篇&#xff1a; 关于openssh…

nginx 二、配置域名

文章目录 一、配置本地域名查看虚拟机ip修改hosts文件测试域名是否配置成功 二、配置aliyun域名三、实践1.创建html2.配置nginx3.测试服务器内部测试页面测试 总结 docker中启动nginx容器完成如下操作&#xff0c;对于docker安装nginx可以看这篇文章 nginx 一、安装与conf浅析 …

Linux上搭建YApi

YApi是http接口管理和测试的重要工具&#xff0c;其作用相当于原来用的postman&#xff0c;但是比postman有更多的功能&#xff0c;本篇文章主要介绍如何在linux环境中快速的安装&#xff08;利用yum命令安装&#xff09;和部署YApi 一、nodejs 安装 1.1 下载nodejs包 yum i…

Harbor配置同步规则删除不掉

【问题原因】 harbor上主从两个仓库&#xff0c;配置同步规则时&#xff0c;定时任务配置太频繁&#xff0c;导致规则修改&#xff0c;删除都失败。 【问题现象】 点击修改后保存&#xff0c;页面报internal server error的错。 【问题排查】 docker ps | grep harbor 查看…

仓库管理软件有哪些比较好用?

“仓库管理软件有哪些比较好用&#xff1f;” “好用&#xff0c;却不一定适合。” 有时候&#xff0c;不是某个仓库管理软件不好用&#xff0c;而是它不适合你们企业。 制造业企业的仓库管理场景&#xff0c;随着制造业企业规模的扩大&#xff0c;逐步精细化&#xff0c;企…

JAVA基础学习笔记-day12-泛型

JAVA基础学习笔记-day12-泛型 1. 泛型概述1.1 泛型的引入 2. 使用泛型举例2.1 集合中使用泛型2.2 相关使用说明 3. 自定义泛型结构3.1 泛型的基础说明3.2 自定义泛型类或泛型接口3.2.1 说明3.2.2 注意 3.3 自定义泛型方法3.3.1 说明 4. 泛型在继承上的体现5. 通配符的使用5.1 通…

C语言KR圣经笔记 5.6指针数组;指针的指针

5.6 指针数组&#xff1b;指针的指针 因为指针本身也是变量&#xff0c;所以它们也能像其他变量一样保存在数组里面。我们写个程序来说明&#xff0c;该程序将一些文本行按照字母顺序排列&#xff0c;算是 UNIX 程序 sort 的精简版本。 在第三章中&#xff0c;我们介绍了对一…

10-链表-删除排序链表中的重复元素 II

这是链表的第10篇算法&#xff0c;这是上一篇文章的加强版&#xff0c;力扣链接。 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,3,4,…

Facebook选品方法大揭秘,这几个最畅销类目别错过!

现在越来越多的卖家开始做社媒电商&#xff0c;其中很多人都想在 Facebook 这个平台上分一杯羹&#xff0c;而 Facebook选品对于这些商家来说非常重要。俗话说&#xff0c;七分靠选品&#xff0c;三分靠运营&#xff0c;想成功入局 Facebook&#xff0c;选品选的好&#xff0c…

肠道重要属——芽孢杆菌属,益生与病原双标签

谷禾健康 芽孢杆菌属&#xff08;Bacillus&#xff09;是革兰氏阳性、杆状、芽孢杆菌科细菌的一个属&#xff0c;属于厚壁菌门。 芽孢杆菌属物种可以是专性需氧微生物(依赖氧气)或兼性厌氧微生物(具有需氧或厌氧的能力)。当使用或存在氧气时&#xff0c;它们的过氧化氢酶检测呈…

Stable Diffusion汉化插件

今天为大家介绍Stable Diffusion的两种UI汉化包&#xff0c;一种是汉化包&#xff0c;就中文界面&#xff0c;方便大家对于繁杂的参数的模型的操作&#xff0c;一种是中英文对照界面&#xff0c;在中文提示下&#xff0c;同时显示英文&#xff0c;不但方便设置也同时学习了英文…

MySQL进阶篇(一)存储引擎

一、MySQL 体系结构 &#xff08;1&#xff09; 连接层 最上层是一些客户端和链接服务&#xff0c;包含本地 sock 通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念&#xff…

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

文章目录 一、使用官网一键安装命令安装宝塔二、简单配置宝塔&#xff0c;内网穿透三、使用固定公网地址访问宝塔 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。…

这款IDEA插件真的爽,白嫖真香

Apipost-Helper是由Apipost推出的IDEA插件&#xff0c;写完接口可以进行快速调试&#xff0c;且支持搜索接口、根据method跳转接口&#xff0c;还支持生成标准的API文档&#xff0c;注意&#xff1a;这些操作都可以在代码编辑器内独立完成&#xff0c;非常好用&#xff01;这里…