From e939f5705bc7115472582cfcd4115a33861fe6f0 Mon Sep 17 00:00:00 2001 From: zhangtaohz Date: Tue, 27 Aug 2019 16:20:19 +0800 Subject: [PATCH] =?UTF-8?q?Mod=20aaa-12=20modify=20remote=20format=20RCA?= =?UTF-8?q?=EF=BC=9A=20SOL=EF=BC=9A=20=E4=BF=AE=E6=94=B9=E4=BA=BA=EF=BC=9A?= =?UTF-8?q?zhangtao=20=E6=A3=80=E8=A7=86=E4=BA=BA=EF=BC=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libs/files/log/deal_logfiles.sh | 111 ++++++++++++++++++++++++++++++++ libs/files/log/rsyslog.conf | 64 ++++++++++++++++++ 2 files changed, 175 insertions(+) create mode 100755 libs/files/log/deal_logfiles.sh create mode 100755 libs/files/log/rsyslog.conf diff --git a/libs/files/log/deal_logfiles.sh b/libs/files/log/deal_logfiles.sh new file mode 100755 index 000000000..a2b04215c --- /dev/null +++ b/libs/files/log/deal_logfiles.sh @@ -0,0 +1,111 @@ +#!/bin/bash + +# 本脚本功能: +# 1. 从logrotate配置文件中取出日志文件的路径(所有日志文件均以logrotate配置文件中第一行指示的路径为前缀), +# 2. 从log_sched配置文件中取出日志文件大小上限 +# 3. 计算步骤1指示的日志文件的总大小,检测日志总大小是否超出上限,若超出则删除所有日志文件 + +function deal_logs () +{ + + # logrotate配置文件路径 + logrotate_log_file="/etc/logrotate.d/log-syslog" + + #log_sched配置文件路径 + log_sched_file="/etc/log-sched.conf" + + # 日志文件前缀 + prefix= + + # 日志大小上限 + size_max=0 + + echo "**********************************************************" + echo " logrotate_cfg: $logrotate_log_file" + echo " log_sched_cfg: $log_sched_file" + echo "**********************************************************" + echo "" + + # logrotate配置文件判空 + if [ ! -e $logrotate_log_file ] ; then + return + fi + + # 从logrotate配置文件中第一行有效行中读取出日志文件前缀 + while read line + do + if [ -z $line ] ; then + continue + fi + + prefix=$line; + echo "**********************************************************" + echo " get log-file-prefix: $prefix" + echo "**********************************************************" + echo "" + + break + done < $logrotate_log_file + + if [ -z $prefix ] ; then + echo "get log file failed" + return + fi + + + # log_sched配置文件判空 + if [ ! -e $log_sched_file ] ; then + return + fi + + #从log_sched配置文件中读取出日志大小上限值 + while read line + do + tmpkey="file.max_size=" + + if [[ $line = *$tmpkey* ]] ; then + if [[ $line = $tmpkey ]] ; then + echo "size_max is empty, do nothing and return" + return + fi + + size_max=${line#$tmpkey} + echo "**********************************************************" + echo " get size_max: $size_max" + echo "**********************************************************" + echo "" + + break + fi + done < $log_sched_file + + + if [ $size_max -eq 0 ] ; then + echo "size_max is 0, do nothing and return" + return + fi + + #定期检查日志总大小是否超限 + path=$prefix* + echo " get path: $path" + + folder_size=$(wc -c $path|grep total |awk '{print $1}') + if [ -z $folder_size ] ; then + folder_size=0 + fi + + echo "cursize: $folder_size" + echo "maxsize: $size_max" + + if [ $folder_size -gt $size_max ] ; then + echo "flush folder $path" + rm -rf $path + sync + fi +} + +deal_logs $@ + + + + diff --git a/libs/files/log/rsyslog.conf b/libs/files/log/rsyslog.conf new file mode 100755 index 000000000..30072be32 --- /dev/null +++ b/libs/files/log/rsyslog.conf @@ -0,0 +1,64 @@ +# /etc/rsyslog.conf Configuration file for rsyslog. +# +# For more information see +# /usr/share/doc/rsyslog-doc/html/rsyslog_conf.html +# +# Default logging rules can be found in /etc/rsyslog.d/50-default.conf + + +################# +#### MODULES #### +################# + +module(load="imuxsock") # provides support for local system logging +#module(load="immark") # provides --MARK-- message capability + +# provides UDP syslog reception +#module(load="imudp") +#input(type="imudp" port="514") + +# provides TCP syslog reception +#module(load="imtcp") +#input(type="imtcp" port="514") + +# provides kernel logging support and enable non-kernel klog messages +module(load="imklog" permitnonkernelfacility="on") + +########################### +#### GLOBAL DIRECTIVES #### +########################### + +# +# Use traditional timestamp format. +# To enable high precision timestamps, comment out the following line. +# + +template(name="RFC3164fmt" type="string" string="<%PRI%>%timestamp:::date-rfc3164% %hostname% %syslogtag%%msg%\n") +template(name="RFC5424fmt" type="string" string="<%PRI%>%protocol-version% %timestamp:::date-rfc3339% %hostname% %app-name% %procid% %structured-data% %msgid%%msg%\n") + + +$ActionFileDefaultTemplate RFC5424fmt + +# Filter duplicated messages +$RepeatedMsgReduction on + +# +# Set the default permissions for all log files. +# +$FileOwner syslog +$FileGroup adm +$FileCreateMode 0640 +$DirCreateMode 0755 +$Umask 0022 +$PrivDropToUser syslog +$PrivDropToGroup syslog + +# +# Where to place spool and state files +# +$WorkDirectory /var/spool/rsyslog + +# +# Include all config files in /etc/rsyslog.d/ +# +$IncludeConfig /etc/rsyslog.d/*.conf