Liunx日志轮转

2024-05-11 06:12
文章标签 日志 轮转 liunx

本文主要是介绍Liunx日志轮转,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一.日志的重要性

二、日志系统rsyslog

常见的日志文件(系统、进程、应用程序)

日志优先级

三、logrotate日志轮转

什么是日志轮转?

logrotate 的工作方式

logrotate 配置文件

logrotate命令


 

一.日志的重要性

Linux日志文件对于理解和解决系统中出现的问题非常重要。它们可以提供关于系统活动和问题的关键信息。以下是Linux日志的一些重要性:

1. 问题诊断: 当系统出现问题时,日志文件通常是我们首先检查的地方。它们可能会提供关于问题产生的原因及其发生时间的详细信息。有了这些信息,我们就可以更有效地定位和解决问题。

2. 监控: 日志文件可以用来监控系统的健康状态和性能。系统管理员可以配置日志分析工具,以定期检查日志并对异常活动进行通知。

3. 安全审计: 对于需要遵守某些统一的审计要求的公司来说,日志文件是非常重要的。日志可以提供证据来证明公司已遵守这些规定。此外,如果出现安全事故,日志文件可以帮助调查其原因并确定涉及的实体。

4. 合规性: 在许多行业中,正常运行的日志记录是必须的合规要求。例如,金融、医疗保健和教育行业等,都需遵守严格的数据保护和隐私法规。

5. 故障预警: 日志通常可以提前展示一些潜在的系统问题,比如磁盘空间不足、服务冲突、网络连接问题等,及时的处理这些预警信息可以避免问题的发生。

二、日志系统rsyslog

日志配置主文件:/etc/rsyslog.conf  

rsyslogd 是 rsyslog 的守护进程,负责处理来自各种来源的日志消息。它可以从本地系统、网络接口或其他进程中获取日志,并根据配置文件的指示将日志输出到指定的位置。这个位置可以是本地文件、远程服务器、数据库、消息队列等。rsyslogd:绝大部分日志记录,和系统操作有关,安全,认证sshd,su,计划任务at,cron... 

但像我们安装的一些应用软件httpd/nginx/mysql等,它们可以自己的方式记录日志,不一定通过系统的通用日志系统。

常见的日志文件(系统、进程、应用程序)

tail -f /var/log/messages		        	#动态查看日志文件的尾部,系统主日志文件tail -f /var/log/secure		            #记录认证、安全的日志tail /var/log/maillog			            #跟邮件postfix相关tail /var/log/cron			                #crond、at进程产生的日志tail /var/log/dmesg			              	#和系统启动相关tail /var/log/yum.log                       #yum的日志tail -f /var/log/mysqld.log                 #MySQL日志tail /var/log/xferlog                  		#和访问FTP服务器相关/var/log/syslog: 全面记录系统信息的日志文件,包括启动过程中的信息以及系统运行过程中产生的各种信息。/var/log/kern.log: 这里记录了与Linux内核相关的所有信息。如果你对内核错误信息感兴趣,那么就可以在这里找到。/var/log/boot.log: 这个日志文件包含了系统启动信息。如果遇到系统启动问题,这个文件会是一个很好的参考。/var/log/auth.log: 这个日志文件包含了所有与系统认证相关的日志信息,包括所有尝试(成功或失败)登入系统的记录。/var/log/dmesg: 此文件记录了系统在启动过程中关于硬件和内核启动进程的信息。

lastlastlog 是两个常见的命令和文件,通常用于查看用户登录相关的信息。

