《Linux基础》08. 日志管理 · 备份与恢复
阅读原文时间:2023年08月29日阅读:2

@

目录


本文以 CentOS7.6 为例。

1:日志管理

日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。

日志对于安全来说也很重要,它记录了系统每天发生的各种事情,能通过日志来检查错误发生的原因,或者检查受到攻击时攻击者留下的痕迹

大部分系统日志文件的保存位置: /var/log/ 。

日志文件

说明

/var/log/boot.log

系统启动日志

/var/log/cron

记录与系统定时任务相关信息

/var/log/lastlog

记录所有用户最后一次的登录时间(二进制文件。使用 lastlog 命令查看)

/var/log/maillog

记录邮件信息

/var/log/messages

记录系统重要信息。如果系统出现问题,首先要检查的就是这个日志文件

/var/log/secure

记录验证和授权方面的信息,只要涉及账户和密码都会记录。如系统登录、ssh登录、su切换用户、sudo授权等。

/var/tun/ulmp

记录当前已经登录的用户信息。会随用户登录和注销不断变化,只记录当前登录用户信息。(要用 wwhousers 等命令查看)

/var/log/cpus/

记录打印信息的日志

/var/log/dmesg

记录系统在开机时内核自检的信息。(可使用 dmesg 命令直接查看内核自检信息)

/var/log/btmp

记录错误登录信息(二进制文件。使用 lastb 命令查看)

/var/log/wtmp

永久记录所有用户的登录、注销信息,也记录系统的启动、重启、关机时间(二进制文件。使用 last 命令查看)

1.2.1:日志服务

rsyslogd 服务作为后台进程,记录日志信息。

rsyslogd 服务记录日志的行为,可在 /etc/rsyslog.conf 文件中设置。

CentOS7.6 日志服务是 rsyslogd 服务,CentOS6.x 日志服务是 syslogd 服务。

rsyslogd 功能更强大。rsyslogd 的使用、日志文件的格式,和 syslogd 服务兼容。

由日志服务 rsyslogd 记录的日志文件,文件格式包含以下 4 列:

  1. 事件产生的时间
  2. 产生事件的服务器的主机名
  3. 产生事件的服务名或程序名
  4. 事件的具体信息

相关指令:

查询 rsyslogd 服务是否启动

ps aux | grep "rsyslog" | grep -v "grep"

查询 rsyslogd 服务的自启动状态

systemctl list-unit-files | grep rsyslog

1.2.2:配置文件

日志服务配置文件为 /etc/rsyslog.conf 。

编辑文件时的格式为:

*.*    存放日志文件

其中第一个 * 代表日志类型,第二个 * 代表日志级别。

日志类型

说明

auth

pam 产生的日志

authpriv

ssh、ftp 等登录信息的验证信息

corn

时间任务相关

kern

内核

lpr

打印

mail

邮件

mark(syslog)-rsyslog

服务内部的信息,时间标识

news

新闻组

user

用户程序产生的相关信息

uucp

unix to nuix copy 主机之间相关的通信

local 1-7

自定义的日志设备

日志级别

说明

debug

有调试信息的,日志通信最多

info

一般信息日志,最常用

notice

最具有重要性的普通条件的信息

warning

警告级别

err

错误级别,阻止某个功能或者模块不能正常工作的信息

crit

严重级别,阻止整个系统或者整个软件不能正常工作的信息

alert

需要立刻修改的信息

emerg

内核崩溃等重要信息

none

什么都不记录

注:从上到下,日志级别从低到高,记录信息从多到少。

1.2.3:自定义日志管理

了解以上原理后,可以自定义一个日志文件,将指定系统信息写入指定文件。

示例,添加 testtt.log 文件以记录所有系统信息。

只需在 /etc/rsyslog.conf 文件中添加以下语句即可:

# 自定义日志文件
*.*          /var/log/testtt.log

日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除。

1.3.1:轮替服务

为了进行日志轮替管理,使用 logrotate 服务

日志轮替可以在指定的时间备份日志,依赖于系统定时任务

在 /etc/cron.daily/ 目录,存在 logrotate 可执行文件。logrotate 服务就依赖这个文件。

可在 /etc/logrotate.conf 文件中配置轮替规则。

1.3.2:配置文件

/etc/logrotate.conf 为 logrotate 的全局配置文件。

除此以外,如果全局配置文件中存在以下语句

include /etc/logrotate.d

则也包含 /etc/logrotate.d/ 目录中所有的子配置文件。
子配置文件优先级更高。
为了便于管理也在此目录中为指定日志文件配置轮替规则。

参数说明:

参数

说明

daily

日志的轮替周期是每天

weekly

日志的轮替周期是每周

monthly

日志的轮替周期是每月

rotate 数字

保留的日志文件的个数。0 指没有备份

compress

日志轮替时,旧的日志进行压缩

create mode owner group

建立新日志,同时指定新日志的权限与所有者和所属组。

mail address

当日志轮替时,输出内容通过邮件发送到指定的邮件地址。

missingok

如果日志不存在,则忽略该日志的警告信息

notifempty

如果日志为空文件,则不进行日志轮替

minsize 大小

日志轮替的最小值。日志达到这个最小值才会轮替,否则就算时间达到也不轮替

size 大小

日志只有大于指定大小才进行日志轮替,而不是按照时间轮替。

dateext

使用日期作为日志轮替文件的后缀。

sharedscripts

在此关键字之后的脚本只执行一次。

prerotate/endscript

在日志轮替之前执行脚本命令。

postrotate/endscript

在日志轮替之后执行脚本命令。

1.3.3:自定义日志轮替

把日志加入日志轮替,有两种方法。

  • 第一种方法是直接在 /etc/logrotate.conf 配置文件中写入该日志的轮替策略。
  • 第二种方法是在 /etc/logrotate.d/ 目录中新建立该日志的轮替文件,在该轮替文件中写入轮替策略

因为 /etc/logrotate.d/ 目录中的文件都会被 “ include ” 到主配置文件中,所以能实现日志轮替。

推荐使用第二种方法,因为系统中需要轮替的日志非常多,如果全都写入主配置文件,不利于主配置文件的维护。

1.2.3:自定义日志管理 中 testtt.log 文件为例:

在 /etc/logrotate.d/ 下创建文件 testttlog 并编写如下内容即可:

/var/log/testtt.log
{
    missingok
    daily
    copytruncate
    rotate 7
    notifempty
}

Linux 中,有一部分日志写在内存里,还未写到文件中。叫做内存日志

由定义知,内存日志关机会清空。

使用 journalctl 可以查看内存日志,这里只列出几个常用指令。

查看最新3条日志

journalctl -n 3

查看指定时间段的日志

journalctl --since 19:00 --until 19:10

查看报错日志

journalctl -p err

查看日志详细内容

journalctl -o verbose

2:备份与恢复

实体机无法做快照,如果系统出现异常或者数据损坏,后果严重。

Linux 的备份和恢复有两种方式:

  • 把需要的文件(或者分区)用 tar 打包备份,需要恢复的时候,再解压开覆盖即可。
  • 使用 dump 和 restore 命令。

如果是重要的备份文件, 比如数据备份,建议将备份文件上传到其它服务器保存。

功能描述:用于备份文件系统。支持增量备份(也称差异备份,指备份 上次备份后 修改/增加过的文件)。

备份分区时,可以支持增量备份。如果备份文件或者目录,不支持增量备份。

可将备份记录存储到 /etc/dumpdates 文件。

基本语法

dump [选项] [-f] 备份文件 name

“ -f ” 指定备份文件,可不加。

“ 备份文件 ” 为指定备份后的保存。

“ name ” 为要备份的文件或目录。

常用选项

参数

说明

-数字

指定备份层级,范围 0 ~ 9。0 为最完整备份,会备份所有文件。(文件或目录只能使用 0 级别)

-j

调用 bzlib 库压缩备份文件,也就是将备份后的文件压缩成 bz2 格式。

-u

备份完毕之后将相应的信息存储到 /etc/dumpdates 文件留作记录。

示例:

# 显示备份的文件及其最后一次备份的时间、层级
dump -W

# 将 /boot/ 分区所有内容备份到 /opt/boot.bak0.bz2 文件,备份层级为 “ 0 ”
dump -0uj -f /opt/boot.bak0.bz2 /boot

# 将 /boot/ 分区备份到 /opt/boot.bak1.bz2 文件,备份层级为 “ 1 ”
dump -1uj -f /opt/boot.bak1.bz2 /boot

# 备份整个 /etc/ 目录到 /opt/etc.bak.bz2 文件
dump -0j -f /opt/etc.bak.bz2 /etc

# 查看备份时间文件
cat /etc/dumpdates

功能描述:用来还原由 dump 操作所备份下来的文件或整个文件系统(一个分区)。

基本语法

restore [模式] -f 备份文件

常用模式

参数

说明

-C

对比模式。将备份文件与相应的现有文件或目录进行对比。

-t

查看模式。看备份文件有哪些文件。

-r

还原模式。恢复到备份时状态。

-i

交互模式。在进行还原操作时,将依次询问用户。

2.1:dump 中示例为例:

# 比较备份文件和原文件的区别
restore -C -f boot.bak1.bz2

# 查看备份文件有哪些数据/文件
restore -t -f boot.bak0.bz2

# 将 /boot/ 恢复到第 1 次完全备份状态
restore -r -f /opt/boot.bak0.bz2

非鬼亦非仙,一曲桃花水。

——《生查子 · 独游雨岩》(宋)辛弃疾