目录
频道首页
📚 linux日志分析(简略)
收藏
0
xy20118 最近修改于 2024-04-30 14:41:31

前言

Linux系统中,日志文件是非常重要的资源,可以记录系统运行状态、错误信息、用户行为等各种数据。通过对日志文件的分析,我们可以更好地了解系统的运行状况,及时发现问题并作出相应的处理。(少背锅)

inode

了解日志之前 我们需要知道文件的属性和本质,便于理解之后的日志各个字段的含义。 如cp 分配一个空闲的inode号,在inode表中生成新条目 ,在目录中创建一个目录项,将名称与inode编号关联 ,拷贝数据生成新的文件。

在Linux系统中,文件由元数据和数据块组成。数据块就是多个连续性的扇区(sector),扇区是文件存储的最小单位(512字节)。块(block)的大小,最常见的是4KB,也就是连续8个sector组成,存储文件数据和目录数据。而元数据用来记录文件的创建者、创建日期、大小等,这种存储文件元数据信息的区域叫做inode,即索引节点。

inode实际是连接【目录项】和磁盘的中间物质。 indoe 表中的信息 文件的大小,时间,类型,权限等,称为文件的元数据(meta data 元信息 )

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

inode 节点号 可以使用!!#ffff00 ls -i 文件名!! 查看

[root@localhost opt]# ls -i 123
67148169 123 

!!#ffff00 stat!! 取得指定文件的文件属性

[root@localhost opt]# stat 123
  文件:"123"
  大小:29            块:8          IO 块:4096   普通文件
设备:fd00h/64768d    Inode:68608917    硬链接:1
权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)
环境:unconfined_u:object_r:usr_t:s0
最近访问:2019-04-22 23:08:29.053641221 +0800#打开文件即改变
最近更改:2019-04-22 23:08:29.053641221 +0800#更改内容即改变 
最近改动:2019-04-22 23:08:29.056641221 +0800#元信息改变即改变。
创建时间:-    #不记录

image

!!#ffff00 df -i !! 查询inode使用情况

[root@localhost opt]# df -i 
文件系统                   Inode 已用(I)  可用(I) 已用(I)% 挂载点
/dev/mapper/centos-root 20078592  121136 19957456       1% /
devtmpfs                  229401     414   228987       1% /dev
tmpfs                     233381       1   233380       1% /dev/shm
tmpfs                     233381     586   232795       1% /run
tmpfs                     233381      16   233365       1% /sys/fs/cgroup
/dev/mapper/centos-home  9801728      31  9801697       1% /home
/dev/sda1                 524288     328   523960       1% /boot
tmpfs                     233381       9   233372       1% /run/user/42
tmpfs                     233381       1   233380       1% /run/user/0

!!#ffff00 注:!!inode号 有限资源,如果消耗完毕 无法继续新建文件 。 inode号 在同一设备中是唯一的 不同设备是不是唯一的。

日志

概念

日志文件指的是系统或应用程序记录事件或操作的文件,可以用于排查故障、监控和审计等过程。在Linux系统下,日志文件通常存储在“/var/log”目录下,不同的系统或应用程序可能会产生不同类型的日志文件。

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

常见分类

  • 系统日志(syslog) 系统日志文件是Linux系统最基本的日志文件,它记录了所有系统事件的发生情况。系统日志文件分为多个文件,每个文件都记录了特定类型的系统事件 如: /var/log/messages:记录了系统启动、停机、错误信息等。 /var/log/boot.log:记录了系统启动过程中的日志信息。 /var/log/dmesg:记录了内核启动过程中的系统事件。 /var/log/cron: 记录了计划任务日志 /var/log/maillog: 记录了邮件日志

  • 应用程序日志 各种应用程序产生的日志文件,比如Apache服务器的访问日志、MySQL数据库的错误日志等。这些日志文件通常存储在应用程序所在的目录下,或者在“/var/log”目录下的特定子目录中。有些应用程序会选择由自己独立管理一份日志文件(而不是交给rsyslog服务管理),用于记录本程序运行过程中的各种事件信息。

  • 用户日志 在 wtmp、btmp、lastlog 等日志文件中,保存了系统用户登录、退出等相关的事件消息。 但是这些文件都是二进制的数据文件,不能直接使用 tail、less 等文本查看工具进行浏览, 需要使用 who、w、users、last 和 lastb 等用户查询命令来获取日志信息 如: /var/log/lastlog : 记录了 系统中所有用户最后一次的登录时间的曰志 /var/log/secure : 记录了验证和授权方面的信息,只要涉及账户和密码的程序都会记录 /var/log/wtmp :永久记录所有用户的登陆、注销信息,同时记录系统的启动、重启、关机事件 /var/tun/ulmp: 记录了当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。

  • 内核日志文件 内核日志文件用于记录内核发生的事件,比如内核崩溃、硬件故障等。由于内核是系统最核心的部分,因此内核日志文件对于排查系统故障非常重要。 配置文件 位置在 /etc/rsyslog.conf