#last 命令用于显示系统上最近的登录和注销记录。它读取 /var/log/wtmp 文件,显示用户登录的时间、终端、源IP地址(如果远程登录)以及登录持续时间等信息。
[root@localhost mail]# last
root     pts/0        192.168.226.1    Fri May 10 16:16   still logged in   
reboot   system boot  3.10.0-1160.el7. Fri May 10 07:54 - 19:06  (11:12)    
root     pts/0        192.168.226.1    Thu May  9 20:21 - down   (05:38)    
root     pts/1        192.168.226.1    Thu May  9 01:15 - 20:51  (19:35)    
root     pts/0        192.168.226.1    Wed May  8 17:44 - 03:19  (09:34)    
reboot   system boot  3.10.0-1160.el7. Wed May  8 17:44 - 02:00 (1+08:15)   
root     pts/0        192.168.226.1    Wed May  8 15:04 - crash  (02:40)    
reboot   system boot  3.10.0-1160.el7. Wed May  8 15:01 - 02:00 (1+10:58)   
root     pts/1        192.168.226.1    Tue Apr 30 15:39 - crash (7+23:21)   
root     pts/0        192.168.226.1    Tue Apr 30 15:38 - crash (7+23:22)   
reboot   system boot  3.10.0-1160.el7. Tue Apr 30 15:38 - 02:00 (9+10:21)   
root     pts/1        192.168.226.1    Tue Apr 30 15:38 - crash  (00:00)    
root     pts/0        192.168.226.1    Tue Apr 30 15:35 - crash  (00:03)    
root     tty1                          Tue Apr 30 23:35 - 15:38  (-7:-56)   
reboot   system boot  3.10.0-1160.el7. Tue Apr 30 23:35 - 02:00 (9+02:24)   wtmp begins Tue Apr 30 23:35:07 2024#lastlog 命令显示系统上所有用户的最后登录时间和其他相关信息。它读取 /var/log/lastlog 文件,显示用户的用户名、最后登录的时间、登录的终端、登录的IP地址等。
[root@localhost mail]# lastlog
用户名           端口     来自             最后登陆时间
root             pts/0    192.168.226.1    五 5月 10 16:16:47 +0800 2024
bin                                        **从未登录过**
daemon                                     **从未登录过**
adm                                        **从未登录过**
lp                                         **从未登录过**
sync                                       **从未登录过**
shutdown                                   **从未登录过**
halt                                       **从未登录过**
mail                                       **从未登录过**
operator                                   **从未登录过**
games                                      **从未登录过**
ftp                                        **从未登录过**
nobody                                     **从未登录过**
systemd-network                            **从未登录过**
dbus                                       **从未登录过**
polkitd                                    **从未登录过**
sshd                                       **从未登录过**
postfix                                    **从未登录过**
chrony                                     **从未登录过**
ntp                                        **从未登录过**
apache                                     **从未登录过**
nginx                                      **从未登录过**
lzz                                        **从未登录过**
[root@localhost mail]# 

日志优先级

日志优先级是用于表示日志消息的重要性或紧急程度的标准。在计算机系统中,日志优先级被用来区分系统、应用程序或服务的不同类型的事件,从最紧急的错误到最一般的信息。了解日志优先级有助于监控、调试和排查问题。

常见的日志优先级

在 Unix 和 Linux 系统中,日志优先级通常使用 syslog 标准来定义。syslog 体系结构提供了标准的日志记录框架,包括以下常见的日志优先级:

  • Emergency(紧急)

    • 优先级 0。这是最高优先级,表示系统不可用或严重故障。这种日志通常意味着系统需要立即采取行动。
  • Alert(警告)

    • 优先级 1。需要立即采取行动以防止系统损坏或数据丢失。可能包括严重的硬件或软件问题。
  • Critical(关键)

    • 优先级 2。表示关键错误,可能影响系统的稳定性。通常需要尽快解决。
  • Error(错误)

    • 优先级 3。表示系统或应用程序遇到错误。可能导致部分功能失效或影响用户体验。
  • Warning(警告)

    • 优先级 4。指示潜在问题或预警,但不一定会导致故障。可以用来标识可能需要关注的情况。
  • Notice(通知)

    • 优先级 5。用于表示一般性的事件,不是错误或警告,但可能值得注意。通常用于记录系统状态的变化。
  • Informational(信息)

    • 优先级 6。用于记录系统或应用程序的常规操作信息。例如,用户登录/注销或服务启动/停止。
  • Debug(调试)

    • 优先级 7。这是最低优先级,用于记录调试信息,帮助开发人员或系统管理员进行问题诊断。

三、logrotate日志轮转

logrotate 是一个用于管理日志文件的工具,在 Linux 和 Unix 系统中非常常见。它可以定期轮转日志文件,以防止日志文件过大,并根据配置压缩、删除或归档旧日志。轮转的频率、保留的日志数量等都可以通过配置文件控制。以下是关于 logrotate 的详细说明。

什么是日志轮转?

日志轮转是一种管理日志文件的机制,自动切日志,旨在解决日志文件不断增长的问题。通过日志轮转,可以将日志文件分割、压缩、备份或删除,以保持日志目录的整洁和可管理性。

注:可以针对任何日志文件(rsyslog 日志、Nginx访问或错误日志...) 

1. 如果没有日志轮转,日志文件会越来越大
2. 将丢弃系统中最旧的日志文件,以节省空间 
3. logrotate本身不是系统守护进程,它是通过计划任务crond每天执行 

logrotate 的工作方式

