【nacos优化】定时删除access日志

​ 按理说 Nacos 作为服务注册中心,不会应该会产生太多日志的,本身涉及的服务也不多,但几天就会产生 1G 以上的日志,的确有点疯狂。这篇文章就聊聊 Nacos 的日志系统。

经过排查,其中输出最多的日志为 /usr/local/nacos/bin/logs/access_log.yyyy-mm-dd.log 格式的日志。日志中包含了微服务系统调用 Nacos 及集群之间通信的日志,比如心跳 (/nacos/v1/ns/instance/beat) 、获取服务列表 (/nacos/v1/ns/instance/list) 、状态检查 (/nacos/v1/ns/service/status) 等。

我们知道 Nacos 是基于 Spring Boot 实现的,access_log 日志是 Spring Boot 提内置的Tomcat的访问日志。关于该项日志的配置,没有保留最大天数,也没有日志大小的控制。而且随着 Nacos Server 与各个服务直接的心跳、获取、注册等会不停的产生访问日志,微服务越多,日志增长越快。这些日志打印会迅速占用完磁盘空间,带来资源浪费和运维成本。

一、生产环境

1.编写脚本文件

脚本一

#!/bin/bash

# 输出日志位置
logFile="/opt/payment/soft/nacos/nacos/bin/logs/nacos_del_access.log"
# 保留7天日志
dateLog=`date -d "-7 day" +%Y-%m-%d`
 
# 具体位置可调整
delFilePath="/opt/payment/soft/nacos/nacos/bin/logs/access_log.${dateLog}.log"
 
# 日志文件存在,则删除
if [ -f "${delFilePath}" ];then
    rm -rf ${delFilePath}
    curDate=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"`
    echo '['${curDate}'] 删除文件'${delFilePath} >>${logFile}
fi

脚本二

#!/bin/sh

############################
#$1 nacos home
#$2 log save days
#############################

logs_path=$1
savedays=$2

echo $(date)-----------------clean >> ./nacosClean.log
#清理logs文件夹下的access.log文件
delList=$(find $logs_path/logs/ -mtime +$savedays -name "access_log.*.log")
#echo $delList >> ./nacosClean.log
for i in $delList
 do
   rm -rf $i
   echo $i>>./nacosClean.log
 done
 
#清理bin文件夹下的access.log文件
delList=$(find $logs_path/bin/logs/ -mtime +$savedays -name "access_log.*.log")
#echo $delList >> ./nacosClean.log
for i in $delList
 do
   rm -rf $i
   echo $i>>./nacosClean.log
 done
 
#清理logs文件夹下的其它文件
delList=$(find $logs_path/logs/ -mtime +$savedays -name "*.log.*")
#echo $delList >> ./nacosClean.log
for i in $delList
 do
   rm -rf $i
   echo $i>>./nacosClean.log
 done

2.赋权限

chmod 755 nacosDelAccessLogs.sh

3.添加或更新linux系统中crontab指令

添加 crontab -e
查看 crontab -l
删除 crontab -r

4.添加定时执行指令

0 23 * * * /usr/local nacosDelAccessLogs.sh (23点执行脚本)

crontab表达式可自行百度查询

5.启动服务

①第一种
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
service crond status //查看状态

②第二种
systemctl start crond.service //启动服务
systemctl stop crond.service //关闭服务
systemctl restart crond.service //重启服务
systemctl reload crond.service //重新载入配置
systemctl status crond.service //查看状态

其他优化方式:

1、日志级别动态调整

关于 Nacos Server 日志的输出级别,在1.1.3版本之前,同样会打印大量的日志,而且没办法动态的进行调整。在此版本之后,日志输出得到了优化,并且支持通过 API 的形式来进行日志级别的调整,示例如下:

# 调整naming模块的naming-raft.log的级别为error: 
curl -X PUT '$nacos_server:8848/nacos/v1/ns/operator/log?logName=naming-raft&logLevel=error' 
# 调整config模块的config-dump.log的级别为warn: 
curl -X PUT '$nacos_server:8848/nacos/v1/cs/ops/log?logName=config-dump&logLevel=warn' 

2、客户端日志级别调整

业务系统集成的客户端在1.1.3版本之后,也进行了优化,避免日志大量打印(主要涉及心跳日志、轮询日志等)。
在业务系统的application.yml配置文件中,可通过日志级别设置来进行控制:

# 日志级别,可以指定到具体类 
logging: 
  level: 
    com.alibaba.nacos: warn 

3、JVM参数控制

也可以通过启动时的JVM参数来进行控制,默认是info级别:

-Dcom.alibaba.nacos.naming.log.level=warn -Dcom.alibaba.nacos.config.log.level=warn 

上述示例分别指定了Naming客户端和Config客户端的日志级别,适用于1.0.0及以上版本。

4、nacos日志文件nacos-logback.xml配置

<appender name="naming-server" 
          class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>${LOG_HOME}/naming-server.log</file> 
    <append>true</append> 
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> 
        <fileNamePattern>${LOG_HOME}/naming-server.log.%d{yyyy-MM-dd}.%i</fileNamePattern> 
        <maxFileSize>1GB</maxFileSize> 
        <maxHistory>7</maxHistory> 
        <totalSizeCap>7GB</totalSizeCap> 
        <cleanHistoryOnStart>true</cleanHistoryOnStart> 
    </rollingPolicy> 
    <encoder> 
        <Pattern>%date %level %msg%n%n</Pattern> 
        <charset>UTF-8</charset> 
    </encoder> 
</appender> 

这里根据自己的需要,可调整输出的日志格式、日志文件分割、日志保留日期及日志压缩等处理。

二、测试环境

1.修改配置

上述的 access_log 日志输出 Nacos 是提供了控制开关的,在 Nacos 的 conf 目录下 application.properties 配置文件中,默认有以下配置:

server.tomcat.accesslog.enabled=false
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值