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

相关文章

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

golang 日志log与logrus示例详解

《golang日志log与logrus示例详解》log是Go语言标准库中一个简单的日志库,本文给大家介绍golang日志log与logrus示例详解,感兴趣的朋友一起看看吧... 目录一、Go 标准库 log 详解1. 功能特点2. 常用函数3. 示例代码4. 优势和局限二、第三方库 logrus 详解1.

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

SpringBoot项目使用MDC给日志增加唯一标识的实现步骤

《SpringBoot项目使用MDC给日志增加唯一标识的实现步骤》本文介绍了如何在SpringBoot项目中使用MDC(MappedDiagnosticContext)为日志增加唯一标识,以便于日... 目录【Java】SpringBoot项目使用MDC给日志增加唯一标识,方便日志追踪1.日志效果2.实现步

SQL Server清除日志文件ERRORLOG和删除tempdb.mdf

《SQLServer清除日志文件ERRORLOG和删除tempdb.mdf》数据库再使用一段时间后,日志文件会增大,特别是在磁盘容量不足的情况下,更是需要缩减,以下为缩减方法:如果可以停止SQLSe... 目录缩减 ERRORLOG 文件(停止服务后)停止 SQL Server 服务:找到错误日志文件:删除

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

开启mysql的binlog日志步骤详解

《开启mysql的binlog日志步骤详解》:本文主要介绍MySQL5.7版本中二进制日志(bin_log)的配置和使用,文中通过图文及代码介绍的非常详细,需要的朋友可以参考下... 目录1.查看是否开启bin_log2.数据库会把日志放进logs目录中3.查看log日志总结 mysql版本5.71.查看

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC