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

简介: 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日志并进行多维度分析。
相关文章
|
25天前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
78 1
|
1月前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
51 0
|
1月前
|
存储 算法 Linux
【Linux系统编程】Linux 文件系统探究:深入理解 struct dirent、DIR 和 struct stat结构
【Linux系统编程】Linux 文件系统探究:深入理解 struct dirent、DIR 和 struct stat结构
45 0
|
18天前
|
存储 监控 安全
Linux系统日志
【4月更文挑战第6天】Linux系统日志,关键用于记录系统状态和事件,包括内核、系统、安全和应用日志,助力管理员诊断问题、确保系统正常运行。日志管理涉及收集、分析、备份等,常用工具如rsyslog、systemd-journal和logrotate(用于日志轮转)。重视日志文件的存储管理,防止空间占用过多。
19 1
Linux系统日志
|
4天前
|
Ubuntu Linux 芯片
Linux(2)ubuntu rootfs根文件系统制作
Linux(2)ubuntu rootfs根文件系统制作
19 0
|
11天前
|
SQL 监控 安全
Linux&Windows 日志分析 陇剑杯 CTF
Linux&Windows 日志分析 陇剑杯 CTF
|
12天前
|
存储 运维 监控
深入理解 Linux 文件系统的层次结构
【4月更文挑战第14天】本文将探讨 Linux 操作系统的文件系统层次结构,这是每个系统管理员和开发人员必须掌握的核心知识。我们将从文件系统的顶层目录开始,逐步深入到每个目录的特定用途和重要性,以及它们如何协同工作以支持 Linux 系统的正常运行。
|
21天前
|
关系型数据库 MySQL Linux
linux特定服务日志
Linux系统的服务日志在`/var/log`目录下,如系统日志(`/var/log/syslog`或`/var/log/messages`)、认证日志(`/var/log/auth.log`)、SSH日志(`/var/log/auth.log`或`/var/log/secure`)。Web服务器(Apache和Nginx)的访问和错误日志、MySQL错误日志、Postfix及Dovecot邮件服务器日志也在此处。日志位置可能因发行版和服务配置而异,不确定时可查服务配置或用`grep`搜索。使用`logrotate`可管理日志文件大小。
20 6
|
25天前
|
存储 固态存储 Unix
Linux中磁盘分区和文件系统管理
在Linux系统中,磁盘是存储数据的物理设备,如HDD或SSD,以文件形式存在于`/dev`目录下,如`sda`、`sdb`等。文件系统定义了如何在磁盘上组织和访问数据,常见的Linux文件系统有ext2、ext3、ext4、xfs等。通过虚拟机软件如VMware,用户可以向Linux虚拟机添加新的硬盘。
|
25天前
|
运维 监控 安全
linux日志分析与追踪
在Linux中,日志分析涉及检查 `/var/log` 下的不同文件,如`messages`、`auth.log`、`kern.log`等,以及Web服务器和数据库日志。使用`tail`、`grep`、`awk`等工具实时查看和搜索日志,`logrotate`管理日志大小,`journalctl`处理Systemd日志,而`Splunk`等工具则用于集中式分析。分析技巧包括异常检测、时间关联和阈值监控。安全事件追踪结合登录失败日志、网络嗅探和IDS/IPS。日志链路追踪在分布式系统中尤为重要,帮助定位服务调用问题。有效的日志管理和分析能增强系统安全和故障排除能力。
22 7