Linux系统中的日志管理
文章目录
一.实验环境:
与前面的实验环境大致相同,还是需要两台主机,并且两台主机可以互相通信,我选择的是两台虚拟机,一台的IPADRRES是172.25.254.100(充当客户端),另一台是172.25.254.200(充当服务器),在实验开始之前要先关闭防火墙,以下是命令:
命令 | 效果 |
---|---|
systemctl disable firewalld | 关闭防火墙 |
systemctl stop firewalld | 关闭防火墙 |
用命令关闭后可以用reboot重启,之后在实验结束后用restart还原
二.journald:
journald服务名称:systemd-journald.service
默认日志存放路径:/run/log
journalctl命令可以对于日志进行查看与修改:
命令 | 操作 |
---|---|
journalctl -n 3 | 日志的最新三条 |
journalctl --since “2021-2-2 12:12:02” | 显示2021年2月2日12点12分2秒后的日志 |
journalctl --until “2021-2-2 12:12:02” | 显示日志到2021年2月2日12点12分2秒,可以与–since结合使用,表示显示时间区间内的日志 |
[1]journalctl -n 数字x:显示日志最新x条:
[2]journalctl --since:从时间点开始显示:
[3]journalctl --until:显示至某时间点:
与–since一起使用表示显示时间区间内的日志:
journalctl -o 可以设定日志的显示方式:
命令 | 效果 |
---|---|
journalctl -o short | 经典模式显示日志 |
journalctl -o verbose | 显示日志全部字节 |
journalctl -o export | 结合传出和备份的二进制格式 |
journalctl -o json | js格式显示输出 |
[1]journalctl -o short:经典模式显示日志:
[2]journalctl -o verbose:显示日志全部字节:
[3]journalctl -o export:结合传出和备份的二进制格式:
[4]journalctl -o json:js格式显示输出:
journalctl -p可以显示制定级别的日志,对于所制定的级别有:
符号 | 功能 |
---|---|
0 emerg | 系统的严重问题日志 |
1 alert | 系统中立即要更改的信息 |
2 crit | 严重级别会导致系统软件不能正常工作 |
3 err | 程序报错 |
4 warning | 程序警告 |
5 notice | 重要信息的普通日志 |
6 info | 普通信息 |
7 debug | 程序派错信息 |
级别越高对应的危险性越低,同时日志显示的信息也越多:
定制级为0到3的日志:
定制级为4的日志:
定制级为5的日志:
定制级为6的日志:
定制级为7的日志:
journalctl还有一些其他的常用命令:
命令 | 效果 |
---|---|
journalctl -F PRIORITY | 查看可控日志级别 |
journalctl -u sshd | 查看指定服务 |
journalctl --disk-usage | 查看日志大小 |
journalctl --vacuum-size=1G | 设定日志存放大小 |
journalctl --vacuum-time=1W | 日志在系统中最长存放时间 |
journalctl -f | 监控日志 |
[1]journalctl -F PRIORITY查看可控日志级别:
[2]journalctl -u sshd查看指定服务:
[3]journalctl --disk-usage查看日志大小:
[4]journalctl --vacuum-size设定日志存放大小以及journalctl --vacuum-time设定日志在系统中存放的最长时间:
[5]journalctl -f监控日志:
三.用journald服务永久存放日志:
系统中默认日志在:/run/log/journal中,默认方式在系统重启后日志会被清理,要永久保存日志要完成以下操作:
修改权限为2775目的就是为了防止系统自删除文件
当服务重启日志存放路径会被指定至:/var/log/journal
完成之后进行实验测试:
[1]在操作以上步骤之前就先查看日志
[2]重启系统
[3]再次查看日志,对比之前的日志发现无法被保存
[5]完成以上操作之后再次重启系统可以看到日志是被保存下来的:
四.rsyslog:
服务名称:rsyslog.service
日志存放:
路径 | 内容 |
---|---|
/var/log/messages | 系统服务日志,常规信息,服务报错 |
/var/log/secure | 系统认证信息日志 |
/var/log/maillog | 系统邮件日志信息 |
/var/log/cron | 系统定时任务信息 |
/var/log/boot.log | 系统启动日志信息 |
在实验前要先用> /var/log/messages清空日志后配置/etc/rsyslog.conf后进行,/etc/rsyslog.conf界面:
在配置文件之前需要清空之前的日志,并且在每一次配置完/etc/rsyslog.conf之后都要restart服务才能出现效果:
1.自定义日志采集路径:
采集模式:
日志类型.日志级别 日志存放路径
对于日志级别有:
日志级别 | 功能 |
---|---|
debug | 程序派错信息 |
info | 程序常规运行信息 |
notice | 重要信息的普通日志 |
warning | 程序警告 |
err | 程序报错 |
crit | 严重级别会导致系统软件不能正常工作 |
alert | 系统中立即要更改的信息 |
emerg | 系统的严重问题日志 |
none | 不采集 |
对于日志类型有:
日志类型 | 功能 |
---|---|
auth | 用户认证 |
authpriv | 服务认证 |
cron | 时间任务 |
kern | 内核类型 |
邮件 | |
news | 系统更新信息 |
user | 用户 |
采集什么类型外或什么级别外的日志用命令:
日志类型.日志级别;日志类型.none 目标地址
日志类型.日志级别;none.日志类型 目标地址
如:将服务认证之外的日志存入/var/log/westos目录下
*.*;authpriv.none /var/log/westos
实验示例:在/etc/rsyslog.conf中的一行编辑内容如下:
编辑结束之后退出保存,重启后看实验效果:
2.如何更改日志采集格式:
在更改日志采集格式时,需要重新定义格式时,要用到以下参数来修改:
操作 | 效果 |
---|---|
%FROMHOST-IP% | 日志来源于主机ip |
%timegenerated% | 日志生成时间 |
%syslogtag% | 日志生成服务 |
%msg% | 日志内容 |
\n: | 换行 |
[1]设定日志格式为只显示主机IP和时间的日志格式:
编辑格式修改:
编辑指定对象修改:
效果:
[2]设定默认格式为一种显示顺序为:时间,ip,内容,服务,换行的格式:
编辑指定格式:
效果:
五.日志的远程同步:
本实验环境中共两台虚拟机,一台ip为172.25.254.100另一台ip为172.25.254.200,在本次实验中,将172.25.254.100当成接收端,将172.25.254.200当成发送端,则:
[1]在172.25.254.100中设置接受端的日志:
systemctl disable --now firewalld
vim /etc/rsyslog.conf
编辑配置文件,需要改动的地方在:
在19,20行中修改,分别删除前面第一个#,19行修改意义为打开日志接受插件,20行修改意义为指定插件使用接口
[2]使用重启命令:
systemctl restart rsyslog.service
之后再用命令查询端口:
netstat -anlutpe | grep rsyslog
可以看到在172.25.254.100这台虚拟机中的接受端口是514(默认端口是514)
[3]打开172.25.254.200并设定发送日志到172.25.254.100:
在172.25.254.200中先设定配置文件如下:
然后将防火墙关闭将rsyslog重启之后在172.25.254.100中使用监控命令查看日志传输是否正常:
watch -n 1 "tail -n 10 /var/log/messages"
在172.25.254.200中用logger命令传输日志:
在172.25.254.100中接受的效果:
六.timedatectl:
timedatectl命令可以用于查看系统的时间,硬件时间。地方时等时间信息以及属性:
命令 | 效果 |
---|---|
timedatectl set-time “2021-2-2 12:12:12” | 设定系统时间为2021年2月2日12时12分12秒 |
timedatectl list-timezones | 显示系统的所有时区 |
timedatectl set-timezone “Asia/Shanghai” | 设定系统时区为亚洲上海 |
timedatectl set-local-rtc 0 | 设定系统时间计算方式不为地方时间 |
timedatectl set-local-rtc 1 | 设定系统时间计算方式不为地方时间 |
[1]timedatectl界面:
[2]timedatectl list-timezones查看时区以及timedatectl set-timezone设置时区:
[3] timedatectl set-local-rtc 0/1,设定系统时间计算方式是否为地方时间:
设置系统时间为地方时之后会出现警告,原因是国际上许多协议的传输均使用的是硬件时间,如果改为地方时,则可能会在协议传输的过程中出现错误
七.时间同步服务:
服务名称:chronyd.service
配置文件:/etc/chrony.conf
在172.25.254.200中的执行命令vim /etc/chrony.conf之后进行文件的编辑如下:
去掉23,26行前面的#之后在13行修改为allow 0.0.0.0/0(指所有网段均可接收),在26行去掉#之意义为开启时间同步服务器功能并设定级别为10
[2]在172.25.254.200中重启chronyd服务并关闭防火墙,在172.25.254.100中配置/etc/chrony.conf文件编辑如下:
把原本在文件中的第3行的内容复制后放入#放入第4行内以便于恢复,在第3行添加:
pool 172.25.254.200 iburst
然后保存退出之后重启服务并关闭火墙
[3]查看两台虚拟机当前的时间信息,在172.25.254.100中用timedatectl与172.25.254.200对比:
在172.25.254.200中明显可以看到系统时间跟硬件时间不同步:
在172.25.254.100中可以看到其系统时间与172.25.254.200系统时间相同:
用chronyc sources -v查看时间效果: