Linux——日志管理

目录

一、基本介绍

二、系统常用的日志

三. 日志管理服务

rsyslog的核心工作原理

实现不同消息输入到指定日志文件

1、输入来源的多样性

2、规则与过滤条件

3、输出到指定文件

4、完整配置示例

查看rsyslog服务启动状态

1、使用 systemctl 命令      

2、使用 service 命令

3、使用ps命令

配置文件含义

1、编辑文件时的格式

2、日志类型

3、日志级别

日志格式

自定义日志服务

四. 日志轮替

1、基本介绍

2、工作原理

3、配置

 4、把自己的日志加入日志轮替


一. 基本介绍

        Linux 系统中的日志管理是一个重要的系统管理任务,它帮助管理员监控系统状态、排查问题和维护系统安全。Linux 日志管理主要涉及日志的生成、存储、轮转和分析。

二. 系统常用的日志

日志文件说明
/var/log/boot.log系统启动日志
/var/log/cron系统定时任务相关日志
/var/log/dmesg内核自检信息,通过dmesg命令查看
/var/log/maillog        邮件服务日志
/var/log/btmp错误登录信息,实用lastb命令查看
/var/log/wtmp用户登录和注销信息,实用last命令查看
/var/log/utmp当前登录用户信息,实用who命令查看
/var/log/lastlog用户最后一次登录时间,实用lastlog命令查看
/var/log/messages系统重要消息,记录大多数系统时间
/var/log/secure认证和授权信息,如用户登录、su命令等

示例:

1、查看 /var/log/messages 日志

tailf /var/log/messages
或者
cat /var/log/messages

 tailf 和 cat 区别

        cat 命令用于显示文件的内容。当你运行 cat /var/log/messages 时,会一次性读取并显示 messages文件中的全部内容不会实时更新,只会显示文件在命令执行时的内容。

        taif 命令是 tail 命令的一个变体,用于实时显示文件的末尾内容。当你运行 tailf /var/log/messages 时,会显示文件的最后几行(默认10行,可以通过 -n 选项指定显示的行数),并且会持续监视文件的变化,实时显示新增的内容。这使得 tailf 非常适合用于实时监控日志文件。

        如 tailf -n 20 /var/log/messages

三. 日志管理服务

日志管理服务既包括 rsyslogd 也包括 rsyslog。(先有的rsyslogd,然后在rsyslogd基础上发展而来的rsyslog)

  • rsyslogd 是 rsyslog 的守护进程,负责在后台运行并处理日志消息。
  • rsyslog 是一个完整的日志管理系统,包括守护进程 rsyslogd 和相关的配置文件、模块等。支持多线程和异步处理。                    

rsyslog 的配置文件通常位于 /etc/rsyslog.conf,并且可以包含多个子配置文件,通常位于 /etc/rsyslog.d/ 目录下 

rsyslog 是一个高性能的日志管理工具,用于收集、处理和分发系统日志。其核心功能是将不同来源的日志消息(如本地程序、远程主机、内核等)根据规则分类并写入指定的日志文件。

rsyslog的核心工作原理

其工作流程可以简化为以下步骤:

  1. 输入模块(Input Modules):接收来自不同来源的日志(如本地系统日志、远程UDP/TCP消息、文件等)
  2. 规则引擎(Rule Engine):根据预定义的过滤条件(filter)对日志进行匹配。
  3. 动作(Actions):对匹配的日志执行操作(如写入文件、转发到远程服务器等)。
  4. 输出模块(Output Modules):将处理后的日志发送到目标位置(文件、数据库、远程主机等)。

rsyslog架构图如下:

 详细流程:

1、收集日志消息

2、预处理

        将收集到的日志消息经过预处理模块进行初步处理,解决不同syslog协议实现间的差异。

3、存储到主队列

        处理完后的日志消息被存储到主队列中,确保日志消息的顺序和完整性。

4、过滤和分类

        主队列中的日志消息通过过滤模块进行筛选和分类。rsyslogd 支持使用RainerScript等内置脚本语言进行复杂的日志处理和过滤。

5、存储到执行队列

        过滤后的日志消息被存储到执行队列中,准备发送到指定的目标。

