【Linux】日志分析与管理

news/2025/1/20 11:04:26/

作为一个运维,如果不会看日志,就好比是冬天刚刚用热水泡完了脚,接着就立马让人把水喝掉。

目录

一、Inode介绍

1.1 什么是inode

1.2 inode表内容

1.3 查看inode号的方式

二、日志分析

 2.1 日志的用途

2.2 日志的分类

2.3 日志级别

2.4 关于用户登陆的日志

三、日志管理

3.1 日志的配置文件

3.2 一些常见用户日志

 3.3 rsyslog配置文件

3.4  如何为程序设置专属的独立日志

3.5 远程日志

3.6日志管理工具——journalctl


一、Inode介绍

1.1 什么是inode

  • inode号通常用于Linux系统的存储文件和目录元数据信息的数据结构
  • 每个文件和目录在文件系统中都有对应的inode,inode中存储了文件的各种元信息,如文件类型、所有者、权限、大小、创建时间、修改时间等信息,以及指向文件数据块的指针
  • 删除文件时,若该文件有多个指向它的inode,则不会释放空间,需要删除所有指向它的inode才会释放存储空间

1.2 inode表内容

每一个inode表记录对应的保存了以下信息:

  • inode number 节点号

  • 文件类型

  • 权限

  • UID

  • GID

  • 链接数(指向这个文件名路径名称个数)

  • 该文件的大小和不同的时间戳

  • 指向磁盘上文件的数据块指针

  • 有关文件的其他数据

1.3 查看inode号的方式

ls -i 文件名stat 文件名df -i     #用于查看文件系统的inode号

 注意!!!

  1. inode号在同一设备中是唯一的,但是在不同分区或不同硬盘中可以有相同inode号
     
  2. 达到inode数量上限时,文件系统将无法创建新的文件或目录,无论是否还有空间。

                                                                                                                                                       

二、日志分析

 2.1 日志的用途

  • 记录系统或程序在系统中的运行事件
  • 通过查看日志可以帮助排查系统故障

2.2 日志的分类

  • 系统日志:操作系统运行中发生的事件和故障
  • 应用日志:某一程序运行中发生的事件和故障

2.3 日志级别

事件的关键程度:

级别消息级别说明
0EMERG紧急会导致主机系统不可用
1ALERT警告必须马上采取措施解决问题
2CRIT严重比较严重的情况
3ERROR错误运行出现错误
4WARNING提醒可能影响系统功能,需要提醒用户的重要事件
5NOTICE注意不会影响正常功能,但是需要注意的事件
6INFO信息一般信息
7DEBUG调试程序或系统调试信息等

2.4 关于用户登陆的日志

日志作用命令
btmp查看登录失败的用户lastb
lastlog查看用户最后一次登录情况lastlog
wtmp用户成功登录的日志last

last 命令用于查询成功登录到系统的用户记录

lastb 命令用于查询登录失败的用户记录

lastlog用于查看用户最后一次登录情况

三、日志管理

3.1 日志的配置文件

Linux操作系统本身和大部分服务器程序的日志文件都默认放在目录/var/log/下

内核及系统日志由系统服务rsyslog统一管理,根据其主配置文件/etc/rsyslog.conf

3.2 一些常见用户日志

/var/log/lastlog记录系统中所有用户最后一次的登录时间的曰志。这个文件也是二进制文件.不能直接用Vi 查看。而要使用lastlog命令查看
/var/log/secure记录验证和授权方面的倍息,只要涉及账户和密码的程序都会记录,比如系统的登录、ssh的登录、su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中
/var/log/wtmp永久记录所有用户的登陆、注销信息,同时记录系统的启动、重启、关机事件。同样,这个文件也是二进制文件.不能直接用Vi查看,而要使用last命令查看
/var/log/btmp记录当前系统上,用户的失败尝试登录相关的日志信息,二进制格式,lastb命令进行查看

 3.3 rsyslog配置文件

/etc/rsyslog.conf 配置文件格式:由三部分组成

  • MODULES:相关模块配置

  • GLOBAL DIRECTIVES:全局配置

  • RULES:日志记录相关的规则配置

RULES配置格式:

通式:

服务程序.记录的日志级别       日志文件的位置(绝对路径)

