一、系统日志管理
1.1系统日志的介绍
在现实生活中,记录日志也非常重要,比如银行的转账记录,飞机上的黑盒子,那么将系统和应用发生的事件记录至日志中,以助于排错和分析使用
日志记录的内容包括:
-
历史事件:时间,地点,人物,事件
-
日志级别:事件的关键性程度,Loglevel error notice info debug
1.2rsyslog 系统日志服务
rsyslog是CentOS 6以后版本的系统管理服务:它提供了高性能,出色的安全性和模块化设计。尽管rsyslog最初是常规的syslogd,但发展成为一种瑞士军刀式的记录工具,能够接受来自各种来源的输入,并将其转换,然后输出到不同的目的地。
rsyslog:管理日志
使用他的话,需要rsyslog软件和那个软件之间要支持
日志功能:
记录系统、程序运行中发生事情
1.3日志的种类
系统日志
/var/log/secure:放系统安全
/var/log/message:存放系统大部分文件
用户登录日志
/var/log/btmp:查看用户登录失败的信息 用 lastb命令 看,因为btmp是二进制文件
/var/log/wtmp:查看哪些用户正常登录 用 last 命令查看
/var/log/lastlog:记录用户最后一次登录的信息 用 lastlog 命令查看
程序日志
和程序有关,有的有独立日志,有的没有
1.4journalctl:日志管理工具
CentOS 7 以后版,利用Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。
日志的配置文件
/etc/systemd/journald.conf
journalctl命令格式
journalctl [OPTIONS...] [MATCHES...]
选项说明:
--no-full, --full, -l
如果字段内容超长则以省略号(...)截断以适应列宽。
默认显示完整的字段内容(超长的部分换行显示或者被分页工具截断)。
老旧的 -l/--full 选项 仅用于撤销已有的 --no-full 选项,除此之外没有其他用处。-a, --all
完整显示所有字段内容, 即使其中包含不可打印字符或者字段内容超长。
-f, --follow
只显示最新的日志项,并且不断显示新生成的日志项。 此选项隐含了 -n 选项。-e, --pager-end
在分页工具内立即跳转到日志的尾部。 此选项隐含了 -n1000
以确保分页工具不必缓存太多的日志行。 不过这个隐含的行数可以被明确设置的 -n
选项覆盖。 注意,此选项仅可用于 less(1) 分页器。
-x, --catalog
在日志的输出中增加一些解释性的短文本, 以帮助进一步说明日志的含义、
问题的解决方案、支持论坛、 开发文档、以及其他任何内容。
并非所有日志都有这些额外的帮助文本, 详见 Message Catalog Developer
Documentation[5] 文档。
注意,如果要将日志输出用于bug报告, 请不要使用此选项。-n, --lines=
限制显示最新的日志行数。 --pager-end 与 --follow 隐含了此选项。
此选项的参数:若为正整数则表示最大行数; 若为 "all" 则表示不限制行数;
若不设参数则表示默认值10行。
--no-tail
显示所有日志行, 也就是用于撤销已有的 --lines= 选项(即使与 -f 连用)。
-r, --reverse
反转日志行的输出顺序, 也就是最先显示最新的日志。
-o, --output=
控制日志的输出格式。 可以使用如下选项:
short
这是默认值, 其输出格式与传统的 syslog[1] 文件的格式相似, 每条日志一行。
short-iso
与 short 类似,只是将时间戳字段以 ISO 8601 格式显示。
short-precise
与 short 类似,只是将时间戳字段的秒数精确到微秒级别。
short-monotonic
与 short 类似,只是将时间戳字段的零值从内核启动时开始计算。
short-unix
与 short 类似,只是将时间戳字段显示为从"UNIX时间原点"(1970-1-1 00:00:00
UTC)以来的秒数。 精确到微秒级别。
verbose
以结构化的格式显示每条日志的所有字段。
export
将日志序列化为二进制字节流(大部分依然是文本) 以适用于备份与网络传输(详见
Journal Export Format[2] 文档)。
json
将日志项按照JSON数据结构格式化, 每条日志一行(详见 Journal JSON Format[3]
文档)。
json-pretty
将日志项按照JSON数据结构格式化, 但是每个字段一行, 以便于人类阅读。
json-sse
将日志项按照JSON数据结构格式化,每条日志一行,但是用大括号包围, 以适应
Server-Sent Events[4] 的要求。
cat
仅显示日志的实际内容, 而不显示与此日志相关的任何元数据(包括时间戳)。
实例命令:
journalctl -xe
查看最后几个日志-----基本没什么用
journalctl -xe --no-pager
二、实验
1.实际操作,将ssh服务的日志单独设置
1.查看ssh服务的日志位置
tail -f /var/log/secure
2.添加自己文件位置
vim /etc/rsyslog.conf
3.修改ssh配置文件,32下一行添加自己的自定义
vim /etc/ssh/sshd_config
32 #SyslogFacility AUTHPRIV
33 SyslogFacility LOCAL6
4.重启服务
systemctl restart rsyslog.service sshd
5.登录远程主机 172.16.18.4
ssh 172.16.18.4
6.具体查看一下日志文件
ls /data/
cat /data/sshd.log
7.开启远程登录ssh到主机;
ssh 172.16.18.4
单独调成文件
tail -f /data/sshd.log
2.远程日志功能
1.让两台主机,同步命令
2.关闭防火墙和核心防护
systemctl stop firewalld
setenforce 0
3.修改配置文件
vim /etc/rsyslog.conf
4.查看514端口是否开启;查看一下另一台主机是否开启,没有的话,按上操作开启一下
systemctl restart rsyslog.service
ss -ntap |grep 514
5.主机1导给主机2,修改主机2的配置文件
6.重启;临时切换一下主机名
systemctl restart rsyslog.service
hostname test
su
7.概念说明
8.主机2中随便写入一条日志内容
logger "this is test log from 192.168.91.101 2"
9.最后,在主机1中查看一下,有没有刚刚主机2中的日志内容
三、inode号
3.1介绍
在同一个设备上是唯一的
inode是有限资源,他的多少和磁盘大小有关
3.2访问文件流程:
根据文件夹中的文件名和inode号的关系,找到对应的inode表,再根据inode表中的指针,找到磁盘真实数据
3.3例题:
1.磁盘空间还剩余很多,但是无法继续建立文件?
原因是:inode号用完了
lvm:可以扩容
普通文件:删除没有用的空文件
2.我想看到几点几分到几点几分之间的日志
内存中
journalctl -S “2024-01-01 8:00” -U “2024 -02-02 8:00”