Linux文件系统与日志分析(3)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
云防火墙,500元 1000GB
简介: 1 inode和block1.1 inode和block概述文件数据包括元信息与实际数据。文件存储在硬盘上,硬盘最小存储单位是“扇区”,每个扇区存储512字节。


4.1.3 ELK

ELK:由Elasticsearch、Logstash、Kibana三个软件组成。

  • 非关系型分布式数据库基于apache软件基金会jakarta项目组的项目lucene
  • Elasticsearch是个开源分布式搜索引擎,可以处理大规模日志数据,比如:Nginx、Tomcat、系统日志等功能
  • Logstash对日志进行收集、分析,过滤,并将其存储供以后使用
  • Kibana 可以提供的日志分析友好的 Web 界面


4.2 rsyslog管理

4.2.1 系统日志术语

  • facility:设施,从功能或程序上对日志进行归类
#内置分类
 auth(验证), authpriv, cron(定时任务), daemon,ftp,kern, lpr, mail, news, security(auth), user, uucp, syslog
 #自定义的分类
 local0-local7
复制代码


  • Priority 优先级别,从低到高排序
debug, info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic)
复制代码


  • 参看帮助: man 3 syslog,man logger
[root@localhost ~]# yum -y install man-pages
 [root@localhost ~]# man 3 syslog
 level
        This  determines  the  importance  of the message.  The levels are, in order of decreasing impor‐
        tance:
        LOG_EMERG      system is unusable
        LOG_ALERT      action must be taken immediately
        LOG_CRIT       critical conditions
        LOG_ERR        error conditions
        LOG_WARNING    warning conditions
        LOG_NOTICE     normal, but significant, condition
        LOG_INFO       informational message
        LOG_DEBUG      debug-level message
复制代码


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


  • 服务名称(即什么服务产生的日志):