6、分发到目标

        执行队列中的日志消息通过输出模块发送到指定的目标,如本地文件、远程服务器、数据库等。

实现不同消息输入到指定日志文件

1、输入来源的多样性

rsyslog支持多种输入方式,通过加载不同的输入模块实现:

  • 本地日志:通过 imuxsock 模块读取 /dev/log 中的本地系统日志。
  • 内核日志:通过 imkmsg 模块读取 /proc/kmsg。
  • 远程日志:通过 imtcp(TCP) 或 imudp(UDP)模块监听端口(如514)接收网络日志。
  • 文件监控:通过 imfile 模块实时监控指定文件的变化(如跟踪应用程序的日志文件)。

配置示例:加载输入模块

# 加载模块
module(load="imuxsock")    # 本地系统日志
module(load="imtcp")       # TCP输入
module(load="imfile")      # 监控文件

2、规则与过滤条件

rsyslog使用过滤条件对日志进行分类,常见的过滤方式:

  • 按优先级(Priority):*.*(所有日志),*.info (所有info及以上级别)。
  • 按程序名(Programname):$programname == ' nginx' 。
  • 按主机/IP:$fromhost-ip == ' 192.168.1.100' 。
  • 按消息内容:$msg contains 'error' 。 

配置示例:定义规则 

# 将 Nginx 的日志写入单独文件
if $programname == 'nginx' then /var/log/nginx.log

# 将来自特定 IP 的日志写入远程主机目录
if $fromhost-ip == '192.168.1.100' then /var/log/remote/host100.log

# 将所有错误级别的日志写入 error.log
*.error /var/log/error.log

# 默认将所有日志写入 messages
*。* /var/log/messages

3、输出到指定文件

通过 omfile 模块将日志写入文件,支持动态文件名和目录创建:

# 按日期和主机名生成动态文件名
$template DailyLog, "/var/log/%$YEAR%-%$MONTH%-%$DAY%/%HOSTNAME%.log"
*.* ?DailyLog

# 如果目录不存在,自动创建
$CreateDirs on

4、完整配置示例

# 加载输入模块
module(load="imuxsock")    # 本地日志
module(load="imtcp" Port="514")    # 监听TCP 514端口

#定义模板(按照程序名和日期分目录)
$template AppLog, "/var/log/%programname%/%$YEAR%-%$MONTH%-%$DAY%.log"

#规则:将不同程序的日志写入不同文件
if $programename == 'nginx' then ?AppLog
if $programename == 'mysql' then ?AppLog
if $msg contains 'ssh' then /var/log/ssh.log

#默认规则
*.* /var/log/messages

查看rsyslog服务启动状态

1、使用 systemctl 命令      

systemctl status rsyslog

        如果服务正在运行,输出结果中会有 active(running)字样。反之,会有 inactive(dead)字样。

2、使用 service 命令

service rsyslog status

        如果服务正在运行,会显示服务的PID和其他相关信息。反之,会提示服务未找到或未启动。

3、使用ps命令

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

         (grep -v "grep" 表示过滤掉含grep的,-v选项表示反转)

配置文件含义

/etc/rsyslog.conf

1、编辑文件时的格式

*.*        存放日志文件

(第一个*代表日志类型,第二个*代表日志级别)

2、日志类型

authpam产生的日志
authprivssh、ftp等登录信息的验证信息
corn时间任务相关
kern内核
lpr打印
mail邮件

mark(syslog)-rsyslog

服务内部的信息,时间标识
news新闻组
user用户程序产生的相关信息
uucpunix to nuix  copy主机之间相关的通信
local 1-7自定义的日志设备

3、日志级别

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

        注意:从上到下,级别从低到高,记录信息越来越少。

日志格式

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

  • 事件产生的时间
  • 产生事件的服务器的主机名
  • 产生事件的服务名或程序名
  • 事件的具体信息              

/var/log/secure 日志如下图所示: 

自定义日志服务

在/etc/rsyslog.conf 中添加一个日志文件 /var/log/esther.log,当有事件发送时(比如sshd服务相关事件),该文件会接收到信息并保存。

演示重启、登录的情况,日志保存内容如下图所示:

四. 日志轮替

