linux之【inode表结构】和【日志服务管理】

143 阅读7分钟

实验的通用步骤:

  • 安装软件
  • 修改配置文件(注意备份)
  • 重启服务
  • 验证结果

1、inode 表结构

  • inode号是有限的,会被使用完毕。
  • inode号在同一设备(分区)中,是唯一的;在不同设备中,inode号是可以重复的。

文件数据包含:

  • 元信息:存放在inode表中
  • 真实数据

三个时间戳:

  • atime:最近访问时间

    必须要打开文件,才会发生变化;

  • mtime:最近更改时间

    必须要改变内容,才会发生变化;

  • ctime:最近权限改动时间

    文件的元信息被改动,才会发生变化。

建议使用mtime。 同时,mtime发生变化,ctime一定变化;ctime发生变化,mtime不一定变化。

1.1 查看inode号的方法:

  • ls命令:查看文件名对应的inode号

    ls -i + 文件名

  • stat命令:查看文件inode信息中的inode号

    stat + 文件名

df -i 使用该命令 可以查看每个磁盘分区的inode号总数量,和已使用数量。

1.2 inode号的特殊作用

  • 当文件名包含特殊字符,可能无法正常删除文件,直接删除inode,也可以删除文件
  • 移动或重命名文件时,只改变文件名,不影响inode号码
  • 打开一个文件后,系统通过inode号码来识别该文件,不再考虑文件名

image.png

1.3 inode号使用完毕,该如何处理?

因为inode号是有限资源,如果消耗完毕,则无法继续新建文件。

解决方法:

  • 删除一些无用的 空文件;
  • 如果是逻辑卷,可以扩容;如果是分区,则无法解决。

2、模拟删除并恢复

编译安装 extundelete ,弊端是只能恢复ext3、不能恢复ext4 。

3、xfs类型备份和恢复

xfsdump命令格式:

  • -f:指定备份文件目录
  • -L:指定标签 session label
  • -M:指定设备标签 media label
  • -s:备份单个文件,-s 后面不能直接跟路径

4、日志服务管理

日志有助于排错。

4.1 日志分类

  • 系统日志:针对操作系统,操作系统做了什么事;
  • 应用日志:针对某个软件,某一程序做了什么事。

4.2 日志级别

描述事件的严重程度。

日志级别 共8个,分为 0-7级,其中,0级最紧急,基本到3级 err级别,就已经比较严重,需要引起重视。

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

4.3 rsyslog软件

rsyslog 是一个帮助我们管理日志的软件:收集管理分析日志,是单机的,只对本机负责。

查看配置文件: rpm -qc rsysctl

主配置文件: /etc/rsyslog.conf

rsyslog 特性:

  1. 多线程
  2. UDP, TCP, SSL,TLS,RELP
  3. MySQL,PGSQL,Oracle实现日志存储
  4. 强大的过滤器,可实现过滤记录日志信息中任意部分。
  5. 自定义输出格式,可以日志
  6. 适用于企业级
  7. 有windows版

4.4 ELK 日志收集

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

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

rsyslog与elk的区别:

  • rsyslog只支持少量(几十台)机器设备
  • ELK支持机器设备比较多的情况下使用,更适合于大型场景。

4.5 日志组成

  • 时间标签
  • 主机名
  • 子系统名
  • 消息字段

4.6 不同日志的存放位置

位置:/var/log/

image.png

4.6.1 messages 内核及公共消息日志

绝大多数的日志 都存放在该位置:/var/log/messages

4.6.2 用户登录日志

日志内容命令
btmp记录登录失败日志lastb
secure安全日志
wtmp记录用户登录成功的日志last
lastlog查看用户最后一次登录状态lastlog

4.6.2.1 secure 安全日志

位置:/var/log/secure

grep -i “failed password” /var/log/secure

4.6.2.2 btmp 登录失败日志

位置:/var/run/btmp

文件格式:二进制无法直接查看

作用:登录失败日志

lastb 命令,可以看到哪些用户登录失败

4.6.2.3 lastlog 查看用户最后一次登录状态

可以用 file 命令查看

位置:/var/log/lastlog

4.6.2.4 wtmp 记录用户成功登录的日志

可以使用 last命令 去查看。