服务名称 说 明
auth(LOG AUTH) 安全和认证相关消息 (不推荐使用authpriv替代)
authpriv(LOG_AUTHPRIV) 安全和认证相关消息(私有的)
cron (LOG_CRON) 系统定时任务cront和at产生的日志
daemon (LOG_DAEMON) 与各个守护进程相关的曰志
ftp (LOG_FTP) ftp守护进程产生的曰志
kern(LOG_KERN) 内核产生的曰志(不是用户进程产生的)
Iocal0 ~ local7 (LOG_LOCAL0-7) 为本地使用预留的服务
lpr (LOG_LPR) 打印产生的日志
mail (LOG_MAIL) 邮件收发信息
news (LOG_NEWS) 与新闻服务器相关的日志
syslog (LOG_SYSLOG) 存syslogd服务产生的曰志信息(虽然服务名称己经改为reyslogd,但是很多配罝依然沿用了 syslogd服务的,所以这里并没有修改服务名称)
user (LOG_USER) 用户等级类别的日志信息
uucp (LOG_UUCP> uucp子系统的日志信息,uucp是早期Linux系统进行数据传递的协议,后来 也常用在新闻组服务中


4.2.2 rsyslog 相关文件

  • 程序包:rsyslog
  • 主程序:/usr/sbin/rsyslogd
  • CentOS 6:/etc/rc.d/init.d/rsyslog {start|stop|restart|status}
  • CentOS 7,8:/usr/lib/systemd/system/rsyslog.service
  • 配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf
  • 库文件: /lib64/rsyslog/*.so

4.2.3 rsyslog 配置文件

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

  • MODULES:相关模块配置
  • GLOBAL DIRECTIVES:全局配置
  • RULES:日志记录相关的规则配置

查看/etc/rsyslog.conf 文件中的RULES模块:

网络异常,图片无法展示
|


RULES配置格式:

facility.priority; 
 #分类      优先级
 # priority 的表示 #
 *: 所有级别
 none:没有级别,即不记录
 PRIORITY:指定级别(含)以上的所有级别
 =PRIORITY:仅记录指定级别的日志信息
 文件路径:通常在/var/log/,文件路径前的-表示异步写入。
 用户:将日志事件通知给指定的用户,* 表示登录的所有用户。
 日志服务器:@host,把日志送往至指定的远程UDP日志服务器;@@host,将日志发送到远程TCP日志服务器。
 管道: | COMMAND,转发给其它命令处理。
复制代码


4.3 rsyslog 应用实例

4.3.1 将ssh服务的日志单独设置

实验步骤:

步骤1:修改rsyslog服务的配置文件/etc/rsyslog.conf,设置LOCAL0对应的日志路径。

[root@localhost ~]# vim /etc/rsyslog.conf
 ------------------------
 local0.*                                                /var/log/sshd.log
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


步骤2:修改ssh服务的配置文件/etc/ssh/sshd_config,将ssh的日志修改为记录在LOCAL0对应的路径下。

(ssh服务的日志默认放在authpriv服务对应的路径下,需先将该行注释掉。)

[root@localhost ~]# vim /etc/ssh/sshd_config
 ------------------------
 #SyslogFacility AUTHPRIV       //原路径,注释掉这一行
 SyslogFacility LOCAL0          //添加自定义路径
复制代码


网络异常,图片无法展示
|


步骤3:重启 rsyslog 服务和 ssh 服务。

[root@localhost ~]# systemctl restart {rsyslog,sshd}
复制代码


步骤4:打开第二台机器,远程连接原服务器。故意输错2次密码,稍后查看原服务器的日志。

[root@192 ~]# ssh 192.168.72.10
 root@192.168.72.10's password: 
 Permission denied, please try again.
 root@192.168.72.10's password: 
 Permission denied, please try again.
 root@192.168.72.10's password: 
复制代码


网络异常,图片无法展示
|


步骤5:查看原服务器的日志记录。/var/log/sshd.log 成功记录了第二台机器的行为。

[root@localhost ~]# tail -3 /var/log/sshd.log
 Mar 12 01:32:04 localhost sshd[8398]: Connection closed by 192.168.72.129 port 55592 [preauth]
 Mar 12 01:32:29 localhost sshd[9433]: Failed password for root from 192.168.72.129 port 55594 ssh2
 Mar 12 01:32:48 localhost sshd[9433]: Failed password for root from 192.168.72.129 port 55594 ssh2
复制代码


网络异常,图片无法展示
|


4.3.2 网络日志(远程日志功能)

远程日志,即通过网络,将本地的日志远程备份到另一台机器,这样,就算本机系统崩溃,我们可以查看另一台机器备份的日志,来排查故障。

网络异常,图片无法展示
|


实验思路:

假设服务器A需要将日志备份到服务器B,那么A是发送方,B是接收方。

接收方需要开启TCP功能(或UDP功能)和514接口,发送方需填写想要传输的日志和接收方的地址。

实验步骤:

步骤1:接收方开启TCP功能和514端口(编辑rsyslog的配置文件 /etc/rsyslog.conf)。

关闭防火墙;

编辑配置文件,开启TCP功能和514端口(去掉这两行原有的#号);

重启rsyslog 服务;

检查514端口是否开启。

[root@192 ~]# systemctl stop firewalld   //关闭防火墙
 [root@192 ~]# vim /etc/rsyslog.conf      //编辑配置文件
 ------------------------
 # Provides TCP syslog reception
 $ModLoad imtcp                //开启TCP功能
 $InputTCPServerRun 514        //开启514端口
 [root@192 ~]# systemctl restart rsyslog   //重启日志服务
 [root@192 ~]# ss -ntap | grep 514         //检查514端口是否开启
 LISTEN     0      25           *:514                      *:*                   users:(("rsyslogd",pid=12528,fd=3))
 FIN-WAIT-2 0      0      192.168.72.129:514                192.168.72.10:42556              
 LISTEN     0      25          :::514                     :::*                   users:(("rsyslogd",pid=12528,fd=4))
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


网络异常,图片无法展示
|


步骤2:发送方填写需要传输的日志和接收方的IP地址(编辑配置文件 /etc/rsyslog.conf)。

关闭防火墙;

编辑配置文件,填写需要传输的日志和接收方地址;

重启rsyslog 服务;

测试日志打印。

(@地址表示使用UDP功能;@@地址表示使用TCP地址)

[root@localhost log]# systemctl stop firewalld     //关闭防火墙
 [root@localhost log]# vim /etc/rsyslog.conf        //编辑配置文件
 ------------------------
 *.info;mail.none;authpriv.none;cron.none                @@192.168.72.129
 [root@localhost log]# systemctl restart rsyslog     //重启日志服务
 [root@localhost log]# logger "this test 777777"     //测试日志打印
 [root@localhost log]# tail -1 /var/log/messages     //查看日志记录
 Mar  8 12:14:51 localhost root: this test 777777
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


步骤3:查看接收方能否成功接收日志记录。

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

[root@192 ~]# grep 7777 /var/log/messages
 Mar  8 12:12:44 localhost root: this test 777777
 Mar  8 12:14:51 localhost root: this test 777777
 Mar  8 12:21:20 localhost root: this test 777777
 Mar  8 12:23:30 localhost root: this test 777777
复制代码


网络异常,图片无法展示
|



5 日志管理工具 journalctl


CentOS 7 以后,利用Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核及系统日志和应用日志)。

日志的配置文件:

/etc/systemd/journald.conf
复制代码


journalctl命令格式:

journalctl [OPTIONS...]  [MATCHES...]
复制代码


示例:

1)journalctl,查看所有日志。 默认情况下,只保存本次启动的日志。

[root@localhost ~]# journalctl | head
 -- Logs begin at 六 2022-03-12 18:55:23 CST, end at 六 2022-03-12 19:05:17 CST. --
 3月 12 18:55:23 localhost.localdomain systemd-journal[87]: Runtime journal is using 8.0M (max allowed 91.1M, trying to leave 136.7M free of 903.6M available → current limit 91.1M).
 3月 12 18:55:23 localhost.localdomain kernel: Initializing cgroup subsys cpuset
 3月 12 18:55:23 localhost.localdomain kernel: Initializing cgroup subsys cpu
 3月 12 18:55:23 localhost.localdomain kernel: Initializing cgroup subsys cpuacct
 3月 12 18:55:23 localhost.localdomain kernel: Linux version 3.10.0-693.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Tue Aug 22 21:09:27 UTC 2017
 3月 12 18:55:23 localhost.localdomain kernel: Command line: BOOT_IMAGE=/vmlinuz-3.10.0-693.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet
 3月 12 18:55:23 localhost.localdomain kernel: Disabled fast string operations
 3月 12 18:55:23 localhost.localdomain kernel: e820: BIOS-provided physical RAM map:
 3月 12 18:55:23 localhost.localdomain kernel: BIOS-e820: [mem 0x0000000000000000-0x000000000009ebff] usable
复制代码


网络异常,图片无法展示
|


2)journalctl -k, 只查看内核日志(不显示应用日志)。

[root@localhost ~]# journalctl -k |head
 -- Logs begin at 六 2022-03-12 18:55:23 CST, end at 六 2022-03-12 19:13:14 CST. --
 3月 12 18:55:23 localhost.localdomain kernel: Initializing cgroup subsys cpuset
 3月 12 18:55:23 localhost.localdomain kernel: Initializing cgroup subsys cpu
 3月 12 18:55:23 localhost.localdomain kernel: Initializing cgroup subsys cpuacct
 3月 12 18:55:23 localhost.localdomain kernel: Linux version 3.10.0-693.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Tue Aug 22 21:09:27 UTC 2017
 3月 12 18:55:23 localhost.localdomain kernel: Command line: BOOT_IMAGE=/vmlinuz-3.10.0-693.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet
 3月 12 18:55:23 localhost.localdomain kernel: Disabled fast string operations
 3月 12 18:55:23 localhost.localdomain kernel: e820: BIOS-provided physical RAM map:
 3月 12 18:55:23 localhost.localdomain kernel: BIOS-e820: [mem 0x0000000000000000-0x000000000009ebff] usable
 3月 12 18:55:23 localhost.localdomain kernel: BIOS-e820: [mem 0x000000000009ec00-0x000000000009ffff] reserved
复制代码


网络异常,图片无法展示
|


3)journalctl -b ,查看本次启动的日志。

journalctl -b -0,查看本次启动的日志。

journalctl -b -1,查看上一次启动的日志。

以此类推。

网络异常,图片无法展示
|

[root@localhost ~]# journalctl -b -0 |head -5  //查看本次启动的日志
 -- Logs begin at 六 2022-03-12 18:55:23 CST, end at 六 2022-03-12 19:20:01 CST. --
 3月 12 18:55:23 localhost.localdomain systemd-journal[87]: Runtime journal is using 8.0M (max allowed 91.1M, trying to leave 136.7M free of 903.6M available → current limit 91.1M).
 3月 12 18:55:23 localhost.localdomain kernel: Initializing cgroup subsys cpuset
 3月 12 18:55:23 localhost.localdomain kernel: Initializing cgroup subsys cpu
 3月 12 18:55:23 localhost.localdomain kernel: Initializing cgroup subsys cpuacct
复制代码




4)查看指定时间的日志。

journalctl --since="2022-03-05 18:10:30"
  journalctl --since "20 min ago"
  journalctl --since yesterday
  journalctl --since "2022-03-05" --until "2022-03-10 03:00"
  journalctl --since 09:00 --until "1 hour ago"
复制代码


5) journalctl -n <数字>,显示尾部指定行数。默认10行。

journalctl -n      //显示尾部的最新10行日志
 journalctl -n 20   //显示尾部的最新20行日志
复制代码


6)journalctl -f,实时滚动显示最新日志(显示最新10行)

[root@localhost ~]# journalctl -f
 -- Logs begin at 六 2022-03-12 18:55:23 CST. --
 3月 12 19:11:12 localhost.localdomain systemd[1]: Starting Cleanup of Temporary Directories...
 3月 12 19:11:12 localhost.localdomain systemd[1]: Started Cleanup of Temporary Directories.
 3月 12 19:13:14 localhost.localdomain chronyd[815]: Selected source 111.230.189.174
 3月 12 19:20:01 localhost.localdomain systemd[1]: Started Session 6 of user root.
 3月 12 19:20:01 localhost.localdomain systemd[1]: Starting Session 6 of user root.
 3月 12 19:20:01 localhost.localdomain CROND[20970]: (root) CMD (/usr/lib64/sa/sa1 1 1)
 3月 12 19:30:01 localhost.localdomain systemd[1]: Started Session 7 of user root.
 3月 12 19:30:01 localhost.localdomain systemd[1]: Starting Session 7 of user root.
 3月 12 19:30:01 localhost.localdomain CROND[33816]: (root) CMD (/usr/lib64/sa/sa1 1 1)
 3月 12 19:32:32 localhost.localdomain chronyd[815]: Source 84.16.67.12 replaced with 139.199.214.202
复制代码


网络异常,图片无法展示
|


7) 查看指定服务的日志

journalctl /usr/lib/systemd/systemd
复制代码


8)查看指定进程的日志


journalctl _PID=1            //查看某个路径的脚本的日志
 journalctl /usr/bin/bash
复制代码


9)查看指定用户的日志

journalctl _UID=33 --since today
复制代码


10)查看某个 Unit 的日志;

实时滚动显示某个 Unit 的最新日志

journalctl -u nginx.service
 journalctl -u nginx.service --since today
 journalctl -u nginx.service -f    //实时滚动显示某个 Unit 的最新日志
复制代码


11)合并显示多个 Unit 的日志

journalctl -u nginx.service -u php-fpm.service --since today
复制代码


12)查看指定优先级的日志,表示仅显示小于或等于此等级的日志 (也就是重要程度等于或高于此等级的日志)。

共有8级 
 0: emerg
 1: alert
 2: crit
 3: err
 4: warning
 5: notice
 6: info
 7: debug
 journalctl -p 3 -b    //显示重要程度等于和高于err的日志
复制代码


13)其他选项

#日志默认分页输出,--no-pager 改为正常的标准输出
  journalctl --no-pager
 #以 JSON 格式(单行)输出
  journalctl -b -u nginx.service -o json
 #以 JSON 格式(多行)输出,可读性更好
  journalctl -b -u nginx.serviceqq -o json-pretty
 #显示日志占据的硬盘空间
  journalctl --disk-usage
 #指定日志文件占据的最大空间
  journalctl --vacuum-size=1G
 #指定日志文件保存多久
  journalctl --vacuum-time=1years



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1天前
|
存储 Linux 文件存储
Linux文件系统
Linux文件系统 一切皆文件 在Linux中,“一切皆文件”的概念意味着系统中的所有资源,包括硬件设备、目录及进程等,均被视为文件。这种设计简化了操作和管理,具体包括: 普通文件:存储数据的常规文件。 目录文件:包含其他文件和子目录的文件。 进程文件:在/proc目录下代表系统中运行的进程。 设备文件:位于/dev目录,代表硬件设备。 网络字节流套接字文件:用于网络通信的数据流。 链接文件:指向另一个文件的符号链接或硬链接。 管道文件:用于进程间通信的文件。
24 7
|
23天前
|
监控 网络协议 安全
Linux系统日志管理
Linux系统日志管理
37 3
|
1月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控总结
Linux系统命令与网络,磁盘和日志监控总结
52 0
|
1月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控三
Linux系统命令与网络,磁盘和日志监控三
36 0
|
2月前
|
存储 Linux 索引
Linux 下最主流的文件系统格式——ext
【9月更文挑战第8天】硬盘被划分为若干相同大小的块(Block),默认大小为4K,便于灵活管理文件数据。文件数据分散存放于这些块中,提高了数据添加、删除和插入的便利性。
|
3月前
|
编解码 Linux 程序员
深度探索Linux操作系统 —— 构建根文件系统2
深度探索Linux操作系统 —— 构建根文件系统
44 12
|
3月前
|
Linux Shell 网络安全
深度探索Linux操作系统 —— 构建根文件系统1
深度探索Linux操作系统 —— 构建根文件系统
51 6
|
3月前
|
存储 人工智能 数据管理
深入理解Linux操作系统之文件系统管理探索人工智能:从理论到实践的旅程
【8月更文挑战第30天】在探索Linux的无限可能时,我们不可避免地会遇到文件系统管理这一核心话题。本文将深入浅出地介绍Linux文件系统的基础知识、操作命令及高级技巧,帮助你更有效地管理和维护你的系统。从基础概念到实践应用,我们将一步步揭开Linux文件系统的神秘面纱。
|
2月前
|
存储 缓存 Linux
Linux文件系统的功能规划
【9月更文挑战第12天】本文通过类比图书馆,形象地解释了文件系统的组织形式和管理方法。首先,文件系统需按块存储文件,并设有索引区方便查找。其次,热点文件应有缓存层提高效率,文件需分类存储以便管理。最后,Linux内核需记录文件使用情况,通过文件描述符区分不同文件,确保文件操作准确无误。
|
3天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
77 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板