logrotate 通过配置文件定义轮转策略,然后根据这些策略定期执行日志轮转。logrotate 的主要功能包括:

  • 按时间轮转:根据日志文件的创建时间或上次轮转时间,按天、周、月等进行轮转。
  • 按大小轮转:当日志文件达到指定大小时进行轮转。
  • 压缩日志:在轮转后,可以压缩旧的日志文件,减少磁盘空间的使用。
  • 限制日志数量:保留指定数量的旧日志文件,超出数量的日志文件会被删除。
  • 执行自定义操作:在轮转前后执行自定义命令,如重新启动服务、发送通知等。

logrotate 配置文件

logrotate 的配置文件通常位于 /etc/logrotate.conf具体的应用程序日志轮转配置在 /etc/logrotate.d/ 目录中。配置文件定义了日志轮转的策略。以下是一个典型的 logrotate 配置示例:

# 每天进行轮转
daily# 只保留 7 个旧日志文件
rotate 7# 如果日志文件为空,不进行轮转
notifempty# 轮转后是否压缩日志文件
compress# 轮转前后执行的自定义命令
prerotate# 在轮转前执行的命令echo "About to rotate logs..."
endscriptpostrotate# 在轮转后执行的命令echo "Logs rotated."
endscript

基本参数

  • daily/weekly/monthly:

    • 指定日志轮转的频率。daily 表示每天轮转,weekly 表示每周轮转,monthly 表示每月轮转。
  • size <大小>:

    • 当日志文件达到指定大小时进行轮转。可以用 K、M、G 指定大小,分别代表千字节、兆字节、千兆字节。
    • size
      触发分割的条件是:1.日志大小达到这个值,和时间周期没有关系。

    • minsize
      触发分割的条件是:1.时间周期到了,2.日志大小达到这个值;两个条件都要满足。

    • maxsize
      触发分割的条件是:1.时间周期到了,2. 日志大小大于这个值;两个条件任何一个满足。
  • rotate <数量>:

    • 指定要保留的旧日志文件数量。超过这个数量的旧日志文件会被删除。

文件处理参数

  • compress/nocompress:

    • 是否在轮转后压缩旧日志文件。compress 表示启用压缩,nocompress 表示不压缩。
  • compresscmd <命令>:

    • 指定用于压缩的命令,默认是 gzip。可以更改为 bzip2xz 等。
  • compressext <扩展名>:

    • 指定压缩后的文件扩展名。默认是 .gz
  • compressoptions <选项>:

    • 指定用于压缩的选项。例如,设定 gzip 的压缩级别。
  • create <权限> <用户> <组>:

    • 在轮转后创建新的日志文件,并指定文件的权限、所有者和组。例如,create 0644 root root

条件参数

  • missingok:

    • 如果日志文件不存在,logrotate 不会报错。
  • ifempty/notifempty:

    • 指定日志文件为空时的行为。ifempty 表示即使日志文件为空也进行轮转,notifempty 表示日志文件为空则不进行轮转。
  • sharedscripts:

    • 指定是否在一组日志轮转中共享 prerotatepostrotate 脚本。如果是共享的,则每组脚本只执行一次。

自定义脚本参数

  • prerotate/postrotate:

    • 在日志轮转前或轮转后执行自定义脚本。例如,可以在 prerotate 中停止服务,在 postrotate 中重启服务。
    prerotate 
    # 轮转前执行的操作 
    echo "Before rotating logs..." 
    endscript #参数命令postrotate 
    # 轮转后执行的操作 
    echo "After rotating logs..." 
    endscript

错误处理参数

  • error <错误处理命令>:
    • logrotate 出现错误时执行的命令。可以用来记录错误或发送通知。

其他参数

  • include <文件路径>:

    • 包含另一个配置文件。用于将不同的日志配置分开管理。
  • olddir <目录>:

    • 将轮转后的旧日志文件移到指定目录。

如何使用这些参数

 在 /etc/logrotate.conf 文件中,或 /etc/logrotate.d/ 目录中的配置文件中,可以使用这些参数来定义日志轮转策略。通常会根据日志的类型、大小和频率来配置不同的策略。

原/etc/logrotate.conf 解释:

[root@linux-server ~]# vim /etc/logrotate.conf	
weekly     			#轮转的周期,一周轮转,单位有年,月,日 
rotate 4			#保留4份 
create				#轮转后创建新文件 
dateext             #使用日期作为后缀 
#compress			#日志轮替时,旧的日志进行压缩 
include /etc/logrotate.d  			 #包含该目录下的配置文件,会引用该目录下面配置的文件/var/log/wtmp {			          	#对该日志文件设置轮转的方法    monthly			                #一月轮转一次  minsize 1M			            	#最小达到1M才轮转,否则就算时间到了也不轮转create 0664 root utmp		        #轮转后创建新文件,并设置权限   rotate 2			                #保留2份 
}/var/log/btmp {    missingok			              	#丢失不提示    monthly			                create 0600 root utmp		        rotate 1			                
} 

 配置别的日志示例:

