Linux 日志管理介绍

Linux目前主要有两种日志服务,分别是传统的rsyslog和新添加的systemd-journal
rsyslog
作为传统的系统日志服务,会把所有收集到的日志都记录到/var/log目录下的各个日志文件中
systemd-journal -- 一些rsyslog无法收集的日志也会被journal记录到
作为改进型的日志管理服务,可以收集来自内核、系统启动阶段的日志、系统守护进程在启动和运行中的标准输出和>错误信息、还可以收集syslog服务的日志;该日志服务仅仅是把日志集中保存在单一结构化的日志文件中,然后用>日志查看工具,来对我们的日志进行分析

rsyslog日志管理

常见日志文件

系统日志文件
/var/log/wtmp 存放与启动与关机等相关的日志信息
/var/log/boot.log 存放系统开机自检事件及引导过程等日志信息
/var/log/messages 存放系统以及各个服务的运行和报错的日志信息
/var/log/secure 存放与系统安全相关的日志信息
/var/log/lastlog 存放用户登录成功的时间、终端名称、IP地址等日志信息
/var/log/btmp 存放用户登录失败的时间、终端名称、IP地址等日志信息
程序日志文件
/var/log/xfer.log ftp相关日志
/var/log/httpd/access_log httpd访问日志
/var/log/httpd/error_log httpd错误日志
/var/log/yum.log yum相关日志

日志级别

emerg 系统出现严重故障(内核崩溃等)
alert 需要立即修复的故障(数据库损坏等)
crit 危险较高的故障(硬盘损坏等导致系统运行失败等)
err 一般的危险故障(服务启动或运行失败)
warning 警告信息(服务参数或功能配置错误)
notice 一般无危险的故障
info 通用性消息,提示用户
debug 调试程序所产生的信息

日志类型

auth 用户认证相关的日志
authpriv 服务认证相关的日志
mail 邮件相关的日志
cron 时间任务相关的日志
kern 内核类型相关的日志
news 系统更新信息相关的日志
user 用户相关的日志

配置不同类型/级别的日志的保存路径

rsyslog的日志管理都依赖于配置文件的管理,此服务的配置文件保存在/etc/rsyslog.conf中(持久化存储,设备重启后日志不会消失)

vim /etc/rsyslog.conf
.info;mail.none;authpriv.none;cron.none /var/log/messages /var/log/messages包含>>任何日志(除了邮件日志、authpriv日志、cron日志的任何其它的info级别任务都在此文件下)
authpriv.
/var/log/secure 和用户认证有关的日志保存在此文件夹
mail.* /var/log/maillog 邮件日志保存的文件目录
cron.* /var/log/cron 和计划任务有关的日志保存的文件目录
uucp,news.crit /var/log/spooler 关键级别的日志保存的文件目录
local7.* /var/log/boot.log 和开机有关的日志保存的文件目录

.emerg :omusrmsg:* 任何严重级别的日志都会在终端显示( :omusrmsg:*)

为本机配置日志服务器

本机作为客户端,将本机的日志存放到日志服务器中

配置日志服务器的地址

vim /etc/rsyslog.recive
*.info;mail.none;authpriv.none;cron.none @日志服务器地址或者服务器名称
将除了邮件日志、authpriv日志、cron日志的任何其它的info级别任务都存放到此日志服务器
systemctl restart rsyslog.recive 重启日志服务
进行测试
进行客户端测试(在客户端下载软件包,监控日志服务器)
客户端上:yum -y install vsftpd
服务器上:tail -f /var/log/messages 查看rsyslog服务端/var/log/messages是否有变化

将本机配置为日志服务器

本机作为服务器,将其他设备产生的日志保存在本机上(在其他设备上配置日志服务器的地址为本机,然后本机上开启日志服务器的功能)

开启日志服务器功能
vim /etc/rsyslog.conf
module(load="imudp") 载入UDP输入模块(根据需要要在防火墙放行)
input(type="imudp" port="514") UDP Server监听在514端口
module(load="imtcp") 载入TCP输入模块
input(type="imtcp" port="514") TCP Server监听在514端口
systemctl restart rsyslog.recive 重新启动服务

开启防火墙
firewall-cmd --add-port=514/tcp --permanent
firewall-cmd --add-port=514/udp --permanent
firewall-cmd --reload 刷新防火墙策略
firewall-cmd --list-all 查看策略

监听514端口
lsof -i:514 开始监听514端口

安全配置rsyslog

通过为日志文件配置隐藏权限来实现

chattr +a /var/log/messages
给此文件加锁(追加锁,只可以向文件中添加数据,无法删除此文件,也无法清除文件)
lsattr /var/log/messages
查看文件的隐藏权限

手动发送syslog日志

logger命令可以发送消息到rsyslog服务;默认将优先级为notice的消息发送给user设备

logger -p local7.notice “Log entry created on host”
发送内容为““Log entry。。。”的优先级为local7.notice的日志到系统日志中
-p 指定日志优先级(格式为facility.level格式,默认级别为user.notice)
facility:日志的类型

user 用户相关日志(默认值)

uucp 由uucp生成的信息

local0~7 用来定义本地策略

auth 用户认证类型

