rsyslogd配置分析

ubuntu 版本:18.04

日志配置

rsyslog服务用于管理syslog

其配置文件位于 /etc/rsyslog.conf,分析下其中的配置项:

/etc/rsyslog.conf

# provides UDP syslog reception
#module(load="imudp")
#input(type="imudp" port="514")

# provides TCP syslog reception
#module(load="imtcp")
#input(type="imtcp" port="514")

监听514端口,进程可通过socket记录日志

$template tetraFormat,"%TIMESTAMP% %HOSTNAME% <%syslogseverity-text%> %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n"
$ActionFileDefaultTemplate tetraFormat

规定名为 tetraFormat 的日志格式,并将其设置为默认格式

# Filter duplicated messages
$RepeatedMsgReduction on

开启重复的log折叠功能

#
# Set the default permissions for all log files.
#
$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$PrivDropToUser syslog
$PrivDropToGroup syslog

文件权限设置


#
# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf
#$IncludeConfig /etc/outchannel.conf

引用了其他配置文件

# Qualcomm applications
$template QualcommDynFile,"/var/log/Qualcomm/%programname%.log"

# fsm_fpga_lib
If $syslogtag contains 'fsm_fpga_lib'
or $syslogtag contains 'fsm_dp_lib'
or $syslogtag contains 'fsm_temp_lib'
or $syslogtag contains 'diagfwd'
or $syslogtag contains 'kickstart'
or $syslogtag contains 'fsmMonitor'
or $syslogtag contains 'tti_intr_test'
or $syslogtag contains 'fsm_rf_lib'
or $syslogtag contains 'fsm_mace'
or $syslogtag contains 'tfcsSvc'
or $syslogtag contains 'syncMgr'
or $syslogtag contains 'extPPS'
or $syslogtag contains 'extClk'
or $syslogtag contains 'calMgr'
then {
        *.*             ?QualcommDynFile
}

定义了系列文件,将高通模块的日志转储到各自tag名称的文件中

/etc/rsyslog.d/50-default.conf:

*.*;auth,authpriv.none          -/var/log/syslog

*.* 表示记录所有设施和所有优先级。

auth,authpriv.none 表示不要记录auth和authpriv工具。

-/var/log/syslog表示登录到文件/ var / log / syslog。前面的破折号告诉syslogd不要调用fsync(),即在每次写入文件后不要将内核缓冲区刷新到磁盘。

日志大小监控,滚动转储

两种方法:

  1. $outchannel
    /etc/rsyslog.conf 中 $IncludeConfig /etc/outchannel.conf 引用了syslog 的监控
# Copyright (c) 2020 Qualcomm Technologies, Inc.
# All Rights Reserved.
# Confidential and Proprietary - Qualcomm Technologies, Inc.

# log rotation via outchannel
$outchannel log_rotation, /var/log/syslog, 10485760, /usr/local/bin/log_rotation_script
# Activate outchannel
*.* :omfile:$log_rotation

定义名叫 log_rotation 的outchannel, 限制文件大小是 10485760, 单位是Byte, 也就是10M。当大小超过10M,则会执行 /usr/local/bin/log_rotation_script

但这个脚本在我们设备上执行有问题,满10M后会停止记录,也没有进行转储

  1. logrotate

参考:
https://www.cnblogs.com/rendd/p/17240086.html
https://www.cnblogs.com/rendd/p/17172859.html

logrotate对syslog的配置文件

/etc/logrotate.d/rsyslog

/var/log/syslog
{
        size 30M
        rotate 7
        missingok
        notifempty
        delaycompress
        compress
        postrotate
                /usr/lib/rsyslog/rsyslog-rotate
        endscript
}

/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
{
        rotate 4
        weekly
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
        postrotate
                /usr/lib/rsyslog/rsyslog-rotate
        endscript
}

logrotate 用来转储日志文件,分割压缩日志,删除旧的,创建新的

logrotate 一般系统会自带,不需要自己安装

logrotate 处理日志,依靠 cron 每天在执行时间自动执行