1、基本介绍

        日志轮替是一种日志管理机制,用于定期对日志文件进行处理,以防止日志文件占用过多磁盘空间,同时确保日志数据的完整性和可访问性。通过日志轮替,可以将旧的日志文件进行归档、压缩或删除,同时创建新的日志文件继续记录新的日志数据。

2、工作原理

日志轮替主要包括以下几个步骤:

  • 触发条件:日志轮替可以根据时间间隔(如每天、每周、每月)或日志文件大小(如达到一定字节数)来触发。当满足触发条件时,日志轮替过程开始。
  • 重命名旧日志文件:将当前的日志文件重命名为一个带有时间戳或其他标识的文件名,以便于后续的归档和管理。例如,/var/log/app.log 可能会被重命名为 /var/log/app.log.20240101。
  • 创建新日志文件:在重命名旧日志文件后,系统会创建一个新的日志文件,继续记录新的日志数据。
  • 压缩旧日志文件:为了节省磁盘空间,旧的日志文件可以被压缩。压缩通常在重命名之后进行,可以使用gzip等压缩工具。
  • 删除过期日志文件:根据日志轮替策略,保留一定数量的旧日志文件,超过这个数量的旧日志文件将被删除,以释放磁盘空间。

日志轮替之所以可以在指定的时间备份日志,是依赖系统定时任务。在 /etc/cron.daily/ 目录,就会发现这个目录中是有logrotate文件(可执行),logrotate 通过这个文件依赖定时任务执行的。

3、配置

日志轮替的配置文件通常位于 /etc/logrotate.conf,并且可以包含多个子配置文件,通常位于 /etc/logrotate.d 目录下。

# /etc/logrotate.conf
weekly
rotate 4
create
dateext
include /etc/logrotate.d
  •  weekly:每周对日志文件进行一次轮替
  • rotate 4:保留4个旧日志文件
  • create:在日志轮替后创建新的日志文件
  • dateext:使用日期作为日志轮替文件的后缀
  • include /etc/logrotate.d:包含 /etc/logrotate.d/ 目录中的所有子配置文件

dateext参数作用: 

        如果配置文件中没有“dateext”参数,日志文件就需要进行改名了。当第一次进行日志轮替时,当前的“secure”日志会自动改名为“secure.1”,然后新建“secure”日志,用来保存新的日志。当第二次进行日志轮替时,“secure.1"会自动改名为“secure.2",当前的"secure"日志会自动改名为“secure.1”,然后也会新建“secure”日志,以此类推。

Nginx日志轮替配置示例如下:

# /etc/logrotate.d/nginx
/var/log/nginx/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    create 640 root root
    postrotate
        killall -HUP nginx
    endscript
}
  • compress:压缩旧日志文件
  • missingok:如果日志文件不存在,则忽略该日志的警告信息
  • notifempty:如果日志文件为空,则不进行轮替
  • create 640 root root:在日志轮替后创建新的日志文件,权限为640,所有着为root,所属组为root
  • postrotate:在日志轮替后执行的命令,这里用于重新加载Nginx配置 

4、把自己的日志加入日志轮替

        方法一:在 /etc/logrotate.conf 配置文件中写入该日志的轮替策略

        方法二:在 /etc/logrotate.d/ 目录中新建该日志的轮替文件,在文件中写入正确的轮替策略。轮替文件都会被 “include” 到主配置文件中,所以也可以把日志加入轮替。

        推荐方法二,因为系统中需要轮替的日志非常多,如果全都直接写入 /etc/logrotate.conf配置文件,那么这个文件的可管理性就会非常差,不利于此文件的维护。

配置轮替文件一览

在logrotate文件夹下创建estherlog,内容如下,效果参考/var/log 下的boot.log情况

五. 查看内存日志

        journalctl        可以查看内存日志,这里我们看看常用的指令

journalctl查看全部
journalctl -n 3查看最新3条
journalctl --since 19:00 --until 19:10:10查看指定时间段的日志(可加日期)
journalctl -p err报错日志
journalctl -o verbose日志详细内容
journalctl_PID=1245 _COMM=sshd查看包含这些参数的日志
journalctl | grep sshd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值