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/ 目录中。配置文件定义了日志轮转的策略。/etc/logrotate.conf是主配置文件,里面有命令引入/etc/logrotate.d/目录,因此/etc/logrotate.d/是子配置目录,子配置目录是为拉方便管理应用日志较多的情况,进行模块化管理,管理方便。

以下是一个典型的 logrotate 配置示例:

# 每天进行轮转
daily

# 只保留 7 个旧日志文件
rotate 7

# 如果日志文件为空,不进行轮转
notifempty

# 轮转后是否压缩日志文件
compress

# 轮转前后执行的自定义命令
prerotate
  # 在轮转前执行的命令
  echo "About to rotate logs..."
endscript

postrotate
  # 在轮转后执行的命令
  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 100M
  create 0644 nginx nginx
  postrotate
    systemctl reload nginx
  endscript
}

#每天轮转日志,保留 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 文件的日志轮转配置
#如果日志文件不存在,不会报错或警告
  missingok
  notifempty
# 如果日志文件为空,则不会进行轮转
  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 的使用说明和参数列表。

  • 23
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值