`

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,有兴趣可以看看。



分享到:
评论

相关推荐

    日志管理-rsyslogd服务

    服务

    linux-日志管理视频教程

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

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

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

    linux基础之日志管理

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

    linux_日志管理和轮转

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

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

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

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

    Daemon程序简介Daemon是长时间运行的进程,通常...Daemon程序一般都作为服务程序使用,等待客户端程序与它通信。我们也把运行的Daemon程序称作守护进程。本文介绍了在Linux下编写Daemon程序的步骤,并给出了例子程序。

    入门linux基础之日志管理篇

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

    Linux命令笔记

    1:日志服务 2:rsyslogd的新特点 3:确定服务启动 4:常见日志的作用(lastb,lastlog,last) 5:其他日志 日志-轮替 1:日志文件的命名规则 2:logrotate配置文件 3:把apache日志加入轮替 4:logrotate日志轮替 ...

    Linux 日志管理

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

    纯C日志函数库zlog.zip

     * 高性能,在我的笔记本上达到338'638条日志每秒, 大概是syslog(3)配合rsyslogd的1000倍速度   * 高可靠性和速度之间的平衡,用户自定义多少条日志后fsync数据到硬盘  * 用户自定义等级  * 多线程和...

    cloudpelican-lsd:日志流转储工具(使用Rsyslog,Kafka和Apache Storm)

    通过将服务器的系统日志转发到Kafka(使用rsyslogd和omkafka作为传输层),可以将所有日志集中在一个流中。 CloudPelican LSD直接位于该流上,并根据您的需求过滤数据。 除了实时分析之外,还可以连接持久数据存储...

    rsyslogd-mongo:mongod db后端到rsyslogd

    使用MongoDB作为后端的插件。 状态:未维护:代码已被推送到上游。 在ubuntu 10.04和ubuntu 10.10中测试 配置: 在/etc/rsyslog.conf中,以及其他模块中:$ ModLoad ommongodb#提供mongodb支持 ...

    rsyslog-8.24.0-57.el7-9.3.x86-64.rpm

    rsyslog安装包,用于linux上日志管理系统

    Ubuntu系统日志配置 /var/log/messages的方法

    今天需要查看系统的日志文件,但却没有找到/var/log/messages这个文件。网上搜素资料,说是要配置/etc/syslog.conf。syslog采用可配置的、统一的系统登记程序,随时从系统各处接受log请求,然后根据/etc/syslog.conf...

    rsyslog-8.24.0-55.el7.x86_64.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    ansible-rsyslog:在类似Debian的系统中管理rsyslog和rsyslog.d的角色

    系统日志 在类似Debian的系统中管理rsyslog和rsyslog.d。 要求 没有任何 变数 rsyslog_repeated_msg_reduction :[默认: true ]:重复消息减少 rsyslog_file_owner :[默认: syslog ,Debian上的root ]:设置新...

    EspSyslog:用于ESP8266的Arduino库可将消息发送到syslog服务器

    Raspbian附带了rsyslogd,它支持远程syslog协议,但是默认情况下禁用此功能。 您需要取消注释/etc/rsyslog.conf的以下行: $ModLoad imudp$UDPServerRun 514然后重新启动rsyslog: systemctl restart rsyslog请注意...

    K8s kubernetes 系统初始化脚本,一键安装部署基础环境,安装依赖包,针对k8s优化的内核参数,升级内核

    2.1 设置主机名和hosts文件解析 2.2 安装依赖包 2.3 设置防火墙为 Iptables 并设置空规则 ...2.7 关闭系统不需要服务 2.8 设置 rsyslogd 和 systemd journald 2.9 升级系统内核为 4.44 一键shell脚本

    locating-ssh-hackers:一个 DIY 项目,在地图上实时显示失败的 ssh 登录尝试

    infludb:时间序列数据库grafana:用于在地图上可视化登录尝试登录收集器:rsyslogd 调用的 tcp 套接字侦听器在第一步中,我们将完成组件的基本设置: 流入数据库格拉法纳登录收集器日志然后在第二步中将配置这些...

Global site tag (gtag.js) - Google Analytics