facility.priority; 
#分类     日志的级别


*: 所有级别
none:没有级别,即不记录
PRIORITY:指定级别(含)以上的所有级别
=PRIORITY:仅记录指定级别的日志信息

文件路径:通常在/var/log/,文件路径前的 ‘ - ’ 表示异步写入   

异步:记录一段日志后统一存入磁盘

同步:内存中磁盘上有一条就记录一条


用户:将日志事件通知给指定的用户,* 表示登录的所有用户
日志服务器@host把日志送往至指定的远程UDP日志服务器

                      @@host 将日志发送到远程TCP日志服务器
管道: | COMMAND,转发给其它命令处理

3.4  如何为程序设置专属的独立日志

举例:

ssh服务的日志默认放在/var/log/secure下,不利于我们观察,现在将其日志独立出来

操作目的:利用rsyslog软件给ssh生成独立的日志文件


1. 修改ssh的配置文件


2. 修改rsyslog的配置文件

系统提供了local0 ~ local6 供用户自定义使用


3. 重新启动rsyslog和ssh服务后,使用ssh服务,查看日志文件


配置成功!

3.5 远程日志

 操作用途:用于管理10-20台服务器

 操作目的:将日志传输到远程服务器

注意:本实验之前请关闭两台主机的防火墙


1. 配置两台主机的/etc/rsyslog.conf文件,打开tcp端口协议

第一台:

第二台:


2. 查看514端口是否打开

第一台:

第二台:


3. 配置/etc/rsyslog.conf文件,配置接收日志的主机IP


4. 测试

第一台:

第二台:


成功

3.6日志管理工具——journalctl

CentOS 7 以后版,利用Systemd 统一管理所有 Unit 的启动日志。

带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。

1. 配置文件

/etc/systemd/journald.conf

2. 命令格式

journalctl [OPTIONS...] [MATCHES...]

查看日志的重要命令:

#显示最近的提示信息
 journalctl -xe
 systemctl status   软件名

#日志默认分页输出,--no-pager 改为正常的标准输出
 journalctl --no-pager

#查看所有日志(默认情况下 ,只保存本次启动的日志)journalctl#查看内核日志(不显示应用日志)journalctl -k#查看系统本次启动的日志    实战案例!!!journalctl -bjournalctl -b -0
#查看上一次启动的日志(需更改设置)journalctl -b -1#查看指定时间的日志   -S=since    -U=unitjournalctl --since="2023-10-30 18:10:30"journalctl --since "20 min ago"journalctl --since yesterdayjournalctl -S "2024-03-31 2:00" -U "2024-04-22 03:00"journalctl --since 09:00 --until "1 hour ago"#实时滚动显示最新日志journalctl -f

3.7 logrotate——日志转储、分割

3.7.1 相关文件

  • 计划任务:/etc/cron.daily/logrotate
  • 配置文件:/etc/logrotate.conf
  • 日志文件:/var/lib/logrotate/logrotate.status

配置文件/etc/logrotate.conf主要参数:

vim /etc/logrotate.conf# see "man logrotate" for details
# rotate log files weekly
weekly 
#一周生成一个新的日志文件# keep 4 weeks worth of backlogs
rotate 4
#只保留最近的4个文件# use date as a suffix of the rotated file
dateext
# 添加一个日期后缀

程序还可以设置独立的配置文件在/etc/logrotate.d/下

3.7.2 配置参数及用例