authpriv 服务认证类型

cron 时间计划任务

daemon 系统守护进程

kern 内核相关的信息

lpr 打印服务相关的信息

mail 电子邮件相关的信息

news 来自新闻服务器的信息

syslog 由syslog生成的信息

level: 日志的级别(debug、info等8种级别)

systemd-journal日志管理
journal日志集中保存在单一结构化的日志文件中,默认日志文件存放在/run/log/journal中(非持久化存储),每次系统重启之后,都会清空日志

systemctl status systemd-journald.service 查看此日志服务的状态

journal日志配置文件
journal的配置文件为/etc/systemd/journald.conf

Storage=auto 在哪里存储日志文件
volatile 表示仅保存在内存中,也就是/run/log/journal目录中(按需自动创建目录)
persistent 表示优先保存在硬盘中,即保存在/var/log/journal目录中(按需自动创建)
auto 默认值,如果/var/log/journal目录存在,则保存在此目录;如果此目录不存在,则保存在/run/log/journal目录中(按需自动创建目录)
none 不保存日志

SystemMaxUse= 限制总的日志文件所占用的硬盘空间
SystemMaxFileSize= 限制单个日志文件所占用的硬盘空间
SystemMaxFiles=100 限制硬盘最多允许同时存在多少个日志文件

RuntimeMaxUse= 限制总的日志文件所占用的内存空间
RuntimeMaxFileSize= 限制单个日志文件所占用的内存空间
RuntimeMaxFiles=100 限制内存最多允许同时存在多少个日志文件

MaxFileSec= 日志滚动的时间间隔
MaxRetentionSec= 日志文件最大保留期限
单位为: year、month、week、day、h、m

ForwardToSyslog=no 接收日志后是否转发给传统的syslog守护进行
ForwardToKMsg=no 接收日志后是否转发给日和日志缓冲区(kmsg)
ForwardToConsole=no 接收日志后是否转发给系统控制台
ForwardToWall=yes 接收日志后是否将其作为警告信息发送给所有已登录用户

TTYPath=/dev/console 指定所使用的控制台(当ForwardToConsole=yes是使用)

MaxLevelStore=debug 设置记录到日志文件中的最高日志等级(默认为debug)
MaxLevelSyslog=debug 设置转发给syslog守护进程的最高日志等级
MaxLevelKMsg=notice 设置转发给内核日志缓冲区(kmsg)的最高日志等级
MaxLevelConsole=info 设置转发给系统控制台的最高日志等级
MaxLevelWall=emerg 设置作为警告信息发送给所有已登录用户的最高日志等级

journal日志分析

journal把日志集中保存在单一结构化的日志文件中,通过journalctl命令进行分析

journalctl -n 10 查看最新的10条日志
journalctl --since "2023-04-20 19:40" 显示此事件之后的日志
journalctl --until "2023-01-04 10:00:00" 显示此日志到此时间
journalctl -u httpd 查看指定服务(HTTPD)的日志
journalctl -f 监控日志
journalctl --disk-usage 查看日志的大小(临时配置)
journalctl --vacuum-size=1G 设置日志的存放大小(临时配置)
journalctl --vacuum-time=1h 设置日志在系统中存放的最长时间
journalctl -p err 按照错误级别的方式查看journal日志(日志级别同rsyslog日志)
journalctl -o 设定日志的显示方式
short 经典模式显示日志
verbose 显示日志的全部字节
export 适合传输和备份的二进制格式
json js格式显示

journalctl -b -1 查看上一次启动系统的日志(需要将journal更改为持久化存储)

对journal日志做持久化存储

journal日志持久化存储的存放位置为/var/log/journal

方式一

vim /etc/systemd/journald.conf
Storage=auto改为Storage=persistent

systemctl restart systemd-journald.service
方式二

vim /etc/systemd/journald.conf
Storage=auto

mkdir /var/log/journal 建立日志存放的目录
chgrp systemd-journal /var/log/journal 修改目录的所有组
chmod 2775 /var/log/journal 修改目录的权限
systemctl restart systemd-journald.service

日志文件轮转

通过logrotate 工具进行日志文件轮转,保证操作系统的稳定性,避免系统日志过大导致性能低下、空间不足以及日志信息丢失等问题

logrotate的大致工作过程

查找所需要的轮转的日志文件
检查此日志文件是否超过大小限制
如果超过大小限制,则使用相应的压缩方式对原始的日志进行压缩
根据需要,可以删除较早的日志或日志副本
重置日志文件,继续激励新的日志文件
日志轮转配置文件

logrotate主要的配置文件为/etc/logrotate.conf
vim /etc/logrotate.confweekly 按照周轮替
rotate 4 每4周轮替一次
create 按照创建新的日志文件进行轮转
dateext 对日期作为日志文件的后缀
compress 对日志文件做压缩
include /etc/logrotate.d 对包含在/etc/logrotate.d目录中的文件做轮转

例如:如果在2022-01-02轮转,则旧的/etc/logrotate.d/dnf日志文件就变为/etc/logrotate.d/dnf-2022010

posted @ 2023-12-24 19:26  星火撩原  阅读(197)  评论(0编辑  收藏  举报