本文主要是介绍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: 此文件记录了系统在启动过程中关于硬件和内核启动进程的信息。
last
和 lastlog
是两个常见的命令和文件,通常用于查看用户登录相关的信息。
#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
。可以更改为bzip2
、xz
等。
- 指定用于压缩的命令,默认是
-
compressext <扩展名>:
- 指定压缩后的文件扩展名。默认是
.gz
。
- 指定压缩后的文件扩展名。默认是
-
compressoptions <选项>:
- 指定用于压缩的选项。例如,设定
gzip
的压缩级别。
- 指定用于压缩的选项。例如,设定
-
create <权限> <用户> <组>:
- 在轮转后创建新的日志文件,并指定文件的权限、所有者和组。例如,
create 0644 root root
。
- 在轮转后创建新的日志文件,并指定文件的权限、所有者和组。例如,
条件参数
-
missingok:
- 如果日志文件不存在,
logrotate
不会报错。
- 如果日志文件不存在,
-
ifempty/notifempty:
- 指定日志文件为空时的行为。
ifempty
表示即使日志文件为空也进行轮转,notifempty
表示日志文件为空则不进行轮转。
- 指定日志文件为空时的行为。
-
sharedscripts:
- 指定是否在一组日志轮转中共享
prerotate
和postrotate
脚本。如果是共享的,则每组脚本只执行一次。
- 指定是否在一组日志轮转中共享
自定义脚本参数
-
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日志轮转的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!