运维必备的Linux日志文件分析与管理

一、Inode(索引节点)概述

1.1 什么是Inode

  • Inode(索引节点)用于表示文件或目录的数据结构

  • 每个inode有唯一的编号标识,文件系统使用这些编号来查找和访问文件。
    文件名和inode之间建立了映射关系,通过文件系统的目录结构可以将文件名与相应的inode关联起来,从而可以通过文件名来访问文件

  • 当文件被删除时,只删除了与文件名相关联的inode,而文件的实际数据并没有立即被清除
    只有当文件没有任何指向它的inode时,系统才会释放文件的存储空间。

1.2 Inode和block的区别?

  • inode 号是用于标识和管理文件的唯一索引节点的标识符,inode表包含文件的元数据。
  • block 块是文件系统中用于存储文件实际数据的最小单位,由文件系统进行分配和管理,并通过 inode 号中的指针关联到对应的文件。

1.3 Inode表

存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域叫做inode表。

1.3.1 Inode表内容

  • inode number 节点号
  • 文件类型
  • 权限
  • UID
  • GID
  • 链接数(指向这个文件名路径名称个数)
  • 该文件的大小和不同的时间戳
  • 指向磁盘上文件的数据块指针
  • 有关文件的其他数据

1.3.2 硬盘分区后的结构

在这里插入图片描述

1.3.3 访问文件的简单流程

在这里插入图片描述

当用户在Linux系统中试图访问一个文件时

  1. 系统会先根据文件名去查找它对应的inode号码:通过inode号码,获取inode信息;
  2. 根据inode信息,看该用户是否具有访问这个文件的权限
  3. 如果有,就指向相对应的数据block,并读取数据;
    如果没有,拒绝用户访问

1.4 Inode号(inode number)

1.4.1 什么是Inode号?

每个inode都有一个号码,文件名和inode号码是一一对应关系,操作系统用inode号码来识别不同的文件

同一设备下,inode号不可以相同

不同设备下,inode可以相同

1.4.2 查看Inode号的方式

  1. stat 文件名 查看文件的Inode号
    在这里插入图片描述
  2. df -i 查看文件系统的Inode号
    在这里插入图片描述
  3. ls -i 文件名/目录 //查看Inode号 , 目录要用绝对路径

在这里插入图片描述
在这里插入图片描述

1.5 三个时间戳

在这里插入图片描述

  1. atime(access time) 最后一次查看文件的时间

  2. mtime(modify time) 最近更改文件内容的时间,更改完内容之后,ctime也会改变

  3. ctime(change time) 最近更改文件元信息的时间,比如改变权限等

1.6 目录文件结构

inode不包含文件名。文件名是存放在目录当中的。Linux系统中一切皆文件,因此目录也是一种文件。

在这里插入图片描述

目录文件的结构非常简单,就是一系列目录项(dirent)的列表。
每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。

ls -i 目录    //查看目录下所有文件的Inode号

在这里插入图片描述

二、日志概述

2.1 日志的功能

  • 用于记录系统、程序运行中发生的各种事件
  • 通过阅读日志,有助于诊断和解决系统故障

2.2 日志的分类

  • 内核及系统日志
    系统服务rsyslog统一进行管理,日志格式基本相似
  • 用户日志
    记录系统用户登录及退出系统的相关信息。
  • 程序日志
    由各种应用程序独立管理的日志文件,记录格式不统一

2.3 日志文件格式

日志一般保存在 /var/log/目录下。

以/var/log/messages文件为例

tail -f /var/log/messages   //实时追踪后十行

在这里插入图片描述

日志文件的格式包含以下 4 列:

1.事件产生的时间(什么时候)
2.产生事件的服务器的主机名
3.产生事件的服务名或程序名(做了什么)
4.事件的具体信息 (谁)

2.4 用户日志

日志文件位置日志文件说明
/var/log/lastlog记录系统中所有用户最后一次的登录时间的曰志。这个文件也是二进制文件.不能直接用Vi 查看。而要使用lastlog命令查看
/var/log/secure记录验证和授权方面的倍息,只要涉及账户和密码的程序都会记录,比如系统的登录、ssh的登录、su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中
/var/log/wtmp永久记录所有用户的登陆、注销信息,同时记录系统的启动、重启、关机事件。同样,这个文件也是二进制文件.不能直接用Vi查看,而要使用last命令查看
/var/tun/ulmp记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样,这个文件不能直接用Vi查看,而要使用w、who、users等命令查看

2.4.1 查询当前登录用户

users //仅显示登录的用户名

在这里插入图片描述

w [选项] //显示当前系统上登录的用户以及活动情况

在这里插入图片描述

USER:登录的用户名。
TTY:用户当前所使用的终端。
FROM:登录用户的IP地址或主机名。
LOGIN@:登录时间。
IDLE:用户在终端处于空闲状态的时间。
JCPU:用户所有进程的累计CPU时间。
PCPU:当前正在运行的进程的CPU时间。
WHAT:用户正在做的事情(命令或程序的简短描述)。

who //当前登录用户的信息,包括用户名、登录终端和登录时间等

在这里插入图片描述

root             登录的用户名
pts/0            用户所使用的终端。
2023-07-31 02:29 登录时间和日期。
192.168.2.103    登录用户的IP地址或主机名。