例1
[root@linux-server ~]# vim /etc/logrotate.conf# 全局配置
daily
rotate 7
compress# 特定日志文件的配置
/var/log/nginx/access.log {size 100Mcreate 0644 nginx nginxpostrotatesystemctl reload nginxendscript
}#每天轮转日志,保留 7 个旧日志文件,并启用压缩。
#当 /var/log/nginx/access.log 超过 100MB 时,进行轮转。
#轮转后创建新的日志文件,权限为 0644,所有者和组分别为 nginx。
#轮转后重新加载 Nginx 服务。

 特定的服务的日志位置需要在/etc/logrotate.d/目录下

例2
[root@linux-server ~]# vim /etc/logrotate.d/newbee/var/log/newbee{              # 指定日志的位置
prerotate                     # 在日志轮转前要做的事chattr -a /var/log/newbee # 取消隐藏权限a
endscript                     # 结束脚本# 日期可以选用的有:weekly daily monthly yearly
dateext                       # 以日期为后缀
daily                         # 轮转周期为 1天
rotate 5                      # 保留5份日志
create 0644 root root         # 设置权限 属主属组 
compress                      # 设置压缩postrotate                    # 轮转之后要做的事情chattr +a /var/log/newbee # 再次添加a权限endscript                     # 结束脚本
}                             #注意花括号不要少

例3:
[root@linux-server ~]# vim /etc/logrotate.d/yum/var/log/yum.log {
# 针对 /var/log/yum.log 文件的日志轮转配置
#如果日志文件不存在,不会报错或警告missingoknotifempty
# 如果日志文件为空,则不会进行轮转size 30k
#当日志文件大小达到 30 KB 时,就会触发轮转daily
#每天轮转rotate 3
#只保留 3 个轮转后的旧日志文件create 0644 root root
#在轮转后创建新的日志文件,权限设为 0644,所有者和组为 root
}测试:
#/usr/sbin/logrotate就是logrotate的命令位置,这个位置就是代表logrotate,他俩等价,这个知识点要记住
[root@linux-server ~]# /usr/sbin/logrotate /etc/logrotate.conf	  #手动轮转
[root@localhost logrotate.d]# ls /var/log/yum*
/var/log/yum.log  /var/log/yum.log-20240510[root@localhost logrotate.d]# grep yum /var/lib/logrotate/logrotate.status  #查看记录所有日志文件最近轮转的时间
"/var/log/yum.log" 2024-5-10-19:51:31

logrotate命令

命令具有多种参数,用于配置和控制日志轮转行为。以下是常用的 logrotate 命令参数及其详细说明:

基本参数

  • -c / --config <文件路径>

    • 指定 logrotate 使用的配置文件。如果不指定,默认是 /etc/logrotate.conf
  • -f / --force

    • 强制执行日志轮转,即使没有满足轮转条件。这在测试和强制轮转时很有用。
  • -d / --debug

    • 调试模式,不实际执行日志轮转,但会输出详细的调试信息。用于检查 logrotate 配置和潜在的问题。
  • -v / --verbose

    • 输出更多的详细信息,显示 logrotate 在执行时的过程和细节。适用于调试和检查轮转结果。
  • -s / --state <文件路径>

    • 指定状态文件,用于记录日志轮转的状态和时间戳。默认是 /var/lib/logrotate/status。改变这个路径可能用于在不同环境中记录状态。

其他参数

  • -l / --log <文件路径>

    • 指定 logrotate 的日志文件路径。这个日志文件记录 logrotate 本身的活动,而不是被轮转的日志。
  • -t / --test

    • 测试模式,类似于 --debug,但输出的内容更简洁。这个模式下,不实际执行轮转。
  • -m / --mail <邮件地址>

    • 在日志轮转后,将日志发送到指定的邮件地址。这个功能用于将日志信息发送到指定收件人。
  • -L / --list

    • 列出 logrotate 当前要处理的日志文件列表。这个选项可以帮助你查看哪些文件会被轮转。
  • --usage

    • 显示 logrotate 的使用说明和参数列表。

这篇关于Liunx日志轮转的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/978719

相关文章

flume系列之:查看flume系统日志、查看统计flume日志类型、查看flume日志