配置文件

  • 主配置是 /etc/logrotate.conf,自动执行的日志转储都通过主配置文件引入。

  • 默认引入的是 /etc/logrotate.d/ 目录,通常都放在这里。

  • 状态记录文件,/var/lib/logrotate/logrotate.status

  • 自动执行 logrotate,依赖 /etc/cron.daily/logrotate

  • 主配置中定义了公用的配置,根据需求进行配置

    • 轮询日志文件,每周一次。 weekly
    • 转储保存日志数量。rotate 4
    • 转储旧日志后,创建一个新日志文件。create
    • 转储日志用当前日期命名。dateext
    • 压缩转储后的日志。compress
  • 自定义配置项后,会覆盖主配置的默认值

    配置参数说明

  • compress 用 gzip 压缩转储后的日志

  • nocompress 不压缩转储文件

  • copytruncate 日志文件备份并截断,先备份再清空,中间时间差可能会丢失日志

  • nocopytruncate 备份日志文件但不截断

  • create <mode owner group> 指定新建文件属性(权限 用户 用户组)

  • nocreate 不创建新文件

  • delaycompress 转储的文件到下一次才压缩

  • nodelaycompress 转储的同时压缩

  • missingok 日志不存在时跳过,继续下一个日志

  • errors <address> 转储的错误信息发送到指定邮箱

  • ifempty 日志为空时也进行转储

  • notifempty 日志为空时不转储

  • mail <address> 转储的日志文件发送到指定邮箱

  • nomail 转储时不发送日志文件

  • olddir <directory> 转储日志文件放到指定目录

  • noolddir 转储日志和当前日志放在同一目录

  • sharedscripts 执行 postrotate 脚本,所有日志转储后统一执行一次脚本

  • prerotate...endscript 转储前执行的脚本,需独立一行

  • postrotate...endscript 转储后执行脚本,需独立成行

  • daily 转储周期为每天一次

  • weekly 转储周期为每周一次

  • monthly 转储周期为每月一次

  • rotate <count> 转储文件保存个数,

  • dateext 转储文件命名格式为当前日期

  • dateformat <.%m> 转储文件命名格式,结合 dateext 使用,有 %Y、%m、%d、%s 四种格式

  • size <file size> 文件超过指定大小才会转储(如:100k、2M、5(byte))

  • minsize 作用同 size

    手动转储

    • 执行 /etc/logrotate.d/ 下的配置文件
    logrotate -f -v /etc/logrotate.d/bootlog
    

    定时转储

    logrotate依靠cron来实现定时执行

    系统会定时执行/etc/cron.daily/logrotate这个脚本

    #!/bin/sh
    
    # Clean non existent log file entries from status file
    cd /var/lib/logrotate
    test -e status || touch status
    head -1 status > status.clean
    sed 's/"//g' status | while read logfile date
    do
        [ -e "$logfile" ] && echo "\"$logfile\" $date"
    done >> status.clean
    mv status.clean status
    
    test -x /usr/sbin/logrotate || exit 0
    /usr/sbin/logrotate /etc/logrotate.conf
    

    cron的执行时间见/etc/crontab

    # /etc/crontab: system-wide crontab
    `# Unlike any other crontab you don't have to run the `crontab'`
    # command to install the new version when you edit this file
    # and files in /etc/cron.d. These files also have username fields,
    # that none of the other crontabs do.
    
    SHELL=/bin/sh
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    
    # m h dom mon dow user command
    17 * * * * root cd / && run-parts --report /etc/cron.hourly
    25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
    47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
    52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
    #
    

    Ubuntu调用run-parts命令,定时运行四个目录下的所有脚本。

    /etc/cron.hourly下的脚本会被每小时运行一次,在每小时的17分时运行。

    /etc/cron.daily下的脚本会被每天运行一次,在每天6点25分运行。

    /etc/cron.weekly下的脚本会被每周运行一次,在每周第7天的6点47分运行。

    /etc/cron.monthly下的脚本会被每月运行一次,在每月1号的6点52分运行。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值