十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

前置机的日志轮转怎么配?logrotate和应用的配合

前置机的日志轮转怎么配?logrotate和应用的配合 前置机跑得越久日志越多不配轮转的结局都一样磁盘被日志吃满报送中断半夜爬起来救火。日志轮转logrotate是Linux自带的日志管理机制配置不难难的是和应用日志的配合轮转时应用要不要停、文件句柄怎么处理、压缩和保留的策略怎么定。这篇把logrotate的配置方法和报送场景的最佳实践讲全。先讲一个最常见的坑配了logrotate但没配对轮转执行后应用还在往旧文件写文件句柄没释放新文件空着磁盘照样涨——等于白配。这个坑的根源是不理解logrotate和应用写日志的机制差异所以这篇先讲机制再讲配置理解了原理配置参数就都知道为什么那么填。一、日志轮转的三要素轮转配置要回答三个问题多久转一次频率、转完的旧日志怎么办压缩和保留、轮转时应用怎么配合通知机制。频率按天转是最常见的节奏日报类的应用日志一天的量可控。按大小转比如单文件一百兆适合日志量波动大的场景。报送类应用的日志量和工作日历强相关月末量大按天转加大小兜底每天转单文件超五百兆强制再转的组合最稳。保留和压缩转出来的旧日志压缩存储gzip压缩比通常十比一三天前的日志转压缩近三天保留原样方便排查、保留天数按合规要求等保六个月的底线和排查需求实际排障很少翻一周前的日志取平衡在线保留三十天压缩归档再存五个月总够半年。应用通知轮转后应用必须重新打开日志文件写新文件而不是继续写已被改名的旧文件。通知的方式postrotate脚本里发信号kill -USR1 应用进程应用收到信号重开日志或复制截断模式copytruncate不改名直接截断应用无感知。二、logrotate的配置文件详解标准的配置文件结构/etc/logrotate.d/目录下按应用建文件路径和通配第一行指定日志文件的路径通配符覆盖多个日志/var/log/baosong/*.log转全部也可以逐个列出。多个应用日志分开建配置文件各自的策略独立。参数块daily每天转、rotate 30保留三十份、compress压缩、delaycompress延迟一天压缩最近一份不压方便翻看、missingok文件不存在不报错、notifempty空文件不转。脚本块postrotate到endscript之间写轮转后的动作发信号让应用重开日志sharedscripts表示通配多个文件时脚本只执行一次多发信号会打扰应用。一套报送应用的参考配置就十来行daily、rotate 30、compress、delaycompress、copytruncate或postrotate信号、create属主权限。配置文件写完用logrotate -ddebug模式验证语法和逻辑确认无误再让它跑。三、copytruncate和信号模式的选择两种轮转模式的选择是配置的核心决策各有适用场景。copytruncate复制截断机制是把当前日志复制一份作为轮转文件然后把原文件清空应用的文件句柄不变继续写。优点应用零配合不用发信号、不依赖应用实现信号处理对不支持重开日志的应用是唯一选择。缺点复制和截断之间有极小的窗口这窗口里的日志可能丢失或错乱——对日志完整性要求苛刻的场景是瑕疵。信号模式create加postrotate机制是轮转时把旧文件改名创建新文件给应用发信号USR1应用收到后主动重开日志写新文件。优点零丢失改名不影响句柄信号后新日志进新文件。缺点应用要实现信号处理主流日志框架都支持log4j、logback的RollingFileAppender其实自带轮转和系统级配合时用它的外部模式。报送场景的建议应用日志框架支持信号处理Java系都支持就用信号模式追求零丢失老旧应用或不确认的copytruncate保平安。两种模式都配过的环境里排查问题最多的不是模式本身是配了信号模式但应用没真正处理信号旧文件一直被写到巨大。验证方法轮转后看新文件有没有内容增长旧文件的大小是否停止变化。四、和应用自身轮转的分工Java应用普遍自带日志轮转logback的滚动策略系统级logrotate和应用级轮转会打架应用自己转完logrotate又来转一次文件名错乱、重复压缩。分工的原则一个日志文件只归一个轮转机制管。应用管自己的应用的滚动策略配按天加保留三十天logrotate对该应用日志目录配置missingok加notifempty空文件不动实际不干预。这种方式最简单适合标准Java应用。logrotate统一管应用的滚动关掉或滚动策略设成永不日志一直追加单文件logrotate负责一切。适合混合环境多种语言的应用日志统一管理运维口径单一。报送前置机多是Java应用推荐应用自己管logback的配置十行以内比系统级的配合少一层复杂度。logrotate管那些不会自己转的系统日志、开源组件的日志。五、轮转的监控和兜底轮转配置完不是结束三个监控点保它长期有效。轮转执行了没logrotate有自己的执行日志/var/lib/logrotate/logrotate.status脚本执行失败权限、语法会静默。监控方案cron任务的输出重定向到日志定期检查status文件的更新时间超过两天没更新就告警。磁盘的持续观察轮转正常但磁盘还在涨的病根很多某个应用日志没被轮转覆盖到新建的日志路径没进配置、压缩失效delaycompress的延迟积压、保留数设太大。磁盘水位的监控前面磁盘篇的三道线配着轮转一起看。半年度的演练复核轮转配置改动后新增应用、调整策略做一次人工复核手动触发一次轮转logrotate -f 配置文件看新文件生成、旧文件压缩、应用写入正常三件事都发生。三分钟的人工检查防的是配置改错半年没人发现的哑雷。搭贝在报送运维的实践里日志轮转的配置核查是巡检的固定项轮转是否覆盖全部日志路径、应用的重开机制是否验证过、保留周期是否合规三项用运维台账登记巡检时逐项核对。轮转这种配完就忘的基础设施恰恰需要这种清单化的定期关照。常见问题Q轮转后新日志文件是空的怎么回事九成是应用还在写旧文件copytruncate模式下检查截断是否生效旧文件大小是否归零、信号模式下检查应用是否处理了信号看旧文件是否还在增长。验证的快速方法tail -f 新文件触发一条应用日志发个测试请求新文件没动静就是应用没切换。处理应用侧修信号处理或暂时改用copytruncate。Q日志压缩后发现要查问题怎么办zgrep、zcat直接查压缩文件zgrep 关键词 *.gz不用解压。频繁要查的时段最近一周用delaycompress延长不压缩的窗口延迟七天再压。归档更久的日志要回查先解压到临时目录再分析别在生产日志目录里解压磁盘空间的风险。Q磁盘还是满但轮转正常按顺序查三处轮转覆盖外的日志find全盘的大日志文件常有漏网——应用升级后换了日志路径配置没跟上、coredump和临时文件应用崩溃的core文件动辄几个G、日志之外的增长数据库、备份残留。轮转只管它配置内的文件磁盘治理要全盘视角前面磁盘专篇的思路。QWindows前置机怎么做日志轮转Windows没有logrotate方案三个应用自管logback滚动推荐、PowerShell脚本加计划任务自写脚本实现复制截断逻辑参考copytruncate、第三方工具日志轮转的开源Windows版。Windows的报送前置机建议应用自管跨平台的日志框架都支持策略和行为和Linux侧一致运维口径统一。Q多台前置机的轮转策略怎么保持一致配置文件进版本库Git管理logrotate和应用日志配置变更走评审批量下发用自动化工具Ansible的模板分发。配置漂移是多机环境的慢性病某台手动改过参数半年后行为不一致排查到怀疑人生。搭贝的运维台账登记每台的配置版本巡检核对漂移无所遁形。
返回列表