遍历指定目录下多个文件查找指定内容 服务器系统日志会记录flume相关日志 cat /var/log/messages |grep -i oom 查找系统日志中关于flume的指定日志 import osdef search_string_in_files(directory, search_string):count = 0

我在移动打工的日志

客户:给我搞一下录音 我:不会。不在服务范围。 客户:是不想吧 我:笑嘻嘻(气笑) 客户:小姑娘明明会,却欺负老人 我:笑嘻嘻 客户:那我交话费 我:手机号 客户:给我搞录音 我:不会。不懂。没搞过。 客户:那我交话费 我:手机号。这是电信的啊!!我这是中国移动!! 客户:我不管,我要充话费,充话费是你们的 我:可是这是移动!!中国移动!! 客户:我这是手机号 我:那又如何,这是移动!你是电信!!

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录 在深度学习项目中,目标检测是一项重要的任务。本文将详细介绍如何使用Detectron2进行目标检测模型的复现训练,涵盖训练数据准备、训练命令、训练日志分析、训练指标以及训练输出目录的各个文件及其作用。特别地,我们将演示在训练过程中出现中断后,如何使用 resume 功能继续训练,并将我们复现的模型与Model Zoo中的

SSM项目使用AOP技术进行日志记录

本步骤只记录完成切面所需的必要代码 本人开发中遇到的问题: 切面一直切不进去,最后发现需要在springMVC的核心配置文件中中开启注解驱动才可以,只在spring的核心配置文件中开启是不会在web项目中生效的。 之后按照下面的代码进行配置,然后前端在访问controller层中的路径时即可观察到日志已经被正常记录到数据库,代码中有部分注释,看不懂的可以参照注释。接下来进入正题 1、导入m

多数据源的事务处理总是打印很多无用的log日志

之前做了一个项目,需要用到多数据源以及事务处理,在使用事务处理,服务器总是打印很多关于事务处理的log日志(com.atomikos.logging.Slf4jLogger),但是我们根本不会用到这些log日志,反而使得查询一些有用的log日志变得困难。那要如何屏蔽这些log日志呢? 之前的项目是提高项目打印log日志的级别,后来觉得这样治标不治本。 现在有一个更好的方法: 我使用的是log

android两种日志获取log4j

android   log4j 加载日志使用方法; 先上图: 有两种方式: 1:直接使用架包 加载(两个都要使用); 架包:android-logging-log4j-1.0.3.jar 、log4j-1.2.15.jar  (说明:也可以使用架包:log4j-1.2.17.jar)  2:对架包输入日志的二次封装使用; 1:直接使用 log4j 日志框架获取日志信息: A:配置 日志 文

Unity Post Process Unity后处理学习日志

Unity Post Process Unity后处理学习日志 在现代游戏开发中,后处理(Post Processing)技术已经成为提升游戏画面质量的关键工具。Unity的后处理栈(Post Processing Stack)是一个强大的插件,它允许开发者为游戏场景添加各种视觉效果,如景深、色彩校正、辉光、模糊等。这些效果不仅能够增强游戏的视觉吸引力,还能帮助传达特定的情感和氛围。 文档

机械学习—零基础学习日志(概率论总笔记5)

引言——“黑天鹅” 要获得95%以上置信度的统计结果,需要被统计的对象出现上千次,但是如果整个样本只有几千字,被统计的对象能出现几次就不错了。这样得到的数据可能和真实的概率相差很远。怎么避免“黑天鹅”? 古德-图灵折扣估计法 在词语统计中,有点词语虽然是出现0次,但是实际的出现概率并不是永远不可能的零。 那需要把一些概率转移给到这些词语。 古德的做法实际上就是把出现1次的单词的总量,给了

如何使用Selenium捕获控制台日志

Selenium是一个流行的开源工具,用于自动化Web浏览器。其中一个关键功能是能够与浏览器的开发者控制台交互。本文将向您展示如何在Selenium中使用Java获取控制台日志。这些日志对于调试和解决Selenium脚本的问题非常有用。 如何查看任何网页的控制台日志 首先,打开浏览器的开发者控制台。在大多数浏览器中,您可以通过右键点击页面并选择“检查”来做到这一点。我们将在我们的测试网站——h

ELK+Spring Cloud搭建分布式日志中心

ELK+Spring Cloud搭建分布式日志中心 1.ELK简介2.资源包下载3.Elasticsearch安装3.1 解压Elasticsearch3.2 修改Elasticsearch的配置文件3.3 修改系统配置3.4 启动Elasticsearch 4.ElasticSearch-head插件安装5.Logstash安装6.Kibana安装7.SpringCloud集成logsta