rsyslog 结合logrotate日志切割处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rsyslog 结合logrotate日志切割处理相关的知识,希望对你有一定的参考价值。
需求
公司日志系统收集规范为: /var/log/业务名/业务名+域名.log(不带日期) /var/log/业务名/业务名+域名-2017-04-25.log(为前一天的日期、业务不做压缩,由运维统一处理) /var/log/业务名 目录的权限为特定用户(系统中的uid、gid固定)
现状
harbor业务由docker容器启用logrotate来收集日志,日志生成规则为/var/log/日期/业务名.log 需要改造容器的logrotate配置实现要求,初期设想是通过logrotate直接实现该需求,通过查找资料得到logrotate仅能实现日志切割,文件名不能自定义实现,仅能处理后缀,需要结合脚本再次处理实现。
1、新增用户nobody并指定uid gid 为500
2、修改rsyslog.conf指定用户为nobody
#cat /etc/rsyslog.conf $ModLoad imuxsock # provides support for local system logging $ModLoad imudp $UDPServerRun 514 $ModLoad imtcp $InputTCPServerRun 514 $template myformat,"[%TIMESTAMP:1:4:date-mysql%-%TIMESTAMP:5:6:date-mysql%-%TIMESTAMP:7:8:date-mysql% %TIMESTAMP:8:15:%.000] [%syslogtag%] %msg%\n" $ActionFileDefaultTemplate myformat $RepeatedMsgReduction on $FileOwner nobody $FileGroup nobody $FileCreateMode 0640 $DirCreateMode 0755 $Umask 0022 $WorkDirectory /var/spool/rsyslog $IncludeConfig /etc/rsyslog.d/*.conf
3、配置logrotate文件将后缀名为test.test.com.log进行日志切割操作
cat /etc/logrotate.d/logrotate_docker.conf # Logrotate configuartion file for docker. /var/log/docker/*/*test.test.com.log { rotate 5 --保留5份 dateext --打上日期标签 missingok dateformat -%Y-%m-%d.log --日期标签格式 daily copytruncate --拷贝清空模式 nocompress --不压缩 postrotate --执行shell命令 /usr/local/bin/log.sh --实现文件名处理 endscript --完成执行shell命令 }
4、确保logrotate配置文件权限为600
ls -lrt /etc/logrotate.d/logrotate_docker.conf -rw------- 1 root root 281 Apr 26 17:24 /etc/logrotate.d/logrotate_docker.conf
5、确保脚本文件权限为755
ls -lrt /usr/local/bin/log.sh -rwxr-xr-x 1 root root 188 Apr 26 17:41 /usr/local/bin/log.sh
6、脚本主要用于处理.log字符问题
logrotate不能自定义文件名,只能在后缀上加上日期或数字,需要脚本将.log字符串去掉符合日志规则
cat /usr/local/bin/log.sh #!/bin/bash time=`date +%Y-%m-%d` #cut .log string for file in `find /var/log/docker/ -name "*log-[0-9]*.log"` do new_file=`echo "$file" | sed ‘s/.log-/-/‘ ` mv $file $new_file
7、处理原生日志生成string逻辑
cat /etc/rsyslog.d/rsyslog_docker.conf # Rsyslog configuration file for docker. template(name="DynaFile" type="string" #string="/var/log/docker/%$now%/%syslogtag:R,ERE,0,DFLT:[^[]*--end:secpath-replace%.log" #default syslogtag like proxy[111349]: string="/var/log/docker/%syslogtag:R,ERE,0,DFLT:[^[]*--end:secpath-replace%/%syslogtag:R,ERE,0,DFLT:[^[]*--end:secpath-replace%.vip.vip.com.log" ) #if $programname == "docker" then ?DynaFile if $programname != "rsyslogd" then -?DynaFile
8、最终生成日志如下
tree /apps/logs/ /apps/logs/ └── harbor ├── docker_jobservice │ ├── docker_jobservice.test.test.com-2017-04-25.log │ └── docker_jobservice.test.test.com.log └── docker_proxy ├── docker_proxy.test.test.com-2017-04-25.log └── docker_proxy.test.test.com.log 3 directories, 4 files
本文出自 “虫子” 博客,请务必保留此出处http://bingdian.blog.51cto.com/94171/1919743
以上是关于rsyslog 结合logrotate日志切割处理的主要内容,如果未能解决你的问题,请参考以下文章