自动化运维-配置Mysql、emqx、redis、nginx等通用性Linux日志分割工具 - logrotate

news/2025/1/15 15:42:02/文章来源:https://www.cnblogs.com/zhoutuo/p/18412381

前言:logrotate 是一个在 Linux 系统中用于管理和轮转日志文件的工具。它的主要目的是帮助系统管理员自动执行日志文件的轮转、压缩、删除和邮件通知等任务,以防止日志文件占用过多的磁盘空间,同时保持日志文件的可管理性。

参考命令:
1、手动运行 logrotate 命令来测试配置,并查看是否生成日志:
命令:sudo /usr/sbin/logrotate -v /etc/logrotate.d/当前服务
2、测试配置,不做实际操作
命令:logrotate -d /etc/logrotate.d/当前服务
3、手动执行 logrotate
命令:logrotate -vf /etc/logrotate.d/当前服务
4、查看 cron 日志,确定 logrotate 是否执行
命令:tail /var/log/cron
5、查看 logrotate 的状态文件,确定是否执行了具体切割任务
命令:cat /var/lib/logrotate/logrotate.statu

一、Mysql日志切割配置

1、服务实际情况
mysql日志文件路径为:/var/log/mysqld.log
日志文件的权限、用户、用户组为: -rw-r--r-- 1 mysql mysql
mysql.pid路径为:/var/run/mysqld/mysqld.pid

2、需求:保留最近3个月的

3、详细操作步骤
① 创建logrotate配置文件:
在/etc/logrotate.d/目录下创建一个新的配置文件,例如命名为mysql。
命令:vim /etc/logrotate.d/mysql

②添加以下l配置内容:

/var/log/mysqld.log {dailyrotate 90compressmissingoknotifemptycreate 0640 mysql mysqlpostrotateif [ -f /var/run/mysqld/mysqld.pid ]; thenkill -USR1 `cat /var/run/mysqld/mysqld.pid`fiendscript
}
配置解释如下:
daily:表示每天进行日志轮转。
rotate 90:表示保留90天的日志文件,大约3个月。
compress:轮转后的日志文件将被压缩。
missingok:如果日志文件缺失,logrotate不会报错。
notifempty:如果日志文件为空,则不进行轮转。
create 0640 mysql mysql:创建新的日志文件,并设置权限为0640,所有者为mysql,组为mysql。
Postrotate:在日志轮转之后执行的命令,这里使用if语句检查/var/run/mysqld/mysqld.pid文件是否存在,如果存在,则发送USR1信号给MySQL,使其重新打开日志文件。

4.保存并退出vim编辑器

5. 测试logrotate配置
为了确保配置文件没有错误,手动运行logrotate并测试配置:
命令:sudo logrotate -d /etc/logrotate.d/mysql
注释:-d参数会打印出将要执行的操作,而不会实际执行它们。
(权限限制,无法截图,复制的输出信息)

