如何使用 Bash 脚本自动化清理 Nacos 日志文件

如何使用 Bash 脚本自动化清理 Nacos 日志文件

在现代的分布式系统中,Nacos 作为服务发现、配置管理和动态服务管理的核心组件,其日志文件的管理显得尤为重要。随着系统的运行,日志文件会不断累积,占用大量磁盘空间。如果不及时清理,可能会导致磁盘空间不足,影响系统性能甚至导致服务中断。本文将介绍如何通过一个简单的 Bash 脚本自动化清理 Nacos 的日志文件,保留最近 30 天的日志,同时记录清理操作的日志。

背景与需求

在 Nacos 的运行过程中,日志文件通常会以 access_log.日期.log 的格式命名,例如 access_log.2023-10-01.log。随着时间的推移,这些日志文件会不断累积,占用大量磁盘空间。为了保证系统的稳定运行,我们需要定期清理这些日志文件,同时保留最近 30 天的日志以备后续分析和排查问题。

脚本设计与实现

为了实现自动化清理日志文件的需求,我们设计了一个 Bash 脚本,其主要功能包括:

  1. 日志文件的清理:删除超过 30 天的日志文件。
  2. 日志记录:将每次清理操作的详细信息记录到一个独立的日志文件中,方便后续审计和排查问题。

以下是脚本的详细实现:

bash 复制代码
#!/bin/bash

# 输出日志位置
logFile="/data/nacos/nacos/bin/nacos_del_access.log"
# 保留30天日志
dateLog=$(date --date="-30 days" +%Y-%m-%d)

# 具体位置可调整
logDir="/data/nacos/nacos/bin/logs"

# 检查日志文件是否存在
if [ ! -f "${logFile}" ]; then
    touch "${logFile}"
    echo "Created log file: ${logFile}"
fi

# 遍历日志目录中的所有文件
for file in "${logDir}/access_log."*".log"; do
    # 提取文件名中的日期部分
    fileName=$(basename "$file")
    fileDate=$(echo "$fileName" | grep -oE '[0-9]{4}-[0-9]{2}-[0-9]{2}')

    # 检查文件名是否包含日期
    if [ -n "$fileDate" ]; then
        # 比较日期,如果文件日期早于或等于30天前的日期,则删除
        if [ $(date -d "$fileDate" +%s) -le $(date -d "$dateLog" +%s) ]; then
           rm -f "$file"
           curDate=$(date --date='0 days ago' "+%Y-%m-%d %H:%M:%S")
           echo "[${curDate}] Deleted file: ${file}" >> "${logFile}"
        fi
    fi
done

脚本解析

  1. 日志文件路径与保留期限:

    • logFile:定义了清理操作日志的存储路径。
    • dateLog:计算出 30 天前的日期,用于判断日志文件是否需要删除。
  2. 日志目录:

    • logDir:定义了 Nacos 日志文件的存储路径。
  3. 日志文件检查与创建:

    • 如果清理操作日志文件不存在,则创建该文件,并记录创建信息。
  4. 遍历日志文件:

    • 使用 for 循环遍历日志目录中所有以 access_log. 开头并以 .log 结尾的文件。
  5. 提取文件名中的日期:

    • 使用 grep 和正则表达式提取文件名中的日期部分。
  6. 日期比较与文件删除:

    • 将文件名中的日期与 30 天前的日期进行比较,如果文件日期早于或等于 30 天前的日期,则删除该文件。
    • 将删除操作的详细信息记录到清理操作日志文件中。

使用方法

  1. 脚本部署:

    • 将脚本保存为一个文件,例如 clean_nacos_logs.sh。

    • 赋予脚本执行权限:

      bash 复制代码
      chmod +x clean_nacos_logs.sh
  2. 定期执行:

    • 可以通过 cron 定时任务定期执行脚本。例如,每天凌晨 2 点执行:

      bash 复制代码
      crontab -e

      添加以下内容:

      bash 复制代码
      0 2 * * * /path/to/clean_nacos_logs.sh
  3. 参数调整:

    • 如果需要调整保留的日志天数,可以修改脚本中的 dateLog 变量。
    • 如果日志文件存储路径不同,可以修改 logDir 和 logFile 变量。

总结

通过上述 Bash 脚本,我们可以实现 Nacos 日志文件的自动化清理,确保系统磁盘空间的合理使用,同时保留必要的日志文件以备后续分析。该脚本简单易用,可以根据实际需求进行调整和扩展。对于需要管理大量日志文件的系统,这种自动化清理方法可以显著提高运维效率,降低系统维护的复杂性。

相关推荐
星恒随风21 分钟前
Linux Socket TCP编程(二):逐文件重构多进程、多线程与线程池服务器,深入fork、pthread_create、popen和std::bind
linux·服务器·笔记·学习·tcp/ip
晚风叙码21 分钟前
Linux 进程概念(下):程序地址空间与虚拟内存
linux·服务器·算法
无足鸟ICT38 分钟前
【RHCA+】影响Linux系统性能的因素
linux·运维·服务器
沫璃染墨1 小时前
从零入门计算机网络系列(十):HTTP协议进阶——从资源路径解析到状态码与请求头详解
linux·运维·服务器·网络·c++·http
小则又沐风a1 小时前
深入了解五种IO模型与非阻塞IO
linux
Sayai1 小时前
Ubuntu 开发环境搭建避坑(一):网卡 EEE 致 60% 周期性丢包,Realtek RTL8125 网络黑洞排查与修复
linux·运维·网络·ubuntu·性能优化
墨染天姬1 小时前
【linux 网络1】数据怎么进网卡到内核?
linux·运维·网络
崇子嵘1 小时前
上云方案硬件部分分析
linux
小嘉丶学长1 小时前
Day13 · 列表与元组
linux·运维·服务器·开发语言·python
zuiyuewentian2 小时前
借助 AI 在 Win11 上搭建 Rocky Linux:用 Visual Studio 直接调试 Linux 服务
linux·运维·visual studio