实验的通用步骤:
- 安装软件
- 修改配置文件(注意备份)
- 重启服务
- 验证结果
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号码来识别该文件,不再考虑文件名
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级别,就已经比较严重,需要引起重视。
| 级别号 | 消息 | 级别 | 说明 |
|---|---|---|---|
| 0 | EMERG | 紧急 | 会导致主机系统不可用的情况 |
| 1 | ALERT | 警告 | 必须马上采取措施解决的问题 |
| 2 | CRIT | 严重 | 比较严重的情况 |
| 3 | ERR | 错误 | 运行出现错误 |
| 4 | WARNING | 提醒 | 可能会影响系统功能的事件 |
| 5 | NOTICE | 注意 | 不会影响系统但值得注意 |
| 6 | INFO | 信息 | 一般信息 |
| 7 | DEBUG | 调试 | 程序或系统调试信息等 |
4.3 rsyslog软件
rsyslog 是一个帮助我们管理日志的软件:收集管理分析日志,是单机的,只对本机负责。
查看配置文件: rpm -qc rsysctl
主配置文件: /etc/rsyslog.conf
rsyslog 特性:
- 多线程
- UDP, TCP, SSL,TLS,RELP
- MySQL,PGSQL,Oracle实现日志存储
- 强大的过滤器,可实现过滤记录日志信息中任意部分。
- 自定义输出格式,可以日志
- 适用于企业级
- 有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/
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 的配置文件格式,由三部分组成:
- MODULES:相关模块配置
开启tcp或者udp功能:
- GLOBAL :全局设置
主要是一些默认的普通设置。
- 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 实验二:
搭建日志服务器,把日志集中起来。
示例:
#日志配置文件,第一台电脑:
vim /etc/rsyslog.conf
把19、20行的注释打开
54行:后半部分改成@@(tcp)或者@(udp) +ip地址(对方的)
重启systemctl restart rsystem.service
logger "hello 192.168.125.10"
#第二台电脑:
vim /etc/rsyslog.conf
把19、20行的注释删掉
重启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被注释掉了,代表不压缩。
| 配置参数 | 说明 |
|---|---|
| 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` #日期和时间,中间用空格隔开