[root@ap04_mysql mysqld]# sudo logrotate -d /etc/logrotate.d/mysql
reading config file /etc/logrotate.d/mysql
Allocating hash table for state file, size 15360 BHandling 1 logsrotating pattern: /var/log/mysqld.log  after 1 days (90 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/mysqld.loglog does not need rotating (log has been already rotated)[root@ap04_mysql mysqld]#

6. 验证logrotate能否正常运行
检查/etc/cron.daily/logrotate文件,确保logrotate的定时任务是启用的。
方法一:
命令:cat /etc/cron.daily/logrotate
(无法截图,复制的输出信息)

[root@ap04_mysql mysqld]# cat /etc/cron.daily/logrotate
#!/bin/sh/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

结论:这个脚本的目的是确保 logrotate 能够每天自动执行,并且在执行过程中如果遇到任何问题,会通过系统日志服务记录一个警告。这样,系统管理员也可以通过查看系统日志来监控 logrotate 的运行状况。

方法二:
命令:journalctl -xe | grep logrotate
(无法截图,复制的输出信息)

[root@ap04_mysql mysqld]# journalctl -xe | grep logrotate
Feb 15 04:48:01 ap04_mysql run-parts(/etc/cron.daily)[7233]: starting logrotate
Feb 15 04:48:01 ap04_mysql run-parts(/etc/cron.daily)[7242]: finished logrotate
Feb 16 03:44:01 ap04_mysql run-parts(/etc/cron.daily)[5443]: starting logrotate
Feb 16 03:44:01 ap04_mysql run-parts(/etc/cron.daily)[5448]: finished logrotate
Sep 12 19:37:01 ap04_mysql run-parts(/etc/cron.daily)[15728]: starting logrotate
Sep 12 19:37:01 ap04_mysql run-parts(/etc/cron.daily)[15737]: finished logrotate
Sep 13 03:20:01 ap04_mysql run-parts(/etc/cron.daily)[20829]: starting logrotate
Sep 13 03:20:01 ap04_mysql run-parts(/etc/cron.daily)[20834]: finished logrotate
Sep 13 10:13:19 ap04_mysql sudo[21880]:     root : TTY=pts/2 ; PWD=/run/mysqld ; USER=root ; COMMAND=/sbin/logrotate -d /etc/logrotate.d/mysql
结论:从journalctl命令输出来看,logrotate任务已在系统上定期执行,并且没有显示错误或失败的记录。这表明logrotate正在正常运行,并且能够成功完成日志文件的轮转。以下是输出信息的具体解释:
①starting logrotate 和 finished logrotate:这些行表明logrotate任务已经开始并成功完成。run-parts(/etc/cron.daily)是cron任务的一部分,它运行/etc/cron.daily目录下的所有脚本。
②sudo[21880]: root : TTY=pts/2 ; PWD=/run/mysqld ; USER=root ; COMMAND=/sbin/logrotate -d /etc/logrotate.d/mysql:这行显示了一次手动执行logrotate测试命令的记录。这里使用了-d选项,表示这是一个调试运行,用于测试配置文件而不实际进行轮转。这些日志条目表明logrotate任务已经按照计划执行,并且没有遇到任何问题。如果您想要进一步验证轮转是否按预期工作,可以定期检查日志文件本身是否已经被轮转和压缩,以及是否创建了新的日志文件。

二、emqx日志切割配置:

1、服务实际情况
(无法截图,复制的输出信息)

[root@ap02_mp log]# ll -sh
total 924K
428K -rw-r--r-- 1 root root 428K Sep 12 23:39 emqx.log.1
4.0K -rw-r--r-- 1 root root   18 Sep 13 08:43 emqx.log.idx
4.0K -rw-r--r-- 1 root root   13 Sep 13 08:43 emqx.log.siz
484K -rw-r--r-- 1 root root 482K Sep 13 10:43 erlang.log.1
4.0K -rw-r--r-- 1 root root  260 Sep 13 08:43 run_erl.log

emqx的日志路径为:/apps/emqx/log/emqx.log ; /apps/emqx/log/erlang.log ; /apps/emqx/log/run_erl.log
日志文件的权限、用户、用户组都为:-rw-r--r-- 1 root root

日志功能解析:

emqx.log.1:这是一个日志文件,大小为428K,看起来像是EMQX Broker(一个MQTT消息代理)的日志。日志切割可以帮助管理这个文件的大小,避免它无限制地增长。
erlang.log.1:这是另一个日志文件,大小为484K,可能是与EMQX相关的Erlang应用程序的日志。Erlang VM的日志通常包含应用程序的运行时信息。
run_erl.log:这个文件可能包含了Erlang运行时的启动日志。虽然它目前的大小只有4.0K,但是如果它随着时间增长,也可能需要日志切割。

2、需求:日志保留最近2周

3、详细步骤
①编辑配置文件:
命令:vim /etc/logrotate.d/emqx
②添加以下内容:

/apps/emqx/log/emqx.log {weeklyrotate 2compressmissingoknotifemptycreate 0644 root root
}/apps/emqx/log/erlang.log {weeklyrotate 2compressmissingoknotifemptycreate 0644 root root
}/apps/emqx/log/run_erl.log {weeklyrotate 2compressmissingoknotifemptycreate 0644 root root
}
配置解释如下:
weekly:表示每周进行日志轮转。
rotate 2:表示保留2周的日志文件。
compress:轮转后的日志文件将被压缩。
missingok:如果日志文件缺失,logrotate不会报错。
notifempty:如果日志文件为空,则不进行轮转。
create 0644 root root:创建新的日志文件,并设置权限为0644,所有者为root,组为root。

4、保存并退出编辑器
5、测试logrotate配置
为了确保配置文件没有错误,手动运行logrotate并测试配置:
命令:sudo logrotate -d /etc/logrotate.d/emqx
注释:-d参数会打印出将要执行的操作,而不会实际执行它们。

  1. 验证logrotate能否正常运行:
    命令:journalctl -xe | grep logrotate
    (无法截图,复制的输出信息)
[root@ap02_mp logrotate.d]# journalctl -xe | grep logrotate
Sep 13 11:37:23 ap02_mp sudo[30010]:     root : TTY=pts/3 ; PWD=/etc/logrotate.d ; USER=root ; COMMAND=/sbin/logrotate -d /etc/logrotate.d/emqx

三、redis日志切割配置

1、服务实际情况
redis日志路径为:/apps/redis/log/redis.log
日志文件的权限、用户、用户组、为:-rw-r--r--. 1 redis redis

2、需求:日志保留最近2周

3、详细操作步骤
①编辑配置文件:
命令:vim /etc/logrotate.d/redis
②添加以下内容:

/apps/redis/log/redis.log {weeklyrotate 2compressmissingoknotifemptycreate 0640 redis redis
}
配置解释如下:
weekly:指定 logrotate 每周执行一次日志轮转。
rotate 2:指定保留最近两周的日志文件。这意味着 logrotate 会保留两个轮转周期的日志,超过这个时间范围的旧日志文件将被删除。
compress:指定在轮转时压缩旧的日志文件。这通常会使用 gzip 来压缩日志,以节省磁盘空间。
missingok:如果日志文件丢失或不存在,logrotate 不会报错,而是继续执行其他任务。
notifempty:如果日志文件为空,则不进行轮转。这可以防止创建不必要的压缩日志文件。
create 0640 redis redis:指定在轮转时创建新的日志文件,并设置其权限为 0640,所有者为 redis 用户,组为 redis 组。这意味着新日志文件将允许所有者读写,而组用户和其他用户只能读取。

4、保存并退出编辑器
5、测试logrotate配置
命令:logrotate -d /etc/logrotate.d/redis

6. 验证logrotate能否正常运行
命令:journalctl -xe | grep logrotate
(无法截图,复制的输出信息)

[root@ap02_mp log]# journalctl -xe | grep logrotate
Sep 13 13:56:33 ap02_mp sudo[5259]:     root : TTY=pts/3 ; PWD=/apps/redis/log ; USER=root ; COMMAND=/usr/sbin/logrotate -v /etc/logrotate.d/redis

四、nginx日志切割配置

1、服务实际情况
(无法截图,复制的输出信息)

[root@ap02_mp nginx]# ll -sh
total 136K
128K -rw-r--r--. 1 root root 115K Sep 13 14:05 access.log
8.0K -rw-r--r--. 1 root root 6.2K Sep 13 13:54 error.log
[root@ap02_mp nginx]# pwd
/apps/log/nginx

nginx日志路径为:/apps/log/nginx/access.log ; /apps/log/nginx/error.log
日志文件的权限、用户、用户组都为:-rw-r--r--. 1 root root
nginx.pid路径为:/var/run/nginx.pid

2、需求:日志保留最近2周

3、详细步骤操作
①编辑配置文件:
命令:vim /etc/logrotate.d/nginx
②添加以下内容:

/apps/log/nginx/*.log {weeklyrotate 2compressmissingoknotifemptycreate 0640 root rootpostrotateif [ -f /var/run/nginx.pid ]; thenkill -USR1 `cat /var/run/nginx.pid`fiendscript
}
配置解释如下:
weekly:表示每周进行日志轮转。
rotate 2:表示保留2周的日志文件。
compress:轮转后的日志文件将被压缩。
missingok:如果日志文件缺失,logrotate 不会报错。
notifempty:如果日志文件为空,则不进行轮转。
create 0640 root root:创建新的日志文件,并设置权限为 0640,所有者为 root,组为 root。
postrotate:在日志轮转之后执行的命令,这里发送 USR1 信号给 Nginx,使其重新打开日志文件。

4、保存并退出编辑器
5、使用-d选项进行测试
命令:sudo logrotate -d /etc/logrotate.d/nginx
(无法截图,复制的输出信息)

[root@ap02_mp ~]# sudo logrotate -d /etc/logrotate.d/nginx
reading config file /etc/logrotate.d/nginx
Allocating hash table for state file, size 15360 BHandling 1 logsrotating pattern: /apps/log/nginx/*.log  weekly (2 rotations)
empty log files are not rotated, old logs are removed
considering log /apps/log/nginx/access.loglog does not need rotating (log has been already rotated)considering log /apps/log/nginx/error.loglog does not need rotating (log has been already rotated)[root@ap02_mp ~]#

执行结果解释:

①reading config file /etc/logrotate.d/nginx:logrotate 正在读取 /etc/logrotate.d/nginx 配置文件。
②Allocating hash table for state file, size 15360 B:logrotate 正在为状态文件分配哈希表,这是用于跟踪日志轮转状态的内部数据结构。
③Handling 1 logs:表示配置文件中定义了一组日志需要处理。
④rotating pattern: /apps/log/nginx/*.log weekly (2 rotations):表示配置文件中定义了每周轮转一次 /apps/log/nginx/*.log 日志文件,并且保留2周的日志。
⑤empty log files are not rotated, old logs are removed:表示空的日志文件不会被轮转,旧的日志文件会被删除。
⑥considering log /apps/log/nginx/access.log 和 considering log /apps/log/nginx/error.log:logrotate 正在考虑是否需要轮转 access.log 和 error.log 文件。
⑦log does not need rotating (log has been already rotated):表示 access.log 和 error.log 文件不需要轮转,因为它们已经被轮转过了。

结论:这个输出表明 logrotate 配置文件是正确的,但是 access.log 和 error.log 文件已经被轮转过了,所以没有执行新的轮转操作

6. 验证logrotate能否正常运行
命令:journalctl -xe | grep logrotate
(无法截图,复制的输出信息)

[root@ap02_mp ~]# journalctl -xe | grep logrotate
Sep 13 15:58:00 ap02_mp sudo[5669]:     root : TTY=pts/3 ; PWD=/root ; USER=root ; COMMAND=/sbin/logrotate -d /etc/logrotate.d/nginx

温馨提示:
记录当前配置时间,以上所有服务的日志切割日志logrotate任务是否按照计划预期执行,怠执行日期到后 需检查日志文件本身是否已经被轮转和压缩,以及是否创建了新的日志文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/796613.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pbootcms网站挂马解决方案(详细说明)

当你的PbootCMS网站被挂马时,应该立即采取措施来清除恶意代码,并加强系统的安全性,防止未来的攻击。以下是一个详细的解决方案: 1. 备份现有数据 在开始任何修复工作之前,首先备份你的网站数据,包括数据库和文件系统。这一步骤是为了防止在修复过程中丢失重要数据。 2. 检…

SVN在MacOS下报E230001错误

#macos #rider for Mac #SVN #E230001svn为什么会报E230001错误呢?根据详细错误信息Server SSL certificate verification failed: certificate issued知道这是https证书有问题,不用管它证书了,这里介绍一种简单的方法。 首先,打开终端(terminal,mac os/linux一般都是带…

面试-JS Web API - 存储

cookie HTML5存储(localStorage 和 sessionStorage)cookie cookie本身用于浏览器和server通讯的,被借用到本地存储来。可以用document.cookie来修改。同一个变量会覆盖,不同变量会追加。localStorage 和 sessionStorage// 保存数据到 localStorage localStorage.getItem(a,10…

MySQL8的新特性

一 字典数据与资源管理1.1 数据字典 以前MySQL都是采用元数据文件、非事务性表结构或者是存储引擎特有的方式来存储字典数据,这些字典数据通常都是以数据对象为主,比如说最常见的表结构信息等。 在MySQL8.0中,这些字典数据都被移动到拥有InnoDB存储引擎的事务性表中进行存储…

通义灵码获得国产 AI 编码工具最高成绩丨阿里云云原生 8 月产品月报

《阿里云云原生每月动态》,从趋势热点、产品新功能、服务客户、开源与开发者动态等方面,为企业提供数字化的路径与指南。云原生月度动态 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》,从趋势热点、产品新功能、服务客户、开源与开发者动态等方面,为企业提供…

执行yarn命令的时候报错: error Error: certificate has expired

完整错误:原因是:SSL证书过期 执行命令关闭验证: yarn config set strict-ssl false

《抽象代数》系列之群论入门

一、重要性 1.1 领域意义 群论是数学的一个分支,主要研究代数结构中的群、环、域等。尽管它看似抽象,但在编程领域,群论有着广泛的应用和深刻的意义。算法设计与优化:群论在算法设计中发挥着重要作用。例如,在密码学中,群论被用于设计安全的加密算法,如椭圆曲线密码学,…

【转】Chrome 的无头模式升级了:推出 --headless=new

Chrome的无头模式变得更好用了!本文概要介绍了近期的工程工作,让 Headless 更接近Chrome的常规“Headful”模式,让Headless对开发者更有用。 背景 早在 2017 年,Chrome 59 便引入了所谓的无头模式,可让您在没有任何可见界面的无人值守环境中运行浏览器。从本质上讲,就是在…

Hadoop(六)生产集群搭建(三)

完全分布式运行模式 一、群起集群 1、配置workers [user@hadoop102 hadoop]$ vim /opt/module/hadoop-3.1.3/etc/hadoop/workers在文件中添加如下内容: hadoop102 hadoop103 hadoop1042、启动集群 (1)如果集群是第一次启动,需要在hadoop102节点格式化NameNode [user@hadoop…

延迟退休!我们又可以愉快的打工了

延迟退休! 我们又可以愉快的打工了希望可以活到办理退休那天🐸本文来自博客园,作者:bigroc,转载请注明原文链接:https://www.cnblogs.com/bigroc/p/18412267blog:http://www.bigroc.cn博客园:https://www.cnblogs.com/bigroc

面试官:线程池遇到未处理的异常会崩溃吗?

首先,这个问题考察的是你对线程池 execute 方法和 submit 方法的理解,在 Java 线程池的使用中,我们可以通过 execute 方法或 submit 方法给线程池添加任务,但如果线程池中的程序在执行时,遇到了未处理的异常会怎么呢?接下来我们一起来看。 1.execute方法 execute 方法用于…

保持使用全局 HttpClient,但确保不同请求的 HttpRequestMessage 独立

保持使用全局 HttpClient,但确保不同请求的 HttpRequestMessage 独立这是推荐的最佳实践,因为 HttpClient 是设计为可重用的,你可以使用独立的 HttpRequestMessage 来确保每个请求有独立的请求头,而不影响其他请求。private static readonly HttpClient client = new HttpC…