多台服务器日志怎么统一清理?Ansible、Cron与cpolar自动化方案

前言

日志是排查故障、分析访问行为和追踪系统状态的重要依据,但日志文件如果缺少合理的保留和清理策略,也会逐渐变成服务器上的隐患。Web服务、数据库、定时任务和业务程序在持续运行过程中都会不断写入日志,有些应用每天只增加几十MB,有些高并发服务可能在短时间内产生数GB数据。磁盘空间被占满后,受影响的不只是日志写入,数据库、容器和其他依赖磁盘的服务也可能随之异常。

单台测试服务器出现日志堆积时,管理员登录主机后手动清理,通常很快就能解决问题。但服务器数量增加以后,这种处理方式很难长期维持。逐台连接、确认目录、检查文件时间、执行清理命令,再回到监控系统确认磁盘是否恢复,整个过程会重复占用大量时间。不同人员操作时,清理范围和命令也可能不一致,既容易遗漏节点,也存在误删仍需保留日志的风险。

Ansible适合把分散在多台服务器上的清理任务统一起来。运维人员可以在一台控制端维护主机清单和Playbook,把日志路径、文件状态、执行权限和返回结果写成可复用的YAML任务。新增服务器后只需加入主机清单,同一份清理规则便可以批量下发,不必再为每台机器单独准备脚本。执行结果也会集中返回,哪些节点成功、哪些节点连接失败,可以直接在控制端查看。

Cron解决的是任务执行频率问题。Ansible负责将清理动作标准化,Cron则按照设定时间自动调用Playbook。例如每天凌晨检查并处理指定日志,或者每周执行一次历史文件清理,都可以由定时任务完成。两者配合后,日志维护从临时发现问题再人工处理,变成按照固定规则持续执行。对于服务器数量较多、日志路径统一或者需要集中管理的环境,这种方案比依赖人工巡检更容易保持一致。

这套组合也有适用边界。只有一台服务器,并且主要按照文件大小和保留天数轮转日志时,系统自带的logrotate通常更简单;当多台服务器需要统一下发策略、集中执行和记录结果时,Ansible的优势才会更明显。清理规则也不应直接使用范围过大的删除命令,而应明确目录、文件类型、保留时间和排除条件。正式环境中还应先执行预览或测试任务,确认匹配结果后再进行删除或清空。

当Ansible控制端与目标服务器位于不同网络时,SSH连接又会成为自动化执行的前提。通过cpolar为内网主机建立TCP隧道,可以让控制端使用公网域名和端口连接目标服务器,原有Playbook无需修改任务逻辑,只需调整主机清单中的连接地址。这样,无论节点位于办公室、家庭网络还是异地机房,都可以纳入同一套日志清理流程。

1.什么是Ansible?为何选择Ansible?

Ansible是一款开源的自动化运维工具,旨在简化配置管理、应用部署、任务编排和IT编排等操作。其核心设计理念是"简单、可靠、无侵入",通过声明式语言实现对大规模基础设施的高效管控。

在传统运维模式下,面对数百台服务器的批量操作,往往依赖脚本循环执行SSH命令,不仅效率低下,还难以保证执行的一致性与可追溯性。Ansible的出现有效解决了这一痛点,使运维人员能够以一条命令完成跨节点的标准化操作。

核心优势:

  • 无代理架构

Ansible无需在目标主机上安装额外客户端或代理程序,仅依赖标准SSH服务即可完成通信与指令下发。这显著降低了系统开销与维护复杂度,同时避免了因中心化代理服务故障导致的全局性风险。

  • 基于SSH的安全通信

利用成熟的SSH协议进行连接,天然支持密钥认证、跳板机、堡垒机等企业级安全策略,确保操作过程的安全合规。

  • 幂等性保障

Ansible的模块设计遵循幂等原则------无论Playbook被执行多少次,系统最终状态始终保持一致。这一特性对于生产环境中的配置修复、状态校验和持续同步至关重要。

  • YAML驱动的声明式语法

使用结构清晰、易于阅读的YAML格式编写Playbook,大幅降低学习成本,提升协作效率与可维护性。

  • 丰富的模块生态

Ansible内置数千个模块,覆盖操作系统、网络设备、数据库、中间件及主流云平台,支持从基础资源管理到复杂业务编排的全场景自动化需求。

凭借上述特性,Ansible已成为DevOps实践中广泛采用的自动化引擎,助力企业实现高效、可靠、可重复的基础设施即代码管理。

2.在Centos7上安装ansible

更新所有系统软件包:

