Linux系统中的日志管理

一、理解系统日志

  • 日志的存在可以使管理员提前知道服务器的各种状态,如果服务器出现什么问题可以提前处理。那么问题来了,公司的服务器很多,难道管理员一个一个查看服务器的状态吗?实际上并不是这样的,为了提高工作效率,我们可以把所有服务器的日志集中在一起管理,放在一台主机上管理,将其他服务器的日志都传到这台管理日志的主机上,这样就方便多了。
  • 注意:系统启动自动打开的shell会一直产生日志。

1、日志采集

1.1 rsyslog 日志采集服务

  • 采集系统日志,自己不生产日志,只是起到采集日志的作用
文件含义
/var/log/messages服务信息日志
/var/log/secure系统登陆日志
/var/log/cron定时任务日志
/var/log/maillog邮件日志
/var/log/boot.log系统启动日志
  • 注意:以上是采集指定日志的路径

1.2 日志采集规则

  • 日志采集规则在 /var/log/file(文件名) 中设置

  • 日志类型

命令日志
authpam产生的日志
authprivssh,ftp等登陆信息的验证信息
cron时间任务相关
kern内核
lpr打印
mail邮件
mark(syslog)-rsyslog 服务内部的信息,时间标识
news新闻组
user用户程序产生的相关信息
uucpunix to unix copy,unix主机之间相关的通讯
local 1~7自定义的日志设备
  • 日志级别
命令日志
debug有调试信息的,日志信息最多
info一般信息的日志,最常用的
notice最具有重要性的普通条件的信息
warning警告级别
err错误级别,阻止某个功能或者模块不能正常工作的信息
crit严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert需要立刻修改的信息
emerg内核崩溃等严重信息
none什么都不记录
  • 注意:从上到下,级别从低到高,记录的信息越来越少
  • 详细的可以查看手册:man 3 rsyslog

2、日志的定向采集

操作示例:
目的
把系统中所有日志采集到/var/log/westos文件中
操作
vim /etc/rsyslog.conf
. /var/log.westos
systemctl restart rsyslog.service
测试
systemctl restart sshd 命令目的为了生成日志
cat /var/log/westos 此文件中出现日志信息

(1)vim /etc/rsyslog.conf 打开设定日志规则的文件(/etc/rsyslog.conf)

(2)在日志采集文件里RULES下设置 将任意类型、任何级别的日志【.】 都存放在 /var/log/westos
如果westos文件不存在,会自动生成该文件 命令格式为 . /var/log/westos
指定日志采集路径:
什么类型的日志 . 什么级别的日志 /var/log/file(日志存放路径)
在这里插入图片描述
(3)systemctl restart rsyslog 重启系统
(4)systemctl restart sshd 生成日志
(5)cat /var/log/westos 查看日志
在这里插入图片描述

3、日志的远程同步

  • 为了方便一台服务器管理多台服务器

操作示例:

在日志发送方:
vim /etc/rsyslog.conf
*. * @172.25.254.200 | "@“表示udp协议发送,”@@"表示tcp协议发送
systemctl restart rsyslog

在日志接收方:
vim /etc/rsyslog.conf
15 $ModLoad imudp |日志接收模块
16 $UDPServerRun 514 |开启接收端口

systemctl restart rsyslog
systemctl stop firewalld | 关闭火墙
systemctl disable firewalld |设定火墙开机关闭

测试

在发送方和接收方都清空日志文件:
> /var/log/messages
在日志的发送方:
logger test
cat /var.log/messages |查看日志已经生成
在日志接收方查看:
cat /var/log/messages

实际实验:
(1)在发送方:

  • vim /etc/rsyslog.conf

  • 在etc/rsyslog.conf文件中写入 . @172.25.254.225(接受方ip)

  • 在发送方**systemctl restart rsyslog**重启系统
    在这里插入图片描述
    在这里插入图片描述
    (2)在接受方:

  • vim /etc/rsyslog.conf 将文件中15、16行的注释去掉
    15 $ModLoad imudp 日志接受模块
    16 $UDPServerRun 514 开启接收模块
    在这里插入图片描述

  • 再次重启系统,关闭防火墙 systemctl stop firewalldsystemctl disable
    firewalld

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

  • 发送方和接受方:清空日志文件 > / var / log / messages

  • 在日志发送方logger test 生成日志 cat /var/log/messages 查看已生成的日志

  • 在日志接受方cat /var/log/messages 查看已生成的日志

  • 但是接收的日志不止是刚刚新建的日志,而是还有很多 /etc/rc.d/rc.local文件产生的日志。故应在发送方主机中清空文件 > /etc/rc.d/rc.local ,后重启主机reboot( 看到的不一定是一条和发送方相似的 )
    在这里插入图片描述

