首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Docker 日志切割参考

Docker 日志切割参考

作者头像
用户5760343
发布2019-11-05 17:33:52
发布2019-11-05 17:33:52
2K0
举报
文章被收录于专栏:sktjsktj

nginx 日志切割(也适用于docker)

===============================================

2019/4/6_第2次修改 ccb_warlock

2019/4/6:修复原先脚本无法正确保存日志的问题;

===============================================

配置了记录日志的nginx,在运行较长时间后,产生的日志文件(access.log)会越来越大。

日志文件过大会带来下面的问题:

  • 查询过大的日志文件对于开发和运维十分不方便,特别是加班人很累的情况下更加雪上加霜;
  • 很久以前的日志文件几乎没有价值,但是手工清理又太过繁琐;

这时候就需要一种解决方案可以自动来做日志分割,分割后的日志不仅“干净”,也便于实现日志定时清理。

由于目前的nginx使用docker部署,而公司的业务大都需要nginx始终运行,网上的“停nginx,分割,重启nginx”的方案并不适合,故对网上的方案进行了改进,使得目前的方案也能适应业务运行要求。


一、前提条件

  • 本次部署docker的基础os选择centos 7
  • 本次通过swarm的stack方式部署了nginx容器(https://www.cnblogs.com/straycats/p/9388219.html
  • 本次nginx容器的日志文件持久化在宿主机的目录(/usr/docker-vol/nginx/logs)下
  • 本次每天0:00做日志切割,将切割后的日志文件(access.log、error.log)存放在宿主机的目录(/usr/docker-vol/nginx/logs-bak)下
  • 期望的日志备份目录结构: 1级目录:4位年-2位月 2级目录:4位年-2位月-2位日 3级目录:存放切割后备份的日志文件

image


二、配置nginx容器的日志切割

2.1 编辑cutlogs.sh

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">mkdir -p /opt/sh vi /opt/sh/cutlogs.sh</pre>

将下面的内容添加到cutlogs.sh内,wq保存。

[

复制代码

](javascript:void(0); "复制代码")

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">#!/bin/bash

指定日志和切割后日志备份的目录

YEAR=

(date +%m) DAY=

(date -d "yesterday" +%Y-%m-%d) LOGS_PATH=/usr/docker-vol/nginx/logs LOGS_BAK_PATH=/usr/docker-vol/nginx/logs-bak # 得到1级目录名 if [[

DAY)) -eq 1 ]] then if [[

MONTH)) -eq 1 ]] then LOGS_BAK_PATH=

((

((

LOGS_BAK_PATH/

((

LOGS_BAK_PATH/

((

LOGS_BAK_PATH/

{MONTH} fi # 创建目录 mkdir -p

{YESTERDAY}

复制当前的日志文件到备份的目录

cp

{LOGS_BAK_PATH}/

{YESTERDAY}.log cp

{LOGS_BAK_PATH}/

{YESTERDAY}.log cp

{LOGS_BAK_PATH}/

{YESTERDAY}.log # 清空日志

{LOGS_PATH}/admin_access.log > ${LOGS_PATH}/error.log</pre>

[

复制代码

](javascript:void(0); "复制代码")

2.2 给cutlogs.sh增加权限

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">chmod 777 /opt/sh/cutlogs.sh</pre>

PS.在创建定时任务之前,可以用下面的命令先试验脚本是否存在问题

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">bash /opt/cutlogs.sh</pre>


三、创建定时任务

3.1 编辑crontab

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">vi /etc/crontab</pre>

将下面的内容添加到crontab文件中,wq保存。

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"># 每天0:00执行该脚本 0 0 * * * root bash /opt/sh/cutlogs.sh</pre>

3.2 重启crontab

<pre style="margin: 0px; padding: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">systemctl restart crond</pre>

根据这个方案切割后的日志文件会根据这样的结构进行存放。


后话:

不停机做日志切割可能会出现日志记录丢失的情况(即拷贝走、清空源文件之间会有时间间隔),但是对于目前的业务,一天的日志信息量不大且丢失的日志对于整天的日志来说犹如沧海一粟,故现在先用这个方案来解决docker部署后的nginx日志切割。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • nginx 日志切割(也适用于docker)
  • 一、前提条件
  • 二、配置nginx容器的日志切割
    • 2.1 编辑cutlogs.sh
  • 将下面的内容添加到cutlogs.sh内,wq保存。
  • 指定日志和切割后日志备份的目录
  • 复制当前的日志文件到备份的目录
    • 2.2 给cutlogs.sh增加权限
  • 三、创建定时任务
    • 3.1 编辑crontab
  • 将下面的内容添加到crontab文件中,wq保存。
    • 3.2 重启crontab
  • 后话:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档