sql 复制代码
 yum update -y 

安装EPEL仓库(提供 Ansible 包):

arduino 复制代码
 yum install -y epel-release

安装ansbile:

验证是否安装成功:

css 复制代码
ansible --version

3.模拟大量日志输入

在另一台机器创造/ceshi/1.log文件,用于案例清空日志:

bash 复制代码
mkdir /ceshi
cd /ceshi
touch 1.log

写一个简单、高效的 Shell 脚本,用于持续向 1.log 文件追加内容:

复制代码
vi write_log.sh
bash 复制代码
#!/bin/bash
​
LOG_FILE="1.log"
INTERVAL=1  # 每隔多少秒写入一次(可修改)
​
# 捕获 Ctrl+C 信号,优雅退出
trap 'echo -e "\n停止写入日志..."; exit 0' SIGINT
​
echo "开始向 $LOG_FILE 持续写入日志(按 Ctrl+C 停止)..."
​
while true; do
    # 写入当前时间 + 自定义信息
    echo "$(date '+%Y-%m-%d %H:%M:%S') - 这是一条自动写入的日志消息" >> "$LOG_FILE"
​
    # 可选:写入随机数、进程ID等(取消注释即可)
    # echo "$(date): Random=$(shuf -i 1-100 -n 1), PID=$$" >> "$LOG_FILE"
​
    sleep "$INTERVAL"
done

给脚本执行权限:

bash 复制代码
 chmod +x write_log.sh

运行脚本:

bash 复制代码
./write_log.sh

停止:按Ctrl + C

日志模拟成功啦,通过它的不断插入,我们可以看出来日志占比容量也是不断增加的,时间久了就会有很大的负担,对此,别急ansible来帮助你!

4.配置ansible自动化脚本

确保你在playbook所在目录(假设是 /etc/ansible):

bash 复制代码
cd /etc/ansible

编辑hosts文件,加入你所要监控的ip和他的用户名及密码:

ini 复制代码
[test]
ip ansible_ssh_user=用户名 ansible_ssh_pass=密码

使用Ansible编写一个YAML文件,用于自动清理指定服务器上的/ceshi/1.log文件。以下是完整 cleanup.yml示例:

yaml 复制代码
---
- name: 清空 /ceshi/1.log 文件内容
  hosts: dbservers
  become: yes
  tasks:
    - name: 清空 /ceshi/1.log 文件
      copy:
        content: ""
        dest: /ceshi/1.log
        mode: '0644'
      register: result

    - name: 输出操作结果
      debug:
        msg: "/ceshi/1.log 文件内容已被清空"
      when: result.changed

然后使用ansible-playbook执行就好啦:

css 复制代码
ansible-playbook -i hosts 4.yml

接下来我们去目标主机查看一下/ceshi/1.log是否清理成功(我这里是192.168.42.146):

我们可以看到,该目录已经清除成功~

手动反复执行未免繁琐,不如为4.yml配置定时任务,实现定时执行,自动清理。

5.结合cron定时清理

添加定时任务(crontab)

查看ansible-playbook路径:

bash 复制代码
which ansible-playbook

编辑root用户的定时任务:

复制代码
crontab -e

添加一行(每天02:00执行):

bash 复制代码
0 2 * * * /usr/bin/ansible-playbook -i /etc/ansible/hosts /etc/ansible/4.yml >> /etc/ansible/ansible_cleanup.log 2>&1

如图可以看出,本来目标地址的1.log文件是有内容的,经过定时执行ansible的配置文件4.yml文件后,目标地址的1.log文件被清空:

在传统运维中,手动清理日志不仅繁琐,还容易遗漏。借助Ansible + Cron,我们已能实现本地服务器日志的全自动清空;而当你的服务部署在内网、无公网IP时,cpolar成了打通自动化"最后一公里"的关键------通过cpolar建立安全隧道,Ansible控制端可远程访问内网主机,即使身处异地,也能让定时清理任务精准执行。

从此,无论服务器藏得多深,日志清理都能准时、静默、可靠地完成。

6.安装cpolar实现随时随地开发

6.1 什么是cpolar?

cpolar是一款安全高效的内网穿透工具,无需公网IP或复杂配置,只需一条命令,即可将本地服务器、Web服务或任意端口映射到公网,让你随时随地远程访问内网应用,特别适合开发调试、远程运维和应急部署等场景。

6.2 部署cpolar

cpolar 可以将你本地电脑中的服务(如 SSH、Web、数据库)映射到公网。即使你在家里或外出时,也可以通过公网地址连接回本地运行的开发环境。