日志文件管理

在 Linux 内核中,根据日志消息的重要程度不同,将其分为不同 的优先级别(数字等级越小,优先级越高,消息越重要)。 0 EMERG(紧急):会导致主机系统不可用的情况。 1 ALERT(警告):必须马上采取措施解决的问题。 2 CRIT(严重):比较严重的情况。 3 ERR(错误):运行出现错误。 4 WARNING(提醒):可能影响系统功能,需要提醒用户的重要事件。 5 NOTICE(注意):不会影响正常功能,但是需要注意的事件。 6 INFO(信息):一般信息。 7 DEBUG(调试):程序或系统调试信息等 注:一般情况下4就需要开始注意了!!

1.备份日志文件 由于日志文件的数据量通常非常大,因此需要定期备份日志文件,以便在需要的时候进行回溯或分析。 2.删除旧的日志文件 由于日志文件是按照时间顺序创建的,因此旧的日志文件很容易占用大量的磁盘空间,导致系统的性能下降。因此需要定期删除旧的日志文件,以便释放存储空间。 3.压缩归档日志文件 压缩归档日志文件同样也是为了节省磁盘空间,可以使用工具如tar、gzip等进行压缩,然后将压缩后的文件进行归档。

常用的日志查看工具

系统日志查看

1.使用tail -f /var/log/messages ,该命令会实时输出系统日志文件的内容,并且会不断更新。 使用ssh 连接另一台机器 会查看到实时系统更新日志

Apr 23 02:09:22 localhost systemd-logind: New session 73 of user root.
Apr 23 02:09:22 localhost systemd: Started Session 73 of user root.
Apr 23 02:09:22 localhost systemd: Starting Session 73 of user root.
Apr 23 02:09:22 localhost dbus[751]: [system] Activating service name='org.freedesktop.prob![image](/static/uploads/2024/4/22/6f62ff51586b416da398f95b891f2506.png)
lems' (using servicehelper)
Apr 23 02:09:22 localhost dbus-daemon: dbus[751]: [system] Activating service name='org.freedesktop.problems' (using servicehelper)
Apr 23 02:09:22 localhost dbus[751]: [system] Successfully activated service 'org.freedesktop.problems'
Apr 23 02:09:22 localhost dbus-daemon: dbus[751]: [system] Successfully activated service 'org.freedesktop.problems'

image

内核日志文件查看

1.使用命令!!#ffff00 “dmesg”!!可以查看内核日志文件的内容。该命令会输出内核日志文件中的所有内容。 非常多 可 持续记录硬件变化的情况

[   12.275594] device virbr0-nic entered promiscuous mode
[   13.120811] virbr0: port 1(virbr0-nic) entered blocking state
[   13.120815] virbr0: port 1(virbr0-nic) entered listening state
[   13.120971] IPv6: ADDRCONF(NETDEV_UP): virbr0: link is not ready
[   13.364510] virbr0: port 1(virbr0-nic) entered disabled state
[29083.179295] ISO 9660 Extensions: Microsoft Joliet Level 3
[29083.190177] ISO 9660 Extensions: RRIP_1991A

2.CentOS 7 以后版,利用Systemd 统一管理所有 Unit 的启动日志,可以只用!!#ffff00 journalctl!!一个命令,查看所有日志(内核日志和应用日志)。

日志配置文件:/etc/systemd/journald.conf !!#ffff00 journalctl -k 只显示内核日志 !! image !!#ffff00 journalctl -p!! 根据日志等级筛选结果 , 若设为一个单独的数字或日志等级名称, 则表示仅显示小于或等于此等级的日志

