docker配合syslog

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

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

配置syslog

1
2
3
4
5
6
7
8
vi /etc/rsyslog.conf

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

systemctl restart rsyslog
systemctl status rsyslog

给docker配置rsyslog

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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模板

1
2
3
cd /etc/rsyslog.d
#新建模板
vi rule.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#最开始要添加这些
# #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的配置上

日志自动压缩+自动删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#放在/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