配置参数说明
compress通过gzip压缩转储以后的日志
nocompress不压缩
copytruncate用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate备份日志文件但是不截断
create mode ownergroup转储文件,使用指定的权限,所有者,所属组创建新的日志文件
nocreate不建立新的日志文件
delaycompress和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress覆盖 delaycompress 选项,转储同时压缩
errors address专储时的错误信息发送到指定的Email地址
ifempty即使是空文件也转储,此为默认选项
notifempty如果是空文件的话,不转储
mail address把转储的日志文件发送到指定的E-mail 地址
nomail转储时不发送日志文件
olddir directory转储后的日志文件放入指定目录,必须和当前日志文件在同一个文件系统
noolddir转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript在转储以前需要执行的命令,这两个关键字必须单独成行
postrotate/endscript在转储以后需要执行的命令,这两个关键字必须单独成行
daily指定转储周期为每天
weekly指定转储周期为每周
monthly指定转储周期为每月
rotate count指定日志文件删除之前转储的次数,0指没有备份,5指保留5个备份
tabooext [+] list让logrotate*不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig,.rpmsave, v, 和~
size size当日志文件到达指定的大小时才转储bytes(缺省)及KB或MB
sharedscripts默认,对每个转储日志运行prerotate和postrotate脚本,日志文件的绝对路径作为第一个参数传递给脚本。 这意味着单个脚本可以针对与多个文件匹配的日志文件条目多次运行(例如/ var / log / news /.example)。 如果指定此项sharedscripts,则无论有多少个日志*与通配符模式匹配,脚本都只会运行一次
nosharedscripts针对每一个转储的日志文件,都执行一次prerotate和 postrotate脚本,此为默认值
missingok如果日志不存在,不提示错误,继续处理下一个
nomissingok如果日志不存在,提示错误,此为默认值

http://www.ppmy.cn/news/1434596.html

相关文章

maya显示隐藏 动画长度

目录 大纲视图,选择节点,H控制显示与隐藏 使用Viewport显示/隐藏 脚本控制显示/隐藏 获取动画长度python脚本 大纲视图,选择节点,H控制显示与隐藏 使用Viewport显示/隐藏 这是最直观的方法,适合临时隐藏Mesh以便专…

EelasticSearch的docker安装-----》es客户端使用!!!

1.Docker安装 docker run -d --name es7 -e ES_JAVA_POTS"-Xms256m -Xmx256m" -e "discovery.typesingle-node" -v /opt/es7/data/:/usr/share/elasticsearch/data -p 9200:9200 -p 9300:9300 elasticsearch:7.14.02.客户端UI工具,Edge浏览器…

北航计算机软件技术基础课程作业笔记【4】

题目&#xff08;好像以前没加&#xff09; 二叉树与哈希表 作业 1.二叉树前序遍历结果 二叉树结构为 代码实现中序后序推理前序表达式 #include <iostream> #include <stack> #include <string> #include <vector> #include <deque> ​ // …

Laravel 6 - 第十五章 验证器

​ 文章目录 Laravel 6 - 第一章 简介 Laravel 6 - 第二章 项目搭建 Laravel 6 - 第三章 文件夹结构 Laravel 6 - 第四章 生命周期 Laravel 6 - 第五章 控制反转和依赖注入 Laravel 6 - 第六章 服务容器 Laravel 6 - 第七章 服务提供者 Laravel 6 - 第八章 门面 Laravel 6 - …

webview的使用方法和后退键的处理

WebView是一个能够显示网页内容的控件&#xff0c;通常用于Android或iOS应用程序中嵌入网页。下面我将分别说明WebView在Android和iOS中的使用方法&#xff0c;以及如何处理后退键。 Android中的WebView使用方法 添加WebView到布局文件中 在你的布局XML文件中添加WebView控件…

Linux 的情况下实现贪吃蛇 -- 第二十八天

1.keypad(stdsrc,1) 参数表示是否接收&#xff0c;1表示接收指令 2.思路&#xff1a;初始化initNcurses()&#xff0c; 封装地图函数实现地图gamePic&#xff08;&#xff09; 分三部分实现&#xff1a;2.1: 在第0行&#xff1a;打印 "--"," | "和&q…

【JavaScript编程实操14】DOM实操_回到顶部

前言 本次主要是针对Javascript阶段的DOM实操方面的练习&#xff0c;本次主要实现当页面内容过多时&#xff0c;可以点击按钮&#xff0c;快速回到页面顶部的效果。这次的实现逻辑比较简单&#xff0c;主要是应用函数实现页面的回到顶部功能&#xff0c;this.scrollTo(0, 0)可以…

完美解决多种情况下的 java.lang.NullPointerException 的异常

文章目录 1. 复现错误2. 分析问题3. 解决问题1. 复现错误 在工作中,经常会遇见java.lang.NullPointerException的异常,这种异常千奇百怪,但明确一点的是:它是空指针异常,也称之为NPE异常,如下代码所示: @Setter @Getter @Accessors(chain = true) public class Student…