journalctl --no-pager  -p 4 #筛选出日志信息等级4及以上的信息  正常标准输出 可以看全

image

journalctl -o json-pretty 以json 多行格式输出 便于观看 image

查看上一次启动的日志(需更改设置) journalctl -b -1 这里就需要配置文件了~/etc/systemd/journald.conf image Storage=persistent auto:rsyslog将确定使用持久性存储(persistent)还是易失性存储(volatile),如果存在/var/log/journal目录,则rsyslog使用持久性存储,否则使用易失性存储。

若要检查上一次引导的日志,使用-b参数筛选日记。-b选项仅显示上次引导后的消息。它以负数作为参数,显示以前引导的日志。 !!#ffff00 journalctl -b -1 -p err!! 查看指定时间的日志 !!#ffff00 journalctl --since="2021-09-16 14:22:02" journalctl --since "30 min ago" journalctl --since yesterday journalctl --since "2021-01-01" --until "2021-09-16 13:40" journalctl --since 07:30 --until "2 hour ago" !! 显示尾部的最新10行日志!!#ffff00 journalctl -n !! 显示尾部指定行数的日志 !!#ffff00 journalctl -n 15 !! 实时滚动显示最新日志!!#ffff00 journalctl -f!! 与tail -f类似 查看指定服务的日志 !!#ffff00 journalctl /usr/lib/systemd/systemd !!
比如查看docker服务的日志!!#ffff00 systemctl status docker !! 查看指定进程的日志!!#ffff00 journalctl _PID=665 !!
查看某个路径的脚本的日志!!#ffff00 journalctl /usr/bin/bash!!
查看指定用户的日志!!#ffff00 journalctl UID=33 --since today!!
查看某个 Unit 的日志!!#ffff00 journalctl -u nginx.service!! !!#ffff00 journalctl -u nginx.service --since today!!
实时滚动显示某个 Unit 的最新日志 !!#ffff00 journalctl -u nginx.service -f !! 合并显示多个 Unit 的日志 !!#ffff00 $ journalctl -u nginx.service -u php-fpm.service --since today !! 日志默认分页输出,--no-pager 改为正常的标准输出!!#ffff00 journalctl --no-pager!!
以 JSON 格式(单行)输出!!#ffff00 journalctl -b -u nginx.service -o json!!
以 JSON 格式(多行)输出,可读性更好!!#ffff00 journalctl -b -u nginx.serviceqq -o json-pretty !! 显示日志占据的硬盘空间!!#ffff00 journalctl --disk-usage!!

用户日志查看

!!#ffff00 users!! 查询当前用户登录情况

[root@localhost opt]# users 
root

!!#ffff00 who!!命令用于报告当前登录到系统中的每个用户的信息

[root@localhost opt]# who
root     pts/0        2021-04-22 16:25 (192.168.x.x)

!!#ffff00 w!! 用于显示当前系统中的每个用户及其所运行的进程信息

[root@localhost opt]# w
 02:59:20 up 10:34,  1 user,  load average: 0.01, 0.03, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.x. x    16:25    0.00s  0.33s  0.00s w

!!#ffff00 last !!查询用户登录的历史记录 /var/log/wtmp (二进制文件需要借助工具查看)

[root@localhost log]# last 
root     pts/2        192.168.64.1     Tue Apr 23 02:46 - 02:46  (00:00)    
root     pts/1        192.168.64.15    Tue Apr 23 02:09 - 02:56  (00:46)    
root     pts/1        192.168.64.15    Tue Apr 23 02:04 - 02:08  (00:04)    
root     pts/1        192.168.64.1     Tue Apr 23 00:01 - 00:01  (00:00)   

!!#ffff00 lastb!! 命令用于查询登录失败的用户记录 /var/log/btmp 可以直接从安全日志文件/var/log/secure 中获得相关信息 。

[root@localhost ~]# lastb 
root     ssh:notty    192.168.x.x   Tue Apr 23 02:09 - 02:09  (00:00) 

!!#ffff00 lastlog!! 最后一次登录日志

[root@localhost ~]# lastlog
用户名           端口     来自             最后登陆时间
root             pts/0    192.168.64.1     一 4月 22 19:12:37 +0800 2024

应用日志查看

内嵌rsyslog 可以进行整理本机的日志信息 使用该程序 需要应用兼容

查看rsyslog 软件配置

