linux学习9:系统中的日志管理


1. 日志是什么

电脑中的日志相当于我们平时写的日志,日志里面记录的是服务器的状态

1.1rsyslog日志管理

此服务用来采集系统中的日志,它不产生日志,只是起到采集的作用

/var/log/messages服务信息日志
/var/log/secure系统登录日志
/var/log/cron定时任务日志
/var/log/maillig邮件日志
/var/log/boot.log系统启动日志
1.2指定日志采集路径

在这里插入图片描述

日志采集规则

  • 指定日志采集路径

什么类型的日志.什么级别的日志 /var/log/file

日志类型如下:

authpam产生的日志
authprivssh,ftp等登陆信息的验证信息
cron时间任务相关
kern内核
mail邮件
mark(syslog)-rsyslog服务内部的信息,时间标识
newsnews
user用户程序产生的相关信息
uucpunix to unix copy,unix主机之间相关的通讯

日志级别分为:

debug有调制信息的,日志信息最多
info一般信息的日志,最常用
notice最具有重要性的普通条件的信息
warning警告级别
err错误级别,组织某个功能或者模块不能正常工作的信息
crit严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert需要立即修改的信息
emerg内核崩溃等严重信息
none什么都不记录

注意:从上到下,级别从低到高,记录的信息越来越少,详细可以查看man 3 syslog


2. 搭建实验环境
  • 先在真机里面开启两台虚拟机,并且配置好网络(一台为Desktop主机,另外一台为server主机)
  • 将Desktop主机当作日志发送方,将server主机当作日志接收方(管理日志)

Desktop主机的ip地址为172.25.60.252;server主机的ip地址为172.25.60.251
在这里插入图片描述
在这里插入图片描述


3. 日志的定向采集
  • 实验在Desktop上做
  • 打开设定日志采集规则的文件 vim /etc/rsyslog.conf
    在这里插入图片描述
  • 在日志采集文件里面设置将任意类型、任何级别的日志都存放在/var/log/westos下;如果westos文件不存在,会自动生成该文件 命令格式为*.* /var/log/westos
    在这里插入图片描述
  • 修改后,重启系统日志
    在这里插入图片描述
  • 测试

生成日志 systemctl restart sshd;查看日志 cat /var/log/westos
在这里插入图片描述

  • 由此可见,将任意类型、任何级别的日志定向采集到了/var/log/westos之中

总结:实际在企业当中,我们要将日志分类管理,可以参考第三项系统日志管理里面的类型和级别,将 *.*改为日志类型.日志级别,然后存放在指定的文件当中即可。


4. 日志的远程同步

在日志发送方设置:

  • 在发送方Desktop主机中先 vim /etc/rsyslog.conf;在/etc/rsyslog.conf这个文件中写入 . @172.25.60.251(接受方的ip)
  • @'表示udp协议发送,‘@@’表示用tcp发送
    在这里插入图片描述
    在这里插入图片描述
  • 退出文件, ,重启日志系统 systemctl restart rsyslog

在日志接收方设置:

  • 在接收方server主机中先 vim /etc/rsyslog.conf
    在这里插入图片描述
  • 将/etc/rsyslog.conf 这个文件中的15行和16行的注释去掉

15 $ModLoad imudp 日志接受模块
16 $UDPServerRun 514 开启接收端口514
在这里插入图片描述

  • 重启系统:systemctl restart rsyslog;关闭防火墙:systemctl stop firewalld;开机不启动防火墙systemctl disable firewalld
    在这里插入图片描述
    测试
  • 清空发送方和接收方日志文件
  • 在日志发送方 的shell当中输入 :

logger test ###产生日志
cat /var/log/messages ###查看日志已经生成
在这里插入图片描述

  • 在日志接受方查看远程主机发送过来的同步日志:

在server主机的shell当中输入: cat /var/log/messages
在这里插入图片描述
可见两台主机实现远程同步了
但是server主机接收的日志不止是刚刚新建的日志,而是还有很多 /etc/rc.d/rc.local文件产生的日志

4. 1清除多余文件

在日志发送方设置:

  • 在发送方主机中清空这个文件 ,命令格式为: > /etc/rc.d/rc.local
  • 重启这台主机
    在这里插入图片描述
    在日志接收方设置:
  • 在接收方主机中清空这个文件 ,命令格式为: > /etc/rc.d/rc.local
  • 重启这台主机
  • 重启系统:systemctl restart rsyslog
  • 关闭防火墙:systemctl stop firewalld
  • 开机关闭火墙:systemctl disable firewalld

测试

  • 清空发送方和接收方日志文件 > /var/log/messages
  • 日志发送方:重新建立日志,并且查看:
    在这里插入图片描述
  • 在日志接收方查看远程同步的日志
    在这里插入图片描述

注意:

  • 我所做的实验是一台发送方,一台接收方,实际企业中有很多服务器,管理的原理和方法和这个类似
  • 也可以监控远程同步(日志的传送过程)的过程,命令为: watch -n 1 tail -f /var/log/messages
  • 用该命令在接收方可以查看接口配置是否正确 netstat -antlupe | grep rsyslog
    在这里插入图片描述

5. .日志采集格式的设定
  • 在接受日志方(server服务端)进行日志采集格式的设置
