nginx docker环境Logrotate日志切割

本文详细介绍了如何在Docker环境下配置Nginx的日志轮换,包括修改配置文件、检测配置及手动执行轮换的步骤。通过实例展示了如何定制日志轮换策略,如设置日志保留周期、压缩方式等。

首先

如果宿主机安装了docker,他会在/etc/logrotate.d目录下生成一个nginx的文件

nginx和宿主机环境没啥区别,就是把那个执行的命令稍微改改就行了

PS:如果要看nginx的docker安装 https://blog.youkuaiyun.com/wu__peng/article/details/90904409

1,copy一个这个文件,改一个名字docker_nginx ,文件内容如下,经过了稍微修改

(下面那个nginx_01,是我的容器名字,自己弄得时候改成自己的就行;

/home/nginx/logs是我的日志存放路径。

)

/home/nginx/logs/*log {
    su root root
    create 0644 nginx nginx
    daily
    rotate 30
    missingok
    notifempty
    compress
    sharedscripts
    postrotate
         docker exec nginx_01 bash -c "if [ -f /run/nginx.pid ]; then kill -USR1 `docker exec nginx_01 cat /run/nginx.pid`; echo 日志打包完毕; fi"
    endscript
}

2,检测

logrotate -d -f /etc/logrotate.d/docker_nginx

3.执行(手动执行,不等到自动执行)

logrotate -f /etc/logrotate.d/docker_nginx

 

logrotate参数详解:

 

daily                     #指定转储周期为每天
weekly                    #指定转储周期为每周;
monthly                   #指定转储周期为每月;
rotate count              #指定日志文件删除之前转储的次数,0指没有备份,5指保留5个备份;
compress                  #通过gzip压缩转储以后的日志;
nocompress                #不需要压缩时,用这个参数;
delaycompress             #延迟压缩,和compress一起使用时,转储的日志文件到下一次转储时才压缩;
nodelaycompress           #覆盖delaycompress选项,转储同时压缩;
copytruncate              #用于还在打开中的日志文件,把当前日志备份并截断;
nocopytruncate            #备份日志文件但是不截断;
create mode owner group   #转储文件,使用指定的文件模式创建新的日志文件;
nocreate                  #不建立新的日志文件;
errors address            #专储时的错误信息发送到指定的Email地址;
ifempty                   #即使是空文件也转储,这个是logrotate的缺省选项;
notifempty                #如果是空文件的话,不转储;
mail address              #把转储的日志文件发送到指定的E-mail地;
nomail                    #转储时不发送日志文件;
olddir directory          #转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统;
noolddir                  #转储后的日志文件和当前日志文件放在同一个目录下;
prerotate/endscript       #在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行;
postrotate/endscript      #在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行;
tabootext [+] list        #让logrotate不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave,v,和~ ;
size size                 #当日志文件到达指定的大小时才转储,Size可以指定bytes(缺省)以及KB(sizek)或者MB(sizem);
postrotate <s> endscript  #日志轮换过后指定指定的脚本,endscript参数表示结束脚本;
sharedscripts             #共享脚本,下面的postrotate <s> endscript中的脚本只执行一次即可;

 

<think>我们是在Docker环境下查看Nacos的日志切割脚本。根据之前的引用和讨论,我们知道Nacos在Docker容器中运行,而日志切割可能有两种方式: 1. 使用宿主机的logrotate工具,通过配置切割规则来切割容器内的日志(需要挂载日志目录到宿主机,并在宿主机配置logrotate) 2. 在容器内部使用logrotate或其他切割机制,比如使用cron定时任务执行切割脚本 但是,根据引用[1]和引用[2]提供的信息,Nacos官方并没有在容器内部提供现成的日志切割机制,而是需要我们自行配置。引用[2]中给出了一个nginx日志切割的配置示例,我们可以参考类似的方法为Nacos配置。 因此,要查看Docker环境下Nacos的日志切割脚本,我们需要分两种情况: 情况一:使用宿主机的logrotate - 宿主机上通常会在/etc/logrotate.d/目录下有配置文件,我们可以查看是否有为Nacos配置的文件,例如: cat /etc/logrotate.d/nacos - 如果没有,则可能没有配置,或者配置在其他位置。 情况二:容器内部是否有日志切割脚本 - 我们可以进入Nacos容器内部,查看是否有日志切割相关的脚本或定时任务。 由于用户的问题是在Docker环境下查看,我们按照以下步骤: 步骤1:查看宿主机上是否有为Nacos配置的logrotate配置文件 步骤2:如果没有,则进入Nacos容器查看是否有内置的日志切割机制 但是,根据Nacos官方镜像(引用[3]中使用的镜像是nacos/nacos-server:1.4.1)的构建情况,通常不会内置日志切割脚本,而是需要用户自行处理。 因此,我们可能需要查看容器内部是否有日志切割的配置或者脚本。 具体操作步骤如下: 1. 进入Nacos容器: docker exec -it <nacos_container_name> /bin/bash 2. 在容器内部,查看日志目录(通常为/home/nacos/logs或/root/nacos/logs,也可以通过环境变量或配置文件确定)是否有日志切割产生的文件(如带日期的压缩文件),这可以间接判断是否有切割机制。 3. 查看容器内是否有logrotate: which logrotate 如果存在,则查看logrotate的配置文件,通常在/etc/logrotate.conf或/etc/logrotate.d/下的配置文件。 4. 查看容器内的定时任务(因为logrotate通常由cron定时触发): crontab -l 5. 如果没有logrotate,则查看Nacos的启动脚本或应用配置(如logback配置文件)是否配置了日志滚动。 Nacos使用Spring Boot,默认使用logback作为日志框架,因此我们可以在Nacos的配置目录(如/home/nacos/conf)下查找logback的配置文件(如logback.xml、logback-spring.xml等)。 6. 查看logback配置文件,其中可能会配置RollingFileAppender,通过策略(TimeBasedRollingPolicy或SizeBasedTriggeringPolicy)来实现日志切割。 所以,我们重点查看logback的配置文件。 但是,根据引用[1]中提到的,Nacos的文档和配置体验不佳,因此我们可能需要自己查找。 总结方法: 方法一:在宿主机上查看logrotate配置(如果有) 方法二:进入容器内部,查看logback配置文件(主要)和容器内是否有logrotate配置 下面给出具体的命令和可能的路径: 1. 宿主机logrotate配置(若有): cat /etc/logrotate.d/nacos # 可能不存在,或者名称不同 2. 进入容器: docker exec -it nacos /bin/bash # 假设容器名为nacos 3. 查找logback配置文件: find / -name "*logback*.xml" # 或者在Nacos的conf目录下查找 4. 常见的logback配置文件路径: /home/nacos/conf/logback.xml /root/nacos/conf/logback.xml /nacos/conf/logback.xml 5. 查看logback.xml内容,关注<rollingPolicy>标签。 示例logback配置片段(用于按时间切割): <appender name="nacosLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/nacos.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/nacos.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <maxFileSize>1GB</maxFileSize> <maxHistory>7</maxHistory> <totalSizeCap>3GB</totalSizeCap> </rollingPolicy> ... </appender> 其中,<fileNamePattern>定义了切割后的文件名格式(按日期和索引),<maxFileSize>定义单个日志文件的最大大小,<maxHistory>定义保留天数。 所以,在Docker环境下,我们主要查看容器内部的logback配置文件来确定日志切割规则。 如果用户没有修改过,那么默认的配置是什么?我们可以通过查看官方镜像中的配置文件来获取。 由于我们无法直接进入用户容器,我们可以通过以下方式获取默认配置: docker run --rm nacos/nacos-server:1.4.1 cat /home/nacos/conf/logback.xml > logback.xml 然后查看这个文件。 但是,根据用户的问题,他想要查看的是当前运行的容器中的配置,所以进入容器查看更直接。 因此,回答如下: </think>### Docker环境下查看Nacos日志切割脚本的完整指南 在Docker环境中,Nacos日志切割主要通过两种机制实现,以下是详细查看方法: #### 🔍 1. **查看容器内部日志切割配置** Nacos默认使用Logback进行日志切割,查看步骤如下: ```bash # 进入Nacos容器 docker exec -it nacos /bin/bash # 查看日志配置文件路径(通常在此目录) ls /home/nacos/conf/ # 查看Logback配置文件 cat /home/nacos/conf/logback.xml ``` 重点关注配置片段: ```xml <appender name="nacosLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 日志切割规则 --> <fileNamePattern>${LOG_HOME}/nacos-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <maxFileSize>1GB</maxFileSize> <!-- 文件最大尺寸 --> <maxHistory>7</maxHistory> <!-- 保留天数 --> </rollingPolicy> </appender> ``` #### 🖥️ 2. **查看宿主机Logrotate配置** 若通过宿主机管理日志切割(推荐方式),操作步骤如下: ```bash # 查看Nacos的Logrotate配置 cat /etc/logrotate.d/nacos ``` 典型配置参考: ```conf /var/lib/docker/volumes/nacos_logs/_data/*.log { daily # 每日切割 rotate 10 # 保留10份历史日志 dateext # 使用日期后缀 missingok # 日志不存在时不报错 notifempty # 空文件不切割 compress # 压缩旧日志 delaycompress # 延迟压缩 sharedscripts postrotate # 向Nacos容器发送USR1信号重新打开日志文件 docker kill -s USR1 nacos 2>/dev/null || true endscript } ``` 该配置通过`docker kill -s USR1`通知容器重新打开日志文件[^2] #### 📂 3. **验证切割效果** ```bash # 查看日志目录结构 docker exec nacos ls -l /home/nacos/logs # 预期输出示例: nacos.log nacos-2023-12-01.0.log.gz nacos-2023-12-02.0.log.gz ``` #### ️ 切割机制对比 | 配置方式 | 触发机制 | 优势 | 适用场景 | |----------------|--------------------------|--------------------------|----------------------| | Logback内置 | 按文件大小(默认1GB) | 无需外部依赖 | 简单单机部署 | | 宿主机Logrotate| 定时任务(默认每日) | 集中管理所有容器日志 | 生产环境推荐方案[^2] | #### ⚠️ 注意事项 1. **日志卷挂载**:必须将日志目录挂载到宿主机 ```docker docker run -v /宿主机路径:/home/nacos/logs ... ``` 2. **信号通知**:Logrotate需配置`postrotate`发送`USR1`信号 3. **权限问题**:确保宿主机Logrotate进程有容器日志目录读写权限 --- ### 📌 日志切割失败排查步骤 1. **检查Logrotate执行日志**: ```bash grep logrotate /var/log/syslog ``` 2. **手动测试切割**: ```bash logrotate -vf /etc/logrotate.d/nacos ``` 3. **验证容器信号处理**: ```bash docker exec nacos ps aux | grep nacos ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值