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(),即在每次写入文件后不要将内核缓冲区刷新到磁盘。
日志大小监控,滚动转储
两种方法:
- $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后会停止记录,也没有进行转储
- 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分运行。
- 执行