先 vim  /etc/rsyslog.conf
然后在rules(规则下)设置日志采集规则
$template WESTOS(任意写),“%timegenerated%  %FROMHOST-IP%  %syslogtag%  %msg%\n”
显示日志的生成时间%timegenerated%
显示发送方主机的ip%FROMHOST-IP%
日志记录目标%syslogtag%
日志内容%msg%
换行\n
  • 在下面写 . /var/log/westos;WESTOS #在指定的日志中采用WESTOS格式
    在这里插入图片描述
  • 设置好之后重启服务systemctl restart rsyslog
    在这里插入图片描述

6. 时间同步服务

如果日志发送方和接收方的时间不一致很麻烦
让时间保持一致,也就是客户端同步服务端,服务端共享系统时间,让别人读
服务端和客户端都是自己的时间 ,设置自身时间用date命令

  • 服务名称:chronyd

在服务端:

  • 在服务端: vim /etc/chrony.conf
22行: allow 172.25.254.0/24  允许那些客户端来同步本机时间
29行: local stratum 10 本机不同步任何主机的时间,本机作为时间源
systemctl restart chronyd

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在客户端:

  • 在客户端:vim /etc/chrony.conf
server 172.25.60.251(服务端的ip) iburst(删除其他的)  本机立即同步251主机的时间
systemctl restart chronyd

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试:

  • 在客户端输入:chronyc sources -v
  • 出现* ip 就说明好了
  • 说明:之所以相差几秒钟是因为输入date命令延迟了几秒
    在这里插入图片描述
    在这里插入图片描述

7. 设置系统时间
  • 采用 timedatectl 命令
  • 说明:装了双系统以后,linux把bios时间改了,所以windows时间不对,可以设置
timedatectl管理系统时间
timedatectl status(可加可不加)显示当前时间信息
timedatectl set-time设定当前时间
timedatectl set-timezone设定当前时区
timedatectl set-local-rtc 0或1设定是否使用utc时间 vim /etc/adjtime
timedatectl list-timezones查看支持的所有时区

timedatectl 管理系统时间
在这里插入图片描述

Local time本地时间
Universal time国际时间
RTC time硬件时间
Timezone时区

timedatectl status(可加可不加) 显示当前时间信息
在这里插入图片描述
timedatectl set-time 设定当前时间
在这里插入图片描述
timedatectl set-timezone “Asia/Shanghai" 更改当前时区为东8区
在这里插入图片描述
timedatectl set-local-rtc 0|1 设定是否使用utc时间 vim /etc/adjtime
在这里插入图片描述
timedatectl list-timezones 查看支持的所有时区
在这里插入图片描述


8. 新的日志采集方式journal

rsyslog采集日志,从硬盘读取,速度慢

journal 不采集日志,直接从内存查看日志 ,速度更快,reboot 重启系统之后系统之前的日志会被清除

8.1 journalctl 日志查看工具
journalctl -n 3查看最近3条日志
journalctl -p err查看错误日志
journalctl -o verbose查看日志的详细参数
journalctl --since查看从什么时间开始的日志
journalctl --until查看到什么时间为止的日志
  • journalctl -n 3 查看最近3条日志
    在这里插入图片描述
  • journalctl -p err 查看错误日志
    在这里插入图片描述
  • journalctl -o verbose 查看日志的详细参数
    在这里插入图片描述
  • journalctl --since “2019-10-30 11:54:41” 查看从什么时间开始的日志
    在这里插入图片描述
  • journalctl --until “2019-4-17 12:45:53” 查看到什么时间为止的日志
    在这里插入图片描述
  • journalctl --since --until 查看一个时间段的日志
    在这里插入图片描述
8.2 在硬盘创建一个区域,专门存放journal采集的日志
  • 只有这样才会让journalctl采集日志(之前只能查看日志)
如何使用systemd-journal保存系统日志
默认systemd-journal是不会保存系统日志到硬盘的
那么关机之后再次开机时只能看到本次开机之后的日志
关机之前的日志是无法看到的
此实验在一台虚拟机里面做,我在server主机里面做
  • mkdir /var/log/journal(在硬盘下创建一个可以存储 journalctl命令采集的日志 的文件)
    在这里插入图片描述
  • chgrp systemd-journal /var/log/journal/

系统初始化程序控制这个日志,改这个文件的所有组为systemd-journal
这样系统就能识别这个文件了,把这个文件放入这个组,让组控制这个文件
在这里插入图片描述
在这里插入图片描述

  • chmod g+s /var/log/journal/

改这个文件的权限,使这个文件的systemd-journal组都能查看这个日志
在这里插入图片描述
在这里插入图片描述

  • ls -ld /var/log/journal/ 查看文件属性
    在这里插入图片描述
  • ps aux | grep journal 查看进程
    在这里插入图片描述
  • killall -1 /usr/lib/systemd/systemd-journald(进程重新加载配置,不会关闭进程)
    在这里插入图片描述
  • date 查看系统当前时间
    在这里插入图片描述
  • ls /var/log/journal/
    在这里插入图片描述
  • bootctl 重启
  • journalctl(可以看到之前的日志了 就是可以采集日志)
    在这里插入图片描述
可以看到采用journalctl查看日志能看到当前系统时间之前的日志了
date(查看系统当前时间)
reboot(重启系统 相当于关机)
journalctl(再次查看仍然能看到系统当前时间之前的日志了)
因为采集的日志放到了硬盘里面
只有这样使用journalctl查看日志的时候,才会看到系统开机之前的日志
只有硬盘的东西才可以永久保存
内存里面的东西都是开机之后才有的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值