【实用的服务器小技巧】docker配合syslog
发表于|更新于
|总字数:458|阅读时长:2分钟|浏览量:
docker配合syslog
可以访问我的码云,初始化服务器脚本,里面集成了一键配置https://gitee.com/buyfakett/centos7_initialization
需要安装docker-ce才能用,用yum安装的不能安装!!!
配置syslog
| 12
 3
 4
 5
 6
 7
 8
 
 | vi /etc/rsyslog.conf
 #把tcp两行注释去掉
 $ModLoad imtcp
 $InputTCPServerRun 514
 
 systemctl restart rsyslog
 systemctl status rsyslog
 
 | 
给docker配置rsyslog
| 12
 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模板
| 12
 3
 
 | cd /etc/rsyslog.d#新建模板
 vi rule.conf
 
 | 
| 12
 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的配置上
日志自动压缩+自动删除
| 12
 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
 
 |