`

rsyslogd服务, Logrotate日志切割

OS 
阅读更多
rsyslogd
日志文件格式
基本日志格式包含以下四种
1事件产生的事件
2发生事件的服务器的主机名
3产生事件的服务名或程序
4事件的具体信息


/etc/rsyslog.conf配置文件
authpriv.*             /var/log/secure
#服务名称[连接符号]     日志记录位置
#认证相关服务,所有日志等级     记录在 /var/log/secure




Logrotate的演示  http://huoding.com/2013/04/21/246

显而易见,Logrotate是基于CRON来运行的,其脚本是「/etc/cron.daily/logrotate」:

#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
实际运行时,Logrotate会调用配置文件「/etc/logrotate.conf」:

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    minsize 1M
    create 0664 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.
这里的设置可以理解为Logrotate的缺省值,当然了,可以我们在「/etc/logrotate.d」目录里放置自己的配置文件,用来覆盖Logrotate的缺省值。


按天保存一周的Nginx日志压缩文件,配置文件为「/etc/logrotate.d/nginx」:

/usr/local/nginx/logs/*.log {
    daily
    dateext
    compress
    rotate 7
    sharedscripts
    postrotate
        kill -USR1 `cat /var/run/nginx.pid`
    endscript
}
如果你等不及CRON,可以通过如下命令来手动执行:

shell> logrotate -f /etc/logrotate.d/nginx
当然,正式执行前最好通过Debug选项来验证一下,这对调试也很重要:

shell> logrotate -d -f /etc/logrotate.d/nginx
BTW:类似的还有Verbose选项,这里就不多说了。

Logrotate的疑问

问题:sharedscripts的作用是什么?

大家可能注意到了,我在前面Nginx的例子里声明日志文件的时候用了星号通配符,也就是说这里可能涉及多个日志文件,比如:access.log和error.log。说到这里大家或许就明白了,sharedscripts的作用是在所有的日志文件都轮转完毕后统一执行一次脚本。如果没有配置这条指令,那么每个日志文件轮转完毕后都会执行一次脚本。

问题:rotate和maxage的区别是什么?

它们都是用来控制保存多少日志文件的,区别在于rotate是以个数为单位的,而maxage是以天数为单位的。如果我们是以按天来轮转日志,那么二者的差别就不大了。

问题:为什么生成日志的时间是凌晨四五点?

前面我们说过,Logrotate是基于CRON运行的,所以这个时间是由CRON控制的,具体可以查询CRON的配置文件「/etc/crontab」,可以手动改成如23:59等时间执行:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
59 23 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
如果使用的是新版CentOS,那么配置文件为:/etc/anacrontab。

问题:如何告诉应用程序重新打开日志文件?

以Nginx为例,是通过postrotate指令发送USR1信号来通知Nginx重新打开日志文件的。但是其他的应用程序不一定遵循这样的约定,比如说MySQL是通过flush-logs来重新打开日志文件的。更有甚者,有些应用程序就压根没有提供类似的方法,此时如果想重新打开日志文件,就必须重启服务,但为了高可用性,这往往不能接受。还好Logrotate提供了一个名为copytruncate的指令,此方法采用的是先拷贝再清空的方式,整个过程中日志文件的操作句柄没有发生改变,所以不需要通知应用程序重新打开日志文件,但是需要注意的是,在拷贝和清空之间有一个时间差,所以可能会丢失部分日志数据。

BTW:MySQL本身在support-files目录已经包含了一个名为mysql-log-rotate的脚本,不过它比较简单,更详细的日志轮转详见「Rotating MySQL Slow Logs Safely」。



熟悉Apache的朋友可能会记得cronolog,不过Nginx并不支持它,有人通过mkfifo命令曲线救国,先给日志文件创建管道,再搭配cronolog轮转,虽然理论上没有问题,但效率上有折扣。另外,Debian/Ubuntu下有一个简化版工具savelog,有兴趣可以看看。



分享到:
评论

相关推荐

    日志切割之Logrotate1

    - `postrotate/endscript`:定义在日志轮换后执行的命令,常用于更新日志服务状态。 **5、logrotate的运行机制** logrotate的运行通常是通过cron定时任务触发,如`/etc/cron.daily/logrotate`。每次运行时,...

    rsyslog不记日志分析(1).docx

    - `$ModLoad imuxsock`:加载imuxsock模块,使得rsyslog能够监听传统的/dev/log Unix域套接字,这是许多系统服务如crond和logrotate发送日志的途径。 - `#$ModLoad imjournal`:尽管被注释掉,但imjournal模块通常...

    Kiwi-Syslog日志服务器搭建.doc

    1. 安装要求: 系统:windows 2012 R2 Standerd 环境:安装.net3.5和web服务 软件版本:K + SolarWinds Event Log Forwarder for Windows 日志服务器IP: 2. 安装过程: 运行开始安装: 至此,Kiwi Syslog server...

    Linux系统日志文件的打印与存储

    日志文件记录了系统运行过程中的各种事件,包括系统启动、服务状态、应用程序错误、安全事件等,为管理员提供了宝贵的信息资源。本文将深入探讨Linux系统日志文件的打印与存储。 一、日志文件的位置与类型 在Linux...

    linux-日志管理视频教程

    14.1 日志管理-简介.mp4 14.2 日志管理-rsyslogd服务.mp4 14.3 日志管理-日志轮替.mp4

    UNIX Linux网络日志分析与流量监控

    UNIX/Linux系统通过syslogd或rsyslogd服务来记录系统、安全和应用程序日志。这些服务将日志信息记录到/var/log目录下的不同文件中。常用的系统日志文件有/var/log/messages(通用信息)、/var/log/secure(安全认证...

    08-日志和计划任务1

    其中,`rsyslogd`服务负责收集kernel和应用程序产生的各种消息,并将它们写入系统日志。在RHEL5之前,该功能由`syslogd`服务提供,而在RHEL6及更高版本中,升级为`rsyslogd`以提供更可靠和扩展的服务。 `/etc/...

    第15章 告警和日志信息监控.pptx

    日志消息的级别可以从配置文件 /etc/rsyslog.conf 中看到,受 rsyslogd 服务管理的日志文件都是 Linux 操作系统中主要的日志文件,它们记录了 Linux 操作系统中内核、用户认证、电子邮件、计划任务等基本的系统消息...

    linux基础之日志管理

    2.logrotate 日志轮转 一 . 处理日志的进程 rsyslogd:系统专职日志程序。处理绝大部分日志记录,系统操作有关的信息,如登陆信息,程序启动关闭信息,错误信息 二 . 常见的日志文件 tail -10 /var/log/messages //...

    Linux网络日志分析与流量监控

    错误日志由系统进程`syslogd`(或新版Linux中的`rsyslogd`服务)负责管理。它记录了来自各种应用系统和服务的事件信息,并将其写入`/var/log/messages`文件中。错误日志包含了不同级别的事件,如警告、错误、信息等...

    Unix系统用户登录、操作命令日志配置方法-(二)+Linux篇+C+Shell.doc

    创建一个`logrotate`配置文件(如`/etc/logrotate.d/user_commands`),指定日志文件、保留的旧日志数量以及轮换策略。 ```bash /var/log/user_commands.log { daily rotate 30 compress delaycompress ...

    linux_日志管理和轮转

    logrotate 日志的轮转 将大量的日志分割管理,删除旧日志 处理日志的进程 第一类 rsyslog 系统专职日志程序 处理绝大部分的日志程序 系统有关的信息,如登陆信息,程序启动关闭的信息,错误信息 [root@localhost ~]#...

    zlog---比log4c更牛的c语言日志库

    高性能,在我的笔记本上达到72'000条日志每秒, 大概是syslog(3)配合rsyslogd的200倍速度 用户可以自定义等级,无需改变库代码 多线程和多进程写同一个日志的情况下,安全转档(转档就是把太大的日志重命名) 可以...

    编写Linux系统下Daemon程序的方法步骤

    6. **日志记录**:Daemon程序不能使用`printf`等方法输出信息,因此需要利用`syslog`机制记录日志。`syslog`允许Daemon在后台安全地记录信息,便于调试和监控。 以下是一个简单的示例代码,展示了如何编写一个基本...

    大数据运维技术第15章 告警和日志信息监控课件.pptx

    从配置文件 /etc/rsyslog.conf 中可以看到,受 rsyslogd 服务管理的日志文件都是 Linux 操作系统中主要的日志文件,它们记录了 Linux 操作系统中内核、用户认证、电子邮件、计划任务等基本的系统消息。 表 15-1 ...

    linux学习总结.doc

    4. 日志轮替:日志文件可以通过 logrotate 工具来轮替,/etc/logrotate.conf 文件是 logrotate 的配置文件。 七、启动管理 1. GrubShell:Grub 是 Linux 操作系统中的一个启动管理工具。 2. 启动管理:echo 命令...

    入门linux基础之日志管理篇

    第一类日志:rsyslogd:系统专职日志程序,处理绝大部分日志记录,系统操作有关的信息,如登录信息,程序启动关闭信息,错误信息。 第二类日志:httpd/nginx/mysql :各类应用程序,可以以自己的方式记录日志。 查看...

    如何在Ubuntu 18.04 LTS上安装Rsyslog.doc

    Rsyslog作为默认的日志服务,负责处理和管理这些日志数据。 要安装Rsyslog,你需要确保你的Ubuntu 18.04 LTS系统是最新的。打开终端并运行以下命令来更新系统包列表: ```bash sudo apt update ``` 接下来,你可以...

Global site tag (gtag.js) - Google Analytics