企业级日志管理及优化方式
前言
什么是日志?
- 系统不会说话,系统有什么状况和问题通过日志告诉给管理员
- 本章讲解日志的采集方式有:journald和rsyslog,这两个命令是完成日志的采集工作,不是产生日志的,是日志的搬运工!
- 采集命令不同,采集方式不同,让我们一起来探索吧
- 系统启动自动打开的shell会一直产生日志
- Linux系统中运行的程序通常会把一些系统消息和错误消息写入对应的日志中,若是一旦出现问题,我们就可以通过查看日志来迅速定位,及时解决故障。学会查看日志文件是一件很有意义的事情。
- 日志的存在可以使管理员提前知道服务器的各种状态,如果服务器出现什么问题可以提前处理。
- 服务器需要管理多台计算机,可能上百台,管理员不可能每一台的去查看计算机的信息状况,这里用到了远程同步日志,效率管理!
日志管理的重点内容
- 日志采集命令:journald和rsyslog命令
- 企业7之前使用的采集命令是:rsyslog命令
- 企业7,开始增加了新的采集命令:journald 即有两个啦
- journald 效率速度较快,存储灵活
- journal 不采集日志,直接从内核存看日志 ,速度更快
- rsyslog 储存比较精确(路径+格式+远程同步)
- rsyslog采集日志,从磁盘读取,速度慢
- 两个命令reboot 重启系统之后系统之前的日志会被清除
- 时间管理:timedatactl 和 时间同步服务
实验环境的搭建
- 1、配置网络
- 网络的配置在如何实现网络互通博客中已阐述
- rhel7_node1192.168.43.10
- rhel8_node1192.168.43.11
- 2.在企业7中远程连接企业8,也就是实现了在一个虚拟机中操作两台虚拟机,查看两台虚拟机情况呀
开始我们的路途吧
日志的采集
- 一、journald日志的查看
- 二、rsyslog日志的采集
一、journald 日志查看
服务名称 | systemd-journald.service |
---|---|
默认日志存放位置 | /run/log |
命令 | journalctl |
journalctl命令的用法
journalctl | 默认情况查看日志,可直接查看,查看从开机到目前为止的日志 |
---|---|
-n 3 | 查看日志最新的三条 |
–since “2020-02-13 17:00” | 显示17.00之后的日志 ,从17.00开始显示日志,之前的日志还是有的,不过没有显示而已 |
–until “2020-02-13 17:01” | 显示从开机到17.01的日志 |
–since “2020-02-13 17:00” --until “2020-02-13 17:01” | 显示从五点到五点零一分的日志 |
注意点:
(1)journalctl --since “2020-4-9 11:00” 有两个“-”!
(2)年月日中间使用-来进行连接!
1 -o 参数:设定日志的显示模式(例如:journalctl -o short %经典模式)
short | 经典模式(默模模式) |
---|---|
verbose | 显示日志的详细模式 |
export | 适合传输和备份的二进制模式 |
json | javascript js格式显示输出 |
上述为常用模式,了解更多man journalctl 查询
2 -p 参数:显示指定级别的日志
例如:journactl -p warning 或者 journactl -p emerg
0 emerg | 系统严重问题日志 一般报内核错误 |
---|---|
1 alert | 系统中立即要更改的信息 不更改可能会有问题 |
2 crit | 严重级别日志 导致系统软件不能正常工作 |
3 err | 服务程序报错 |
4 warning | 程序警告 |
5 notice | 重要信息的普通日志 具备安全重要的信息 例如谁登陆你账号了 |
6 info | 普通信息 |
7 debug | 程序排错信息 |
3 -F PRIORITY参数:查看可控日志级别 journalctl -F PRIORITY
4 ==-u ==指定查看哪个服务的日志 指定查看服务(例如只想看ssh服务)journalctl -u sshd
5 –disk-usage 查看日志存放空间的大小 journalctl --disk-usage
6 日志的回滚
- 日志的回滚:到一定限制后,把之前的删掉,删除最前面的 那么日志一直持续记录
- 回滚的目的是删除旧的,迎接新的。也就是可以持续的接纳新的啦,持续的记录啦!
- –vacuum-size=1G 设定存放大小 达到1G后开始删除原来
- –vacuum-time=1W 日志在系统中最长存放时间
- 此参数为临时修改,系统重启之后,日志回滚就消失了
- 若想长期修改设置回滚,修改配置文件/etc/systemd/journald.conf
- 配置文件中的修改内容:单个文件存放的最大时间或者单个文件的容量大小等等
7 -f 监控日志
- 服务开启等会引起日志发生变化,参数-f可动态监控日志的变化
8 按照删选条件进行查询,按照筛选条件显示特定进程的日志:
- _EXE 进程的可执行文件的路径
- _PID 进程的PID,例如:journalctl _PID=1
- _UID 运行该进程用户的UID
- _SYSTEMD_UNIT 启动该进程的 systemd 单元
以上筛选条件可组合使用,例如:
journalctl _PID=1182 _SYSTEMD_UNIT=sshd.service
实验一:journalctl命令的用法
1.常用用法:
journalctl 可直接查看日志(从开机到目前位置)
journalctl -n 3 查看最新三条产生的日志信息
- 如果重启某个服务后,重新查看,会更新日志
- 关机重启也会更新日志信息,包括了开机信息;
- systemd-journald.service 此服务是静态的,自动开启服务,设置开机不启动,重启后状态仍为active,开启自启。
systemd-journald.service服务为atatic 自动开启,关不掉噢
journalctl --since “2020-02-14 01:00” 查询节点时间之后的日志
journalctl --until “2020-02-14 01:36” -n 10查询节点之前的日志,并设置只显示最后10条
**journalctl --since “2020-02-14 01:30” --until “2020-02-14 01:31”**查询节点时间之间的日志
2.-o参数用法
man journalctl 查看参数的用法
journalctl -o short 经典模式显示日志(也就是默认模式)
journalctl -o verbose 显示日志的详细信息
3.-p参数用法
journalctl -p notice
journalctl -p warning
journalctl -p emerg
journalctl -p alert
日志中没有显示内容,说明没有严重的emerg 和 alert 问题!
-F PRIORITY 参数 查看可控日志级别
- 234567是可控的 0和1是不可控的信息
journalctl -F PRIORITY
journalctl -u sshd.service 只查看sshd相关的日志
journalctl --disk-usage 查看日志存放空间的大小
回滚设置
- 临时
journalctl --vacuum-size=1G 设定存放大小 达到1G后开始删除原来的
journalctl --vacuum-time=1日志在系统中最长存放时间
- 永久
vim /etc/systemd/journald.conf
journalctl -f 监视日志
实验思路:
1 打开两个终端
2 一个终端重启sshd服务,一个终端-f命令监视
3.重启服务,监视的终端会发生变化
按照刷选条件进行日志的查询
实验思路:
1.查看sshd服务的ID
systemctl status sshd.service
2.journalctl -o verbose 查看此ID的限制条件
journalctl -o verbose
3.按照条件限制进行日志的查询
4 按照删选条件进行查询,==按照筛选条件显示特定进程的日志:
_PID 进程的PID,例如:journalctl _PID=1
_SYSTEMD_UNIT 启动该进程的 systemd 单元
journalctl _PID=16613 _SYSTEMD_UNIT=sshd.service
实验二:如何永久保存日志?
前言:
- 默认情况下,重启系统(poweroff)之后,日志会丢失,之前的日志没了
- 如何永久保存日志呢?将日志存放在硬盘中!
- 日志的默认保存路径是:/run/log/journal
- 默认方式在系统中重启后 日志会被清理
- /var目录
所有服务的登录的文件或错误信息文件(LOG FILES)都在/var/log下,此外,一些数据库如MySQL则在/var/lib下,还有,用户未读的邮件的默认存放地点为/var/spool/mail - 系统日志一般都存在/var/log下
- /var/log/messages 是在做故障诊断时首先要查看的文件
- messages 日志是核心系统日志文件。它包含了系统启动时的引导消息,以及系统运行时的其他状态消息。IO 错误、网络错误和其他系统错误都会记录到这个文件中。其他信息,比如某个人的身份切换为 root,也在这里列出。如果服务正在运行,比如 DHCP 服务器,您可以在 messages 文件中观察它的活动。
实验思路:
1 首先查看日志,默认情况下重启只能看到重启之后的日志 默认日志路径:/run/log/journal
2 要想将日志永久的保留下来,完成以下步骤:
3 在/var/log 目录下创建目录journal。mkdir /var/log/journal
4 修改权限
5 修改所有组,并且设定特殊权限--强制位。(谁在我这个目录建立的文件,所有组都是属于此目录的所有组 工厂原理:生产的东西归工厂所有)
6 重启journald服务,日志会被存放在指定路径 /var/log/journal中
systemctl restart systemd-journald.service
7 将 /var/log/journal删除可以看到默认路径/run/log/journal出现,两者存放的内容是一样的。ls 可以查看journal内存放的内容。
8 设置日志存放的大小(永久回滚设定),日志可永久存放在硬盘中啦!
9 更改路径之前,重启只能看到重启时间之后的日志
10 将路径改为 /var/log/journal后,可以看到重启之前的日志是被保存下来的
注意:
(1)修改用户组的目的:让多个用户具有相同的权限,我们把用户都定义到同一用户组,我们通过修改文件或目录的权限,让用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限。
比如是一个时间表,想让一些用户知道这个时间表的内容,而不让他们修改,所以我们可以把这些用户都划到一个组,然后来修改这个文件的权限,让用户组可读;
步骤一:
mkdir /var/log/journal建立文件
chgrp systemd-journal /var/log/journal修改所有组
chmod 2777 /var/log/journal修改权限
步骤二:重启服务
步骤三:重启服务后,服务存放的默认路径更改
即使更改了路径,但是存放的东西是和默认路径一样的!
步骤四:查看重启前的服务
重启后查看的日志文件,重启时间节点之前的日志仍然存在!
查看重启后的后十条日志
二、rsyslog采集命令
journal和rsyslog区别
- rsyslog日志分门别类的放在不同的路径
- rsyslog查看是依靠文件进行,文件的查看方式查看
- 不提供查看类似于systemctl 查看工具,直接查看文件
基础知识
服务名称:rsyslog.service
配置文件:/etc/rsyslog.conf
日志存放:
/var/log/message | 系统服务日志 常规信息 服务报错 |
---|---|
/var/log/secure | 系统认证信息日志 |
/var/log/maillog | 系统邮件日志信息 |
/var/log/cron | 系统定时任务信息 |
/var/log/boot.log | 系统启动日志信息 |
扩:日志管理依靠配置文件
(1)配置文件中书写内容格式:
日志类型.日志级别 日志存放路径
(2)存放所有的类型和级别 用 * 表示
(3)可以直接指定存放的类型和级别
(4)指定类型和级别不存入日志 使用类型.none
举例:
. /var/log/westos | 把系统所有日志都放进去 |
---|---|
.;authpriv.none;cron.none /var/log/westos | 把系统所有日志都放进去,但是服务认证文件和时间认为文件不放 |
日志类型
auth | 用户认证 |
---|---|
authpriv | 服务认证 |
cron | 时间认证 |
kern | 内核类型 |
邮件 | |
news | 系统更新信息 |
uesr | 用户 |
日志级别
0 emerg | 系统严重问题日志 一般报内核错误 |
---|---|
1 alert | 系统中立即要更改的信息 不更改可能会有问题 |
2 crit | 严重级别日志 导致系统软件不能正常工作 |
3 err | 服务程序报错 |
4 warning | 程序警告 |
5 notice | 重要信息的普通日志 具备安全重要的信息 例如谁登陆你账号了 |
6 info | 普通信息 |
7 debug | 程序排错信息 |
类型.none 表示不存放
实验环境
- 保证实验环境纯净,实验一建立的文件/var/log/journal删除
- 永久设置显示行号,方便查看(配置文件中设置)/etc/vimrc 配置文件中修改
实验一:自定义日志采集路径
实验思路
1 保持实验环境纯净+设置行号
2 进入配置文件 vim /etc/rsylog.conf
3 在RULES下面写入文件存放路径
4 *.* /var/log/westos 更改文件的存放方式(保证westos文件事先不存在)
5 将/var/log/message文件内容清空 cat查看确保
6 *.*;authpriv.none;cron.none 把系统所有日志都放进去,但是服务认证文件和时间认为文件不放
7 重启服务 (注意修改配置文件后,一定要重启任务)systemctl restart rsyslog.service
8 查看 cat /var/log/westos cat /var/log/message 两个文件内容!
实验过程
第一步:vim /etc/vimrc 打开配置文件,最后一行添加set nu,实现了vim中显示行号
第二步:先把/var/log/message文件内容清空,重启网络,系统服务日志内容重新出现。
第三步:本来没有/var/log/westos这个文件,进入配置文件后,自定义采集路径。系统自动生成此westos文件,并保存了指定类型的日志内容。
实验二、日志采集格式
- 默认日志的采集格式:时间戳 主机名称 日志生成服务 日志内容
- 若想自定义日志的采集格式,在配置文件 /etc/rsylog.conf 中自定义格式
- 自定义格式后,设定日志采集格式的应用
- 举例(自定义日志采集格式)
$template WESTOS,"%timegenerated% %FROMHOST-IP% %syslogtag% %msgg%\n"
%timegenerated% | 日志生成时间 |
---|---|
%FROMHOST-IP% | 日志来源主机IP |
%syslogtag% | 日志生成服务 |
%msgg% | 日志内容 |
\n | 换行 |
- 设定日志采集格式(举例)
.info;mail.none;authpriv.none;cron.none /var/log/messages;WESTOS
实验三:日志的远程同步
- 将所有主机的日志都存放在一台主机内,因为查看日志的时候,不可能全部逐一的查看,将所有主机的信息同步在一台主机上。
- rhel7_node 192.168.254.11 存放作为日志接收端
- rhel8_node 192.168.254.10发送日志到rhel7_node1主机中
- 在7中设定接受所有人的日志,注意需要把防火墙关掉
- 只要是修改配置文件,一定要重启服务
- tcp 需要三次握手 安全,但是速度慢
- udp 将信息抛出 速度较快
- 使用方式用man 5 rsylog查看用法udp@ tcp @@
实验思路
1 在7中关闭火墙,设定接收所有人的日志
2 设定需要在配置文件中,打开日志接收插件,并指定插件使用的接口
3 重启服务
4 查询端口状况
5 在8中设定发送日志到7中 udp使用一个@ tcp使用@@
6 在8中重启网络
7 测试:在7和8中清空message日志,并在8中产生日志,在7中可看到8中生成的日志
实验过程
第一步:关闭火墙systemctl stop firewalld
第二步:在7中的配置文件中开启接收所有人日志,并指定接收端口。并重启服务。
打开配置文件 vim /etc/rsyslog.conf
15 $ModLoad imudp
16 $UDPServerRun 514
去掉# 开启插件和接口
第三步:在8中配置文件中设定,所有的日志发送到7,并重启服务
* . * @192.168.43.10
第四步:测试
8中生成日志,7中可以看到8中生成的日志。因为8使用udp传输日志到服务器7。
时间管理
- 日志的采集很重要是时间
- 一、timedatectl
- 二、时间同步服务
一、timedatectl
实验过程:
step1:查看系统时间
Local time:当前时间
Universal time: 伦敦时间
RTC time:硬件时间
Time zone: 当前时区
step2:
系统使用utc方式计算时间
utc方式计算:当前系统时间=硬件时间基础上+当前所在时区
设定系统时间为当前系统时间
timedatectl set-time "2020-02-14 21:45:50"
step3:想设定系统的时区,时区的设定
首先列出系统的所有时区 timedatectl list-timezones
设定系统时区timedatectl set-timezone "Asia/Hong_Kong"
step4,设定系统时间计算方式
设定UTC时间: timedatectl set-local-rtc 0
查看计算方式:vim /etc/adjtime
设定local时间,这样windows 系统就不会再出现问题
二、时间同步服务
前言:
- 为什么需要时间同步: 做认证等的时候 不受时间的影响
- 一台主机时间共享出来让所有主机时间同步
基础知识
- 服务名称:chronyd.server
- 配置文件:/etc/chrony.conf
实验思路:
7作为时间源,rhel8同步7的时间
1.实验环境纯净,7中改回UTC时间计算方式
2.7中关闭防火墙
3 在7中允许网段同步主机时间,并开启服务同步级别
4 在7中开启chronyd.server服务
5 在8中修改配置文件/etc/chrony.conf,并重启chronyd.server服务
6 在8中查看时间,已经变成了7的时间。使用.chronyc sources -v查看时间效果
实验过程
step1:
timedatectl set-local-rtc 0 设定UTC计算方式
systemctl status firewalld.service 开启防火墙服务
vim /etc/chrony.conf配置文件
systemctl restart chronyd重启服务
step2:在rhel8中
vim /etc/chrony.conf 修改配置文件:pool 192.168.43.10 iburst
systemctl restart chronyd.service 重启服务
timedatectl 查看时间
161 chronyc sources -v查看时间效果