日志管理
企业7之前,日志采集工具只有rsylog,而企业7之后日志采集有两个工具:journald和rsyslog。
在Linux7中查看这两个工具。
远程登陆Linux8虚拟机,查看这两个工具。
journald服务
服务名称:systemd-journald.service
查看日志的程序:journalctl
默认日志存放路径:/run/log/
(该路径中的日志重启服务后自动删除)
日志是由运行程序自己产生的,systemd-journald.service
的作用是按照某种格式采集程序产生的日志,并保存到默认日志路径。
systemd-journald.service
服务无法关闭。
[root@localhost network-scripts]# cd /run/log
[root@localhost log]# ls
journal
journalctl命令的用法
查看日志
- 显示系统开始至当前时间的所有日志:
journalctl
- 查看最新的三条日志:
journalctl -n 3
- 查看从某时间开始的日志:
journalctl --since 时间
- 查看到某事件为止的日志:
journalctl --until 时间
以某种格式显示日志
命令:journalctl -o 类型参数
(默认类型参数为short)
类型参数 | 含义 |
---|---|
short | 经典模式显示日志信息 |
verbose | 显示日志的全部字节 |
export | 适合传输和备份的二进制日志信息 |
json | js格式显示日志信息 |
显示指定级别的日志
命令:journalctl -p 级别代号或参数
代号 | 参数 | 含义 |
---|---|---|
0 | emerg | 系统的严重问题日志(内核错误) |
1 | alert | 系统中立即要更改的信息 |
2 | crit | 严重级别日志,影响软件正常工作 |
3 | err | 程序报错日志 |
4 | warning | 程序警告日志 |
5 | notice | 重要信息的普通日志 |
6 | info | 普通信息日志 |
7 | debug | 排错信息日志 |
使用代号和参数的效果完全相同。
查看可控日志级别
命令:journalctl -F PRIORITY
级别0和1与内核相关,不可控制
查看指定程序/服务的日志
命令:journalctl -u 服务/程序
查看日志大小
命令:journalctl --disk-usage
日志回滚
系统每时每刻都在生成新的日志,为了避免越来越多的日志造成内存浪费,在记录的日志量满足某个条件时,应自动删除最早的日志信息,这就是日志回滚。
临时日志回滚
临时的日志回滚仅对系统本次运行起作用,系统重启后需要重新设置。
命令:journalctl --vacuum-size=日志存放大小
最大日志存放量
命令:journalctl --vacumm-time=时间
日志最长存放时间
永久日志回滚
配置文件地址:/etc/systemd/journald.conf
编辑该文件:vim /etc/systemd/journald.conf
监控日志
命令:journalctl -f
作用:实时显示日志文件的变动、更新。
重启sshd,journalctl -f
的Shell界面自动更新。
永久保存日志
[root@localhost ~]# mkdir /var/log/journal ##创建目录
[root@localhost ~]# chgrp systemd-journal /var/log/journal ##改变目录所有组权限
[root@localhost ~]# chmod 2774 /var/log/journal/ ##改变目录使用权限
[root@localhost ~]# ls -ld /var/log/journal/
drwxrwsr--. 2 root systemd-journal 6 Feb 14 22:27 /var/log/journal/
[root@localhost ~]# systemctl restart systemd-journald.service ##重启服务
[root@localhost ~]# ls /var/log/journal/ ##查看硬盘中的日志信息(永久存放日志,新生成的日志文件也存放在这里)
8400f98d40a44352a1bc526eeed38c94
[root@localhost ~]# ls /run/log/ ##查看原目录中的日志信息(空)
#####################################复原日志文件###########################################
[root@localhost ~]# rm -fr /var/log/journal/ ##删除硬盘中的日志目录
[root@localhost ~]# systemctl restart systemd-journald.service ##重启日志服务
[root@localhost ~]# ls /run/log/ ##新生成的日志信息(临时存放,重启后自动删除)
journal
[root@localhost ~]# ls /run/log/journal/
8400f98d40a44352a1bc526eeed38c94
如果真的要永久改变日志文件的存放地址:仅需执行到第3步即可。
未修改前执行journalct命令。
修改后执行journalctl命令,日志起始时间不变,说明日志文件已永久保存,文件的保存路径为:/var/log/journal
。
复原后执行journalctl命令,日志起始时间变化,说明重启服务后之前的目录已被自动删除。
rsyslog服务
服务名称:rsyslog.service
日志存放l路径:(分类存放)
- /var/log/messages
存放系统服务日志、常规信息和服务报错 - /var/log/secure
存放系统认证信息相关日志 - /var/log/maillog
存放系统邮件相关信息日志 - /var/log/cron
存放系统定时任务信息 - /var/log/boot.log
存放系统启动日志信息
rsyslog服务分门别类的存放日志文件。
journald将所有文件统一存放,再设计命令查找不同类型的日志文件。
rsyslog服务的管理依赖配置文件。
配置文件路径:/etc/rsyslog.conf
自定义日志采集路径
在配置文件中自定义各种类型日志文件的存放路径:
[root@localhost ~]# vim /etc/rsyslog.conf
在第55行增加:
日志类型.日志级别 日志存放路径
日志类型参数 | 含义 |
---|---|
auth | 用户认证日志文件 |
authpriv | 服务认证日志文件 |
cron | 时间任务日志 |
kern | 内核相关日志 |
邮件日志 | |
news | 系统更新信息 |
user | 用户相关日志 |
上图表示把系统中所有类型、所有级别的日志文件存放到指定路径/var/log/file
。
重启rsyslog.service服务后查看该路径下的日志文件。
[root@localhost ~]# rm -f /var/log/file
[root@localhost ~]# vim /etc/rsyslog.conf
上图将所有级别的服务认证相关的日志文件存放到指定路径/var/log/file
。
重启rsyslog.service服务后查看该路径下的日志文件。
日志级别参数 | 含义 |
---|---|
emerg | 系统的严重问题日志(内核错误) |
alert | 系统中立即要更改的信息 |
crit | 严重级别日志,影响软件正常工作 |
err | 程序报错日志 |
warning | 程序警告日志 |
notice | 重要信息的普通日志 |
info | 普通信息日志 |
debug | 排错信息日志 |
none | 排除某个级别的日志文件 |
自定义日志采集格式
在rsyslog.conf
配置文件中定义日志格式:
- XZ
自定义的日志格式名称 - %FROMHOST-IP%
日志来源主机的IP - %timegenerated%
日志的生成时间 - %syslogtag%
生成日志的服务 - %msg%
日志的内容 - \n
每条日志文件结束后换行
将配置文件按上图修改后,重启rsyslog.service服务。
日志的远程同步
准备两台虚拟机,我将Linucx7作为本地主机,Linux8作为远程主机。要求Linux8的日志要发送到Linux7的虚拟机中。
关闭Linux7的火墙
[root@localhost ~]# systemctl stop firewalld
设置Linux7的配置文件
设置Linux7的配置文件,使其接收同一网段中所有人的日志
配置文件地址:/etc/rsyslog.conf
- 修改配置文件:
- 重启rsyslog.service服务,查看服务的端口:
[root@localhost ~]# systemctl restart rsyslog.service ##重启服务
[root@localhost ~]# netstat -antlupe | grep rsyslog ##查询端口
udp 0 0 0.0.0.0:514 0.0.0.0:* 0 267324 72749/rsyslogd
udp6 0 0 :::514 :::* 0 267325 72749/rsyslogd
设置Linux8的配置文件
设置Linux8的配置文件,使其能够发送日志到远程主机
- 修改配置文件
[root@localhost ~]# vim /etc/rsyslog.conf
@
表示使用UDP协议传输日志
@@
表示使用TCP协议传输日志
@192.168.224.131
表示将本地日志用UDP协议发送给远程主机
清空两台虚拟机的日志文件
[root@localhost ~]# systemctl restart rsyslog.service #重启Linux8的服务
[root@localhost ~]# > /var/log/messages #Linux7和Linux8均执行此命令,清空日志文件
在Linux8虚拟机中添加测试日志
[root@localhost ~]# logger wuhan fighting!!! ##添加测试日志
logger wuhan fighting> /var/log/messages!
[root@localhost ~]# cat /var/log/messages ##查看Linux8的日志文件日志文件
Feb 15 02:12:31 localhost root[14166]: wuhan fighting
查看Linux7中的测试文件
时间管理
timedatectl
- Local time
当前时间 - Universal time
格林威治时间 - RTC time
硬件时间
设置系统时间
命令:timedatectl set-time "时间"
设置系统时区
- 命令:
timedatectl list-timezones
含义:列出系统中的所有时区 - 命令:
timedatectl set-timezone "时区"
设置系统时间的计算方式
命令:timedatectl set-local-rtc 0|1
执行timedatectl set-local-rtc 0
,系统时间(RTC)= UTC,设置后系统的硬件时间与UTC相同。
执行timedatectl set-local-rtc 1
,系统时间(RTC)= Local time,设置后系统的硬件时间与当地时间相同。
时间同步服务
模拟时间同步服务时,为了避免影响到同一网段的其它主机,采用VMWare中的仅主机模式下建立局域网。
服务名称:chronyd.service
配置文件:/etc/chrony.conf
- 修改Linux7的配置文件
- 重启服务,关闭Linux7的火墙
[root@localhost ~]# systemctl restart chronyd.service
[root@localhost ~]# systemctl stop firewalld
- Linux8的chronyd服务默认关闭,将其打开;
- 查看Linux8中有无同步时间(无)
- 在Linux8中修改配置文件chrony.conf
- 重启服务,查看Linux8的时间
- 查看同步时间源
系统时间与当前真实时间相差8小时
一般在新建一个虚拟机时,将其时区设置为中国上海,这样就会使系统时间与当前真实时间相差8小时。
原因是:我们在安装系统的时选择的时区是上海,而Linux操作系统默认bios时间是utc时间,所以时间相差了8小时。这个时候的bios的时间和系统的时间是不一致的,一个代表 utc 时间,一个代表cst(+8时区),即上海时间。
要令此时系统的时间为真实时间,需对时间进行同步:
删除localtime即可。