[root@localhost ~]# rpm -qc rsyslog 
/etc/logrotate.d/syslog
/etc/rsyslog.conf #配置文件 
/etc/sysconfig/rsyslog

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

  • MODULES:相关模块配置
  • GLOBAL DIRECTIVES:全局配置
  • RULES:日志记录相关的规则配置 怎么生成日志 日志存放位置 RULES配置格式:
facility.priority; 
#分类     日志的级别


*: 所有级别   local0-7   自定义使用   local7 已经被使用。
none:没有级别,即不记录  
PRIORITY:指定级别(含)以上的所有级别
=PRIORITY:仅记录指定级别的日志信息

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




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

image 范例:将ssh服务的日志单独设置 默认ssh 日志是在/var/log/secure 。

[root@localhost ~]#vim /etc/ssh/sshd_config
#修改ssh配置文件,32下一行添加自己的自定义
32 #SyslogFacility AUTHPRIV  #先注释默认项
33 SyslogFacility LOCAL6  #添加local6 自定义级别 

image

[root@localhost ~]#vim /etc/rsyslog.conf
# 行添加自己的文件位置
local6.*                   /opt/ssh.log

image

[root@localhost log]#systemctl restart rsyslog.service sshd #重启服务
[root@localhost opt]# tail -f /opt/ssh.log #查看日志更新 
Apr 22 19:45:14 localhost sshd[11132]: Server listening on 0.0.0.0 port 22.
Apr 22 19:45:14 localhost sshd[11132]: Server listening on :: port 22.
Apr 22 19:46:00 localhost sshd[11151]: Accepted password for root from 192.168.64.11 port 50480 ssh2
Apr 22 19:46:55 localhost sshd[11151]: Received disconnect from 192.168.64.11 port 50480:11: disconnected by user
Apr 22 19:46:55 localhost sshd[11151]: Disconnected from 192.168.64.11 port 50480

网络日志设置

可以实现不同设备之间的日志备份 以及故障排查 开启日志远程功能 192.168.64.15的日志 输出到192.168.64.16 机器上 1.首先关闭两台机器的防火墙

#可以使用发送键到所有会话 两台机器一起关闭
[root@localhost ~]#systemctl   stop  firewalld
[root@localhost ~]#setenforce  0
[root@xyy ~]#systemctl   stop  firewalld
[root@xyy ~]#setenforce  0

2.编辑配置文件首先配置15客户端的
注:二者的协议需要对应一致 客户端和服务端。

[root@localhost etc]# vim /etc/rsyslog.conf
#### MODULES #### 功能模块

# The imjournal module bellow is now used as a message source instead of imuxsock.
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
#$ModLoad imklog # reads kernel messages (the same are read from journald)
#$ModLoad immark  # provides --MARK-- message capability

# Provides UDP syslog reception   #允许使用udp协议
#$ModLoad imudp
#$UDPServerRun 514

# Provides TCP syslog reception  #允许使用tcp 
$ModLoad imtcp
$InputTCPServerRun 514

image

3.修改对应配置规则

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

*.info;mail.none;authpriv.none;cron.none                @@192.168.64.16 #@@代表使用tcp   @ 代表udp

image

4.systemctl restart rsyslog.service 重启服务 使用!!#ffff00 ss -ntap |grep 514!! 查看514端口是否打开

[root@localhost etc]# ss -ntap |grep 514 
LISTEN     0      25           *:514                      *:*                   users:(("rsyslogd",pid=12247,fd=3))
LISTEN     0      25          :::514                     :::*                   users:(("rsyslogd",pid=12247,fd=4))

5 .对应16的配置文件也需要更改 vim /etc/rsyslog.conf

# Provides TCP syslog reception  #这个不建议打开 容易出问题
$ModLoad imtcp 
$InputTCPServerRun 514

6.验证效果 在16机器上使用 tail -f /var/log/messages
去15上使用 logger "this is test log from 192.168.64.16" 测试写日志进去。

#16 
[root@xyy ~]# tail -f /var/log/messages 
#15
[root@localhost etc]# logger "hello word 192.168.64.16" 

image

接收方服务器成功记录测试日志。

内容大纲
批注笔记
📚 linux日志分析(简略)
ArticleBot
z
z
z
z
主页
会议室
Git管理
文章
云文档
看板