4.6.3 dmesg 系统引导日志

位置:/var/log/dmesg

4.6.4 boot.log

启动服务。

4.6.5 anaconda

装系统的日志。

4.6.6 cron 计划任务

crontab

某个应用程序的日志。

4.6.7 maillog 邮件系统日志

邮箱日志。

4.7 实验一:

给某些程序生成独立的日志文件。

ssh:远程登录程序 ,全称是(openssh)

// 客户端是主动发起连接,比如客户端是192.168.125.100,远程ssh192.168.125.10,那么100是客户端,10是服务端。

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

  1. MODULES:相关模块配置

开启tcp或者udp功能:

image.png

  1. GLOBAL :全局设置

主要是一些默认的普通设置。

  1. RULES 规则:日志存放位置

通式: 程序类型A . 日志级别B 位置(绝对路径) 程序类型A 代表哪类软件的功能。其中* 代表所有软件,但是*不包括已有设置的软件。

示例:

 sshd.info
     sshd程序运行中,出现超过info及以上的级别要记录。

 sshd.*
     sshd程序运行中,出现任何级别都需要记录。

 *.info;mail.none;authpriv.none;cron.none
     *代表任意程序的日志
     info代表info及以上的级别
     mail.none代表除了mail级别

异步、同步:

  • 异步:内存中有一定的数量,再一起存入磁盘 , - 代表异步写入
  • 同步:内存中只要写一条,就立马同步到磁盘中。

sshd的配置文件:/etc/ssh/sshd_config

示例:

 #远程ssh
     vim /etc/ssh/sshd_config
     32行复制,然后32行注释掉,将33行后面改成local

 #日志
     vim /etc/rsyslog.conf
     复制73行,改74行的local和地址,与上面的local同步,地址自定义,可以设为/opt/1.log

 #重启
     systemctl restart sshd rsyslog.service

 #追踪查看日志后十行
 tail -f /opt/1.log
 ​
 #用另一台机器去远程连接,同时追踪查看的日志也能收到消息。
 ssh +ip地址

4.8 实验二:

搭建日志服务器,把日志集中起来。

image.png

示例:

 #日志配置文件,第一台电脑:
     vim /etc/rsyslog.conf
     把1920行的注释打开
     54行:后半部分改成@@(tcp)或者@(udp)  +ip地址(对方的)
     重启systemctl restart rsystem.service

     logger "hello 192.168.125.10"

 #第二台电脑:
     vim /etc/rsyslog.conf
     把1920行的注释删掉
     重启systemctl restart rsystem.service
     tail -f /var/log/messages

4.9 journalctl

标准输出重定向

配置文件:/etc/systemd/journald.conf

journalctl -xe --no-pager

部分选项功能描述
-e跳转到日志的尾部(也就是最新生成的)
-x提示信息。输出一些解释性短语,显示详细信息
--no-pager自动换行

4.10 logrotate 日志转储

日志分割的两种方法:

  • 制定crontab,写脚本
  • 使用logrotate,可以帮助你写脚本,可以帮你把日志 自动按时间分开

4.10.1 logrotate 配置

软件包:logrotate

相关文件:

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

修改主配置文件:vim /etc/logrotate.conf

前面主要是:默认(全局)配置 ;

后面主要是:局部配置

compress 代表压缩;#compress被注释掉了,代表不压缩。

image.png

配置参数说明
compress通过gzip压缩转储以后的日志
nocompress不压缩
daily指定转储周期为每天
weekly指定转储周期为每周
monthly指定转储周期为每月
rotate count指定日志文件删除之前转储的次数,0指没有备份,5指保留5个备份
missingok如果日志不存在,不提示错误,继续处理下一个
nomissingok如果日志不存在,提示错误,此为默认值
delaycompress延迟压缩,这次先不压,下次再压缩。
notifempty如果是空文件,就不转储
create 640 bin nobody生成空文件,权限是640,属主是bin,属组是nobody
prerotate转储前需要执行的命令
postrotate转储后需要执行的命令
endscript结束位,与上面的prerotate或者postrotate同时出现。

// kill -USR1 ,重新生成日志。

date -u

 `date +%F_%T`        #日期和时间
 `date +%F"   "%T`    #日期和时间,中间用空格隔开