4、日志采集格式的设定

  • 注意:此实验是在实现远程同步的基础上进行的
  • 为了在管理服务器的时候方便,可以通过日志采集格式的设定来获得日志的生成时间、日志发送方的ip地址、日志的服务目标、日志的内容。

vim /etc/rsyslog.conf
$template LOGFMT,“%timegenerated% %FORMHOST-IP% %syslogtag% %msg%\n”

%timegenerated% |显示日志时间
%FORMHOST-IP% |显示主机ip
%syslogtag% |日志记录目标
%msg% |日志内容
\n |换行·

*. * /var/log/westos;LOGFMT |在指定的日志中采用LOGFMT格式

$ActionFileDefaultTemplate LOGFMT |修改系统默日志采集格式为LOGFMT

(1)在接受日志方(server服务端)进行日志采集格式的设置

  • vim /etc/rsyslog.conf,在 rules(规则下)设置 日志采集规则 $template WESTOS(名字任意写),“%timegenerated% %FROMHOST-IP% %syslogtag% %msg%\n”

  • *.info; 下面写 . /var/log/westos;WESTOS 在指定的日志中采用WESTOS格式

  • ActionFileDefaultTemplate WESTOS 29行 修改系统默认日志采集格式为WESTOS
    在这里插入图片描述
    在这里插入图片描述
    (2) 重启服务,在发送方查看日志格式
    在这里插入图片描述
    结果显示:在这里插入图片描述在这里插入图片描述

5、 时间同步服务chronyd

  • 为什么要实现时间同步?
    让日志发送方和接收方让时间保持一致,一般是服务端同步客户端。
    查看设置自己主机时间用date

(1)在服务端:vim /etc/chrony.conf
22行allow 172.25.254.0/24 允许那些客户端来同步本机时间
29行local stratum 10 本机不同步任何主机的时间,本机作为时间源
重启 systemctl restart chronyd
在这里插入图片描述
在这里插入图片描述
(2) 在客户端: vim /etc/chrony.conf
server 172.25.254.225 iburst(删除其他的) 本机立即同步225主机的时间
重启 systemctl restart chronyd
在这里插入图片描述
(3)测试:在客户端输入:chronyc sources -V,出现==*** ip**== 就说明好了
若未出现 则关闭防火墙在这里插入图片描述
(4)在客户端和服务端均输入 date看是否时间同步

6、 设置系统时间

timedatectl | 时间设置命令

timedatectl ##管理系统时间
timedatectl status ##显示当前时间信息
set-time ##设定当前时间
set-timezone ##设定当前时区
set-local-rtc 0|1 ##设定是否使用utc时间
list-timezones ##查看支持的所有时区

(1)timedatectl 管理系统时间

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

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

7、新的日志采集方式

journal | 日志采集方式

7.1 journalctl 日志查看工具

命令意义
journalctl -n 3查看最近3条日志
journalctl -p err查看错误日志
journalctl -o verbose查看日志的详细参数
journalctl --since查看从什么时间开始的日志
journalctl --until查看到什么时间为止的日志

(1)journalctl -n 3 查看最近3条日志
在这里插入图片描述
(2)journalctl -p err 查看错误日志
在这里插入图片描述
(3)journalctl -o verbose 查看日志的详细参数
在这里插入图片描述
(4)journalctl --since 查看从什么时间开始的日志

(5)journalctl --until 查看到什么时间为止的日志
在这里插入图片描述

7.2 使用systemd-journalctl 保存系统日志

  • 默认systemd-journalctl是不能保存系统日志到硬盘的,那么关机后再次开机只能看到本次开机之后的日志,关机之前的日志是无法查看的
  • 方法:
    在硬盘创建一个区域,专门存放journal采集的日志
    只有这样才会让journalctl采集日志。之前只是查看与显示日志。

(1)mkdir /var/log/journal
(2)chgrp systemd-journal /var/log/journal/
(3)chmod g+s /var/log/journal/
(4)ls -ld /var/log/journal/ 查看文件属性
(5)ps aux | grep journal 查看journal进程
在这里插入图片描述
(6)killall -1 /usr/lib/systemd/systemd-journald(进程重新加载配置,不会关闭进程)
(7)date 查看系统当前时间
(8)ls /var/log/journal/
(9)bootctl 重启
(10)journalctl(可以看到之前的日志了 就是可以采集日志)
在这里插入图片描述


版权声明:本文为weixin_43936969原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。