docker配合syslog

可以访问我的码云,初始化服务器脚本,里面集成了一键配置https://gitee.com/buyfakett/centos7_initialization

需要安装docker-ce才能用,用yum安装的不能安装!!!

配置syslog

vi /etc/rsyslog.conf

#把tcp两行注释去掉
$ModLoad imtcp
$InputTCPServerRun 514

systemctl restart rsyslog
systemctl status rsyslog

给docker配置rsyslog

cat /etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://pee6w651.mirror.aliyuncs.com"
  ],
  "data-root": "/data/data-docker",
  "log-driver": "syslog",
  "log-opts": {
    "syslog-address": "tcp://127.0.0.1:514",
    "tag": "docker/{{.Name}},"
   }
}
data-root  #指定镜像容器存放的位置
log-driver #创建一个日志处理的服务
log-opts   #日志服务的参数
  syslog-address  #tcp 公网ip
  tag             #日志存放的位置,具体路径在模板处设置
                    
systemctl restart docker
systemctl status docker

创建一个rsyslog模板

cd /etc/rsyslog.d
#新建模板
vi rule.conf
#最开始要添加这些
# #011替换成tab
$EscapeControlCharactersOnReceive off
# 删除日志首位空格,只保留原日志
$template CleanMsgFormat,"%msg:2:$%\n"


#### bind ####
# 定义 bind 日志模版
### 拦截全部docker日志
$template docker,"data/logs/docker/%syslogtag:F,44:1%/%$YEAR%-%$MONTH%-%$DAY%.log"
if $syslogtag contains 'docker' then ?docker;CleanMsgFormat
& ~
#& stop 类似于java 的break

#### nginx ####
$template nginx,"/data/logs/nginx/%programname%-%timereported:0:10:date-rfc3339%-%HOSTNAME%.log"
if $programname startswith 'nginx' then ?nginx;CleanMsgFormat
& stop
systemctl restart rsyslog
systemctl status rsyslog
$template bind,"/data/logs/......"
 # 日志的绝对路径 和 daemon.json中的 tag参数 拼接 的路径为 日志具体存放地址

将模板放到docker的配置上

日志自动压缩+自动删除

#放在/data/logs/docker/这一层
cat del_gz.sh 
#!/bin/bash
find /data/logs/ -mtime +3 -name "*.gz" -exec rm -rf {} \;


gzip_log.sh 
#!/bin/bash

for day in 1;
do
find /data/logs/ -name `date -d "${day} days ago" +%Y-%m-%d`*.log -type f -exec gzip {} \;
done
crontab -e
0 12 * * * /bin/sh -x /data/logs/docker/gzip_log.sh