章工运维 章工运维
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)

章工运维

业精于勤,荒于嬉
首页
  • linux
  • windows
  • 中间件
  • 监控
  • 网络
  • 存储
  • 安全
  • 防火墙
  • 数据库
  • 系统
  • docker
  • 运维工具
  • other
  • elk
  • K8S
  • ansible
  • Jenkins
  • GitLabCI_CD
  • 随笔
  • 面试
  • 工具
  • 收藏夹
  • Shell
  • python
  • golang
友链
  • 索引

    • 分类
    • 标签
    • 归档
    • 首页 (opens new window)
    • 关于我 (opens new window)
    • 图床 (opens new window)
    • 评论 (opens new window)
    • 导航栏 (opens new window)
周刊
GitHub (opens new window)
  • linux

    • rsync

      • rsync用法及参数详解
      • rsync服务实现推送,拉取
    • dns

    • sed、awk、grep、find四剑客

    • LVM管理
    • sudo权限规划
    • linux修改网卡为eth0的两种方法
    • Logrotate入门了解及生产实践
      • 1,简单了解
      • 2,配置了解
      • 3,生产案例
        • 2,catalina 日志
        • 3,日志量大
    • linux中用dd命令来测试硬盘读写速度
    • linux 阿里云盘挂载错误
    • CentOS7安装Android SDK
    • centos7安装更新git
    • linux启动顺序
    • centos7升级openssl
    • expect工具的安装和使用方法
    • linux下使用v2ray
    • centos7安装java环境的两种方式
    • linux-centos7系统设置时区及同步时间
    • rsyslog日志系统:rsyslog配置文件
    • rsyslog的安装、使用、详解
    • safe-rm防止删除重要的文件
    • linux如何获取打开文件和文件描述符数量
    • LVS集群-DR模式
    • linux服务器安装ffmpeg
    • linux服务器安装samba
    • 使用openssl创建自签发证书
    • linux服务器部署next.js服务
    • linux服务器ionice命令使用方式
    • linux服务器curl命令常用操作
  • windows

  • 中间件

  • 网络

  • 安全

  • 存储

  • 防火墙

  • 数据库

  • 系统

  • docker

  • other

  • 监控

  • 运维
  • linux
章工运维
2023-01-11
目录

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)

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

# 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
    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

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

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

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

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

原文链接:https://wiki.eryajf.net/pages/4721.html

微信 支付宝
上次更新: 2024/11/08, 12:33:03

← linux修改网卡为eth0的两种方法 linux中用dd命令来测试硬盘读写速度→

最近更新
01
shell脚本模块集合
05-13
02
生活小技巧(认知版)
04-29
03
生活小技巧(防骗版)
04-29
更多文章>
Theme by Vdoing | Copyright © 2019-2025 | 点击查看十年之约 | 鄂ICP备2024072800号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式