二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • 最佳实践

  • 迎刃而解

  • Nginx

  • Php

  • Zabbix

  • AWS

  • Prometheus

  • Grafana

  • Loki

  • CentOS

    • Linux好用命令之w命令
    • Linux好用命令之top命令
    • Linux好用命令之free命令
    • Linux好用命令之lsof命令
    • Linux好用命令之expect命令
    • Linux好用命令之gzip保留原文件解压缩
    • Linux好用命令之dig命令
    • Linux好用命令之rsync命令
    • Linux好用命令之curl劫持请求的三种方式
    • Linux好用命令之base64命令
    • Linux好用命令之figlet命令
    • Linux好用命令之watch命令
    • 使用trash-cli给Linux服务器加一个回收站的功能
    • CentOS-7中tmp目录的清理规则
    • 用yum的方式快速安装lnmp环境(MySQL5-5&5-7,php5-x&7-x)
    • CentOS系统里TCP状态中TIME_WAIT超过3万的分析与建议
    • CentOS-7如何释放主机根分区的磁盘空间
    • 实践一次抓包看到TCP的三次握手与四次挥手及其他
    • CentOS-arm架构下安装docker
    • Logrotate入门了解及生产实践
      • 1,简单了解
      • 2,配置了解
      • 3,生产案例
        • 1,NGINX 日志
        • 2,catalina 日志
        • 3,日志量大
    • 为什么不建议Linux用root登陆或启动服务
  • Supervisord

  • Systemd

  • Docker

  • Docker-Compose

  • Rancher

  • Ansible

  • OpenLdap

  • GitLab

  • GitHub

  • Etcd

  • Consul

  • RabbitMQ

  • Kafka

  • Mysql

  • MongoDB

  • OpenVPN

  • Kvm

  • VMware

  • 配置文件详解

  • Other

  • 运维观止
  • CentOS
二丫讲梵
2020-04-28
目录

Logrotate入门了解及生产实践

文章发布较早,内容可能过时,阅读注意甄别。

# 1,简单了解

logrotate 在 CentOS 系统中是默认安装的日志轮替组件,通过如下命令可以看到主配置内容:

egrep -v '^$|^#' logrotate.conf
weekly
rotate 4
create
dateext
include /etc/logrotate.d
/var/log/wtmp {
    monthly
    create 0664 root utmp
    minsize 1M
    rotate 1
}
/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

这个配置当中其他内容基本上可以忽略,主要内容是第 6 行的引用,我们新增一些日志管理策略也都可以在这个目录下创建相关策略来维护。

logrorate 默认在系统的 /etc/cron.daily中存放了一个执行脚本,因此默认情况下脚本将会每天执行一次:

$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
1
2
3
4
5
6
7
8

了解了这些基本信息之后,就可以对这个工具投入使用了,不过还需要了解一下配置文件中的参数意义,以便配制出符合自己需求的轮替脚本。

# 2,配置了解

  • compress:通过 gzip,压缩转储以后的日志
  • nocompress:不需要压缩时,用这个参数
  • copytruncate:用于还在打开中的日志文件,把当前日志备份并截断
  • nocopytruncate:备份日志文件但是不截断
  • createmodeownergroup:转储文件,使用指定的文件模式创建新的日志文件
  • nocreate:不建立新的日志文件
  • delaycompress和compress:一起使用时,转储的日志文件到下一次转储时才压缩
  • missingok:在日志轮循期间,任何错误将被忽略,例如 “文件无法找到” 之类的错误。
  • nodelaycompress:覆盖 delaycompress 选项,转储同时压缩。
  • errorsaddress:专储时的错误信息发送到指定的 Email 地址
  • ifempty:即使是空文件也转储,这个是 logrotate 的缺省选项。
  • notifempty:如果是空文件的话,不转储
  • mailaddress:把转储的日志文件发送到指定的 E-mail 地址
  • nomail:转储时不发送日志文件
  • dateext:转储后的日志文件以日期命名
  • olddirdirectory:转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
  • noolddir:转储后的日志文件和当前日志文件放在同一个目录下
  • prerotate/endscript:在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
  • postrotate/endscript:在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
  • daily:指定转储周期为每天
  • weekly:指定转储周期为每周
  • monthly:指定转储周期为每月
  • rotatecount:指定日志文件删除之前转储的次数,0 指没有备份,5 指保留 5 个备份
  • size(或 minsize):size 当日志文件到达指定的大小时才转储,Size 可以指定 bytes(缺省) 以及 KB(sizek) 或者 MB(sizem)

以上是一些常用的配置,可以按需定义自己的配置文件。

img (opens new window)

# 3,生产案例

接下来介绍几个生产当中常用的例子,可以直接借鉴以使用。

# 1,NGINX 日志

NGINX 日志的处理是一种常见的场景,处理的方式用的较多的是结合 logrotate 来进行处理,当然也可以基于 NGINX 自身的配置文件策略对日志进行自动切割,此种方案可以参考另外一篇文章:从 NGINX 自身配置文件中定义访问日志按时间切割 (opens new window),这里则介绍 logrotate 方案的具体配置方式。

在 /etc/logrotate.d下添加如下配置:

$ cat /etc/logrotate.d/nginx
/data/log/access.log
/data/log/error.log
{
    daily
    dateext
    missingok
    rotate 7
    notifempty
    create 755 www
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

这个案例是针对这种提供了平滑过渡日志写操作的脚本,其他类似的应用日志也可以套用这个地方的配置。

当我们配置添加之后,等不了系统的执行,想要自己看一下效果,可用如下命令手动运行:

logrotate -f /etc/logrotate.d/nginx
1

# 2,catalina 日志

catalina 是一个代指,与上边配置相对的,特指那种始终写到一个文件里,自身没有任何轮替策略,也无法通过调用所有平滑过渡来处理的情况下,可以使用如下配置对日志进行处理。

配置如下:

$ cat /etc/logrotate.d/catalina
/data/log/catalina.log
{
    missingok
    copytruncate
    compress
    dateext
    notifempty
    daily
    rotate 7
    create 755 root root
}
1
2
3
4
5
6
7
8
9
10
11
12

这个配置文件看起来与上边的区别除了脚本的处理之外,还多了一个重要的配置是 copytruncate,如果你在配置了 rotate 策略之后,发现日志转储了,但是写的对象也转移到了转储之后的文件了,那么应该就是漏了这个配置项。

# 3,日志量大

有时候可能业务量非常大,默认的按天切割就有点不大能够满足我们的需求,磁盘可能很快就要满了,这个时候可以将策略自定义为每小时执行一次。

$ cat /etc/logrotate.d/nginx
/data/log/access.log
/data/log/error.log
{
    hourly
    dateext
    missingok
    rotate 7
    notifempty
    create 755 www
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

然后记得把执行脚本往小时执行池子里拷贝一份:

$ cp /etc/cron.daily/logrotate /etc/cron.hourly/
1

当然也可将策略调整为按大小进行切割,这个方案也是可以的,这里就不做示例了。

微信 支付宝
上次更新: 2024/07/04, 22:40:37
CentOS-arm架构下安装docker
为什么不建议Linux用root登陆或启动服务

← CentOS-arm架构下安装docker 为什么不建议Linux用root登陆或启动服务→

最近更新
01
记录二五年五一之短暂回归家庭
05-09
02
学习周刊-总第210期-2025年第19周
05-09
03
学习周刊-总第209期-2025年第18周
05-03
更多文章>
Theme by Vdoing | Copyright © 2017-2025 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式