【实用的服务器小技巧】docker配合syslog
发表于|更新于
|总字数:458|阅读时长:2分钟|浏览量:
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
|