2.4.2 查询历史登录用户

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

last | tail  //查询登录成功的用户,只显示最后十行

在这里插入图片描述

lastb 查询登录失败的用户记录

lastb    //查询登录失败的用户记录

在这里插入图片描述

三、系统日志管理 rsyslog

3.1 日志优先级/等级

在 Linux 内核中,根据日志消息的重要程度不同,将其分为不同 的优先级别(数字等级越小,优先级越高,消息越重要

0 EMERG(紧急):会导致主机系统不可用的情况。

1 ALERT(警告):必须马上采取措施解决的问题。

2 CRIT(严重):比较严重的情况。

3 ERR(错误):运行出现错误。

4 WARNING(提醒):可能影响系统功能,需要提醒用户的重要事件。

5 NOTICE(注意):不会影响正常功能,但是需要注意的事件。

6 INFO(信息):一般信息。

7 DEBUG(调试):程序或系统调试信息等

3.2 rsyslog

3.3 rsyslog 配置文件

配置文件 /etc/rsyslog.conf

在这里插入图片描述

MODULES:相关模块配置

只有安装了功能模块,才会有相关的模块配置。

在这里插入图片描述

GLOBAL DIRECTIVES:全局配置,相当于通用配置

全局配置没有局部配置的优先级高

只有没有局部配置时,才会使用全局配置

在这里插入图片描述

RULES:局部配置

局部配置的格式
facility.priority;facility.priority........日志文件的位置

facility 设施 (从功能划分,分类)

  1. 系统的分类: auth(验证),authpriv,cron(定时任务), daemon,ftp,kern, lpr, mail, news, security(auth), user, uucp, syslog

  2. 自定义的分类:local0-local7

  3. *代指任意

priority 优先级0-7 详见本文3.1 日志优先级/等级

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

在这里插入图片描述

3.4 rsyslog实际应用一:单独显示某一服务的日志

以 ssh服务为例

1.编辑rsyslog配置文件

vim /etc/rsyslog.conf 

74 local6.*     /var/log/nssh.log    #添加的内容
    
//local6为日志源  *表示任意级别  /var/log/nssh.log为日志路径

在这里插入图片描述

2.编辑ssh服务的配置文件/etc/ssh/sshd_config,改变日志路径

vim /etc/ssh/sshd_config

#修改ssh配置文件,32下一行添加自己的自定义
32 #SyslogFacility AUTHPRIV
33 SyslogFacility LOCAL6

在这里插入图片描述

3. 重启服务,使用ssh

systemctl restart rsyslog.service sshd //重启服务

ssh 192.168.2.103  //远程连接其他主机

在这里插入图片描述

4.查看ssh服务的日志是否独立列出

cat /var/log/nssh.log  //查看

在这里插入图片描述

3.5 rsyslog实际应用二:将远程主机的日志备份到本机

在这里插入图片描述

1.加载主机C的rsyslog的ICMP和TCP模块

vim /etc/rsyslog.conf  //编辑配置文件

在这里插入图片描述

 19 $ModLoad imtcp    //加载rsyslog的imtcp模块,imtcp模块用于接收通过TCP协议发送的日志消息
 20 $InputTCPServerRun 514   //用于启动rsyslog的TCP服务器模式,监听TCP端口514以接收日志消息

在这里插入图片描述

systemctl restart rsyslog.service //重启使生效
ss -ntap |grep 514   //查看端口是否开启

在这里插入图片描述

2.修改主机A和主机B的rsyslog配置文件

以主机A为例,主机B的配置过程相同。

vim /etc/rsyslog.conf  //编辑配置文件

19 $ModLoad imtcp   
20 $InputTCPServerRun 514                         //加载模块


#复制54行                                                   改成主机C的ip地址
55 *.info;mail.none;authpriv.none;cron.none                @@192.168.91.100

在这里插入图片描述

在这里插入图片描述

systemctl restart rsyslog.service   //重启使生效

systemctl stop firewalld.service    //关闭防火墙

3.观察主机C能否收到主机A和主机B的消息

使用logger命令,模拟日志

主机A
logger 'Hello 222 from A '

主机B
logger "Hello 222 from B"

实时追踪主机C的消息日志

tail -f -n2 /var/log/messages  //实时追踪消息日志的最后两行

在这里插入图片描述

四、日志管理工具 journalctl

命令格式
journalctl [选项] 

常用选项
-u  仅显示特定系统服务或单元的日志消息

-b  仅显示特定引导过程的日志消息

-p  仅显示特定优先级的日志消息

-n  显示指定行数的日志消息

-f  实时跟踪日志,持续显示新的日志消息

--since=<time>--until=<time>: 仅显示指定时间范围内的日志消息。
查看指定时间的日志 
journalctl --since""
journalctl --since="年-月-日 时间"              //查看从某个具体时间开始的日志

journalctl --since "" --until ""   //某个时间段的日志
journalctl --since=""  --until="" //查看某一具体时间段的日志


查看昨天的日志
journalctl --since "yesterday"
查看20分钟之前的日志
journal --since"20 min ago"

查看2023.7.11 19:00后的日志
journalctl --since="2023.7.11 19:00:00"

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白幽幽白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值