14、日志管理
00 分钟
2024-6-25
Created
Jun 20, 2024 12:41 AM
Tags
日志管理
# CentOS7中,系统日志由两个服务负责处理:systemd-journald和rsyslog
一、常见日志文件
(一)概述
/var/log目录下存放保管着一些由rsyslog维护的特定系统与服务日志文件。
(二)常见日志文件列举
日志文件 用途
/var/log/message 记录大多数系统消息的日志文件
/var/log/secure 记录安全和身份验证相关消息与登录失败的日志文件
/var/log/maillog 记录与邮件服务器相关消息的日志文件
/var/log/cron 记录定期计划任务相关信息的日志文件
/var/log/boot.log 记录系统启动相关消息的日志文件
/var/log/dmesg 记录硬件方面系统启动相关消息的日志文件
/var/log/wtmp 记录每个用户的登录次数和持续时间的二进制日志文件
/var/log/btmp 记录错误登录系统的二进制日志文件
—·拓展———————————————————————
·查看哪个IP地址经常暴力破解系统用户密码
grep Failed /var/log/secure # 分行切割
grep Failed /var/log/secure|awk '{print $11}'|uniq -c # 分列截取
5 192.168.10.1
# awk '{print $11}' → 以空格或Tab做为分隔符,打印第11列的数据
# uniq命令 → 用于报告或忽略文件中的重复行
# -c或--count → 在每列旁边显示该行重复出现的次数
·添加防火墙规则拒绝IP # 目前仅了解
iptables -A INPUT -i ens33 -s 192.168.10.1(暴力破解地址) -j DROP
———————————————————————————
# 查看/var/log/wtmp日志文件可用last命令 → last -f /var/log/wtmp
查看/var/log/btmp可用lastb命令
—·Q&A———————————————————————
- Q:随着运行时间增加,日志文件变得过大。清空日志可选方式有:
·方法1: > /var/log/btmp # 把空重定向到该文件
·方法2: rm -rf /var/log/btmp && touch /var/log/btmp
二者的区别?
  • A:前者不会改变Inode号,后者会改变Inode号。