❤️以下是安装cpolar步骤:

使用一键脚本安装命令:

arduino 复制代码
sudo curl https://get.cpolar.sh | sh

安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)

lua 复制代码
sudo systemctl status cpolar

Cpolar安装和成功启动服务后,在浏览器上输入虚拟机主机IP加9200端口即:【http://ip:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可:

打开浏览器访问本地9200端口,使用cpolar账户密码登录即可,登录后即可对隧道进行管理。

7.配置公网地址

通过配置,你可以在本地 WSL 或 Linux 系统上运行 SSH 服务,并通过 Cpolar 将其映射到公网,从而实现从任意设备远程连接开发环境的目的。

  • 隧道名称:可自定义,本例使用了:ssh,注意不要与已有的隧道名称重复
  • 协议:tcp
  • 本地地址:22
  • 端口类型:随机临时TCP端口
  • 地区:China Top

创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址,接下来就可以在其他电脑或者移动端设备(异地)上,使用任意一个地址在终端中访问即可。

  • tcp 表示使用的协议类型
  • 2.tcp.cpolar.top是 Cpolar 提供的域名
  • 10807是随机分配的公网端口号

通过 Cpolar 提供的公网地址和端口,就可以使用ansible进行远程部署啦!

接下来我们操作一下。

修改hosts配置文件:

ini 复制代码
[dbservers]
2.tcp.cpolar.top ansible_user=root ansible_port=10807 ansible_password=***

接下来我们执行配置文件:

css 复制代码
ansible-playbook -i hosts 4.yml

执行成功,我们去对应主机查看/ceshi/1.log是否清除成功:

8.保留固定TCP公网地址

使用cpolar为其配置TCP地址,该地址为固定地址,不会随机变化。

选择区域和描述:有一个下拉菜单,当前选择的是"China VIP"。 右侧输入框,用于填写描述信息。 保留按钮:在右侧有一个橙色的"保留"按钮,点击该按钮可以保留所选的TCP地址。 列表中显示了一条已保留的TCP地址记录。

  • 地区:显示为"China Top"。
  • 地址:显示为"5.tcp.cpolar.top:13501"。

登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理------隧道列表,找到所要配置的隧道ssh,点击右侧的编辑

修改隧道信息,将保留成功的TCP端口配置到隧道中。

  • 端口类型:选择固定TCP端口
  • 预留的TCP地址:填写保留成功的TCP地址

点击更新

创建完成后,打开在线隧道列表,此时可以看到随机的公网地址已经发生变化,地址名称也变成了保留和固定的TCP地址。

这样我们的ansible操作就没有任何的阻碍啦!

总结

Ansible与Cron的组合,将日志清理拆分成了两个明确环节:Ansible负责把清理规则统一应用到多台服务器,Cron负责按照固定时间自动触发任务。相比逐台登录后手动操作,这种方式更容易保持路径、权限和执行结果的一致,也便于后续修改规则和增加新的服务器节点。

cpolar补充了解决异地网络连接的问题,使位于内网、没有公网IP的服务器也能被Ansible控制端管理。不过,远程自动化执行应尽量使用SSH密钥和独立运维账号,避免在hosts文件中长期保存明文密码;涉及删除任务时,还应设置清晰的目录范围、保留周期和执行日志。对于单机环境,logrotate可能更加轻量;对于多节点、跨网络和需要统一策略的场景,Ansible、Cron与cpolar组成的方案更适合长期维护。

相关推荐
浮游本尊2 小时前
Java学习第45天 - 消息队列入门、异步解耦与最终一致性(RabbitMQ / RocketMQ)
后端
fallen_fish2 小时前
多路径写入一致性:从一次 Debug 到系统性防御
后端
用户298698530142 小时前
Word 文档字符级格式化:Java 实现方案详解
java·后端
血小溅2 小时前
Skill 脚本语言选型:Python、Node.js、Shell 到底怎么选?
人工智能·后端
Heracles10242 小时前
一篇文章教你学会MCP
后端
范闲2 小时前
Charmbracelet TUI 生态系统指南
后端
颜进强2 小时前
AI性能参数-截断、延迟与流式输出
前端·后端·ai编程
浮游本尊2 小时前
Java学习第44天 - 本地二级缓存 Caffeine、Redis 分布式锁与热点 Key / 库存预扣
后端
浮游本尊2 小时前
Java学习第43天 - Redis 缓存基础、Cache-Aside 模式与缓存一致性
后端