若更改Inode号,需重启rsyslog服务。
———————————————————————————
二、日志的级别与类别
# 在rsyslog中,日志由“类别”和“级别”组成。
(一)日志的类别
kern
内核产生的信息
lpr
打印系统产生的信息
cron
定时计划任务相关信息
mail
邮件相关信息
syslog
日志服务本身相关信息
news
新闻系统相关信息
authpriv
安全认证相关信息
local0~7
自定义的日志设备
local0~local7
八个系统保留,程序使用或者是用户自定义
(二)日志的级别 # 7~0(轻→重)
编码
优先级
严重性
7
debug
信息,对开发人员调试应用程序有用,在操作过程中无用
6
info
正常的操作信息 比如收集报告,测量吞吐量等
5
notice
注意,正常但重要的事件
4
warning
警告,提示如果不采取行动,将会发生错误 比如文件系统使用90%
3
err
错误,阻止某个模块或程序的功能不能正常使用
2
crit
关键的错误,已经影响了整个系统或软件不能正常工作的信息
1
alert
警报,需要立刻修改的信息
0
emerg
紧急,内核崩溃等严重信息
三、rsyslog服务
(一)查看配置文件
所在路径→ vim /etc/rsyslog.conf
#$UDPServerRun 514 → # 允许514端口接收使用UDP协议转发过来的日志
#$InputTCPServerRun 514 → # 允许514端口接收使用TCP协议转发过来的日志
# Include all config files in /etc/rsyslog.d/ → # 添加此路径下的自定义规则
$IncludeConfig /etc/rsyslog.d/*.conf
  • .info;mail.none;authpriv.none;cron.none /var/log/messages
# 除mail、authpriv、cron三个类别外所有类别、info级别以上消息记录到messages日志
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# 安全认证相关消息记录到secure日志
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# 邮件相关消息记录到maillog日志,“-”表示异步,先存入内存,一定大小后存入硬盘中
# Log cron stuff
cron.* /var/log/cron
# 定时计划任务相关消息记录到cron日志
# Everybody gets emergency messages
  • .emerg :omusrmsg:*
# 任何内核崩溃的消息广播输出到每一个终端,“:”表示输出
# Save boot messages also to boot.log
local7.* /var/log/boot.log
# 开机显示的信息存放到boot.log日志
(二)配置文件内容规则
. info
记录大于等于info级别的消息
. =级别
记录等于某个级别的消息
e.g.→ . =info 只记录info级别的日志
. !级别
除了某个级别外,记录所有的级别信息
e.g.→ !err 除了err外记录所有
.none
排除.前的类别
!改完配置文件之后,需要重启服务
systemctl restart rsyslog.service # CentOS7中“.service”会被补齐
—·Q&A———————————————————————
- Q:如何防止日志被删除?
  • A:可为日志文件添加a的特殊属性。
e.g. ① chattr +a /var/log/all.log ② lsattr /var/log/all.log
③ systemctl restart rsyslog # 重启rsyslog服务
———————————————————————————
四、日志切割轮替
(一)相关概念
日志切割 将大到无法打开的长日志文件切割成可以打开的特定大小。
日志轮替 将旧日志文件移动并改名留存,同时建立新的空日志文件。当旧日志文件数量超出保存范围后就进行删除。
(二)logrotate日志切割轮替工具 # 系统中的默认工具
2.1 logrotate配置文件
查看配置文件→ vim /etc/logrotate.conf
可用参数:
monthly
轮循。
# 其它可用值为' daily ',' weekly '或者' yearly '。
size
只有当日志文件增长到指定大小时才会进行切割轮替。
# 若此选项和时间轮替冲突那么最后一个指定的轮替条件生效。
dateext
在日志切割轮替后,旧日志文件以日期为文件后缀名
nodateext
在日志轮替切割后,旧日志文件不以日期为后缀名
compress
在轮循任务完成后,已轮循的归档将使用gzip进行压缩
delaycompress
延迟打包,指不将最近一次的切割目录归档压缩。
# 总与 compress 选项一起用
missingok
在日志轮循期间,任何错误将被忽略
# 如"文件无法找到"之类的错误
notifempty
如果日志文件为,轮循不会进行。
create 644 root root
以指定的权限、属主、属组创建全新的日志文件。
sharedscripts
在此关键字之后的脚本执行一次。
prerotate/endscript
在日志轮替之前执行脚本命令。
# endscript标识prerotate脚本结束
postrotate/endscript
其它所有指令完成后,执行postrotate和endscript内命令。
# 全局规则↓
# rotate log files weekly
weekly → # weekly每周执行切割轮替
# keep 4 weeks worth of backlogs
rotate 4 → # 日志切分后历史文件最多保存离现在最近的4份
# create new (empty) log files after rotating old ones
create → # 指定新创建的文件权限与属主属组
# use date as a suffix of the rotated file
dateext → # 切割保存的日志使用日期为后缀
# uncomment this if you want your log files compressed
#compress → # 是否压缩切割保存的日志
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d → # 包括此路径下的自定义规则
# 局部规则↓
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp { → # 指定的日志文件名称与路径
monthly → # 每月轮替一次
create 0664 root utmp → # 设置wtmp日志文件的权限、属主、属组
minsize 1M → # 日志轮替的最小值,轮替时间到后还需日志达到此最小值才轮替
rotate 1 → # 日志切分轮替后,除当前使用日志外历史文件最多保存1份
}
/var/log/btmp {
missingok → # 若日志文件丢失将不报错
monthly
create 0600 root utmp
rotate 1
}
2.2 logrotate命令
# 若此命令不添加子选项,则会按照配置文件中的条件进行日志轮替。
格式:logrotate [选项] 配置文件名
选项:-v 显示日志轮替过程
-f 强制进行日志轮替
2.3 自定义日志的切割轮替
编辑自定义规则 → vim /etc/logrotate.d/all
重启rsyslog服务 → systemctl restart rsyslog
预演(不实际轮循) → logrotate -d /etc/logrotate.d/sshd
强制轮循 → logrotate -vf /etc/logrotate.d/sshd
(三)日志的切割与合并
3.1 日志切割
split命令
作用:文件拆分
格式:split [选项] [输出文件大小] [文件名]
选项:-a 指定输出文件名的后缀长度,默认为2个字符。# xaa
  • d 指定输出文件名的后缀长度用数字代替。
  • b 指定输出文件的大小,可用k,m,g等表示。
3.2 日志合并
cat命令
格式:cat /拆分文件1..../拆分文件n > [合并文件]
五、配置远程日志服务器
# 实现日志集中管理
(一)配置server端
① 编辑配置文件允许监听tcp协议514端口 # 把注释去掉
vim /etc/rsyslog.conf
19 $ModLoad imtcp
20 $InputTCPServerRun 514
② 重启rsyslog服务:systemctl restart rsyslog
③ 查看服务监听的状态:netstat -anlpt| grep 514
④ 在服务端关闭selinux和防火墙:
setenforce 0
systemctl stop firewalld、systemctl status firewalld
iptables -F
(二)配置client客户端
① 修改主机名
hostnamectl set-hostname [修改的主机名]
② 编辑配置文件
vim /etc/rsyslog.conf
  • .* @@192.168.17.128:514 # 指发送至此IP对应此端口号
# 一个@为UDP协议,两个@为TCP协议
③ 重启rsyslog服务
systemctl restart rsyslog.service
上一篇
Linux 基础知识 往期汇总
下一篇
<K8S> vol. 01 - kubernetes 组件