运维人的烦恼:脚本写了又忘
每个运维人员都有过这样的经历:
服务器出问题了,需要写个脚本查日志、重启服务、清理磁盘。你写了一次,半年后问题再出现,脚本找不到了,只能重新写。
更麻烦的是,有些脚本是用 Bash 写的,别人看不懂,自己也记不住逻辑。
2026年,LLM+Python的组合可以改变这个局面。AI不仅帮你写脚本,还能解释脚本逻辑、自动优化、甚至生成运行文档。
案例一:智能日志分析
传统做法:
grep "ERROR" /var/log/app.log | tail -100
这只能看到最近的错误。你想了解错误趋势?需要写更复杂的脚本。
用AI辅助:
# ai_log_analyzer.py
import subprocess
from datetime import datetime, timedelta
def analyze_logs(log_path, hours=24):
# 用Python subprocess获取日志
result = subprocess.run(
["tail", "-n", "10000", log_path],
capture_output=True, text=True
)
lines = result.stdout.splitlines()
# 分类错误
errors = {}
warnings = []
for line in lines:
if "ERROR" in line:
# 提取错误类型(去掉具体时间戳和PID)
error_type = clean_error_message(line)
errors[error_type] = errors.get(error_type, 0) + 1
elif "WARN" in line:
warnings.append(line)
return errors, warnings
def clean_error_message(line):
# AI可以优化这段逻辑,去除噪音只保留关键信息
import re
# 移除时间戳
line = re.sub(r'\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\]', '', line)
# 移除PID
line = re.sub(r'pid=\d+', '', line)
return line.strip()
# 使用
errors, warnings = analyze_logs("/var/log/app.log")
for err, count in sorted(errors.items(), key=lambda x: -x[1]):
print(f"[{count}次] {err}")
AI能帮到什么?
你只需要告诉AI日志格式和你的分析需求,它会生成完整的分析脚本。而且如果你换了日志格式(比如从JSON日志改成结构化日志),AI可以快速修改脚本适配新格式。
案例二:进程监控与自动恢复
服务器上的服务挂了,你怎么知道?
传统方案是写一个监控脚本,每30秒检查一次进程是否存活。
用AI辅助,可以写得更简洁:
# ai_process_monitor.py
import subprocess
import time
import requests
SERVICES = {
"nginx": {"type": "process", "name": "nginx"},
"mysql": {"type": "process", "name": "mysqld"},
"app": {"type": "http", "url": "http://localhost:8080/health"},
}
def check_process(name):
result = subprocess.run(
["pgrep", "-x", name],
capture_output=True, text=True
)
return result.stdout.strip() != ""
def check_http(url):
try:
resp = requests.get(url, timeout=5)
return resp.status_code == 200
except:
return False
def restart_service(name):
subprocess.run(["sudo", "systemctl", "restart", name], check=False)
print(f"[{datetime.now()}] {name} 已重启")
def monitor():
while True:
for svc_name, cfg in SERVICES.items():
if cfg["type"] == "process":
alive = check_process(cfg["name"])
else:
alive = check_http(cfg["url"])
if not alive:
print(f"[{datetime.now()}] ⚠️ {svc_name} 进程异常,尝试重启")
restart_service(svc_name)
time.sleep(30)
if __name__ == "__main__":
monitor()
AI还能做什么?
- 帮你把脚本转成 systemd 服务,实现开机自启
- 生成告警通知(发送到钉钉/飞书/Slack)
- 添加详细的日志记录,方便事后排查
案例三:磁盘空间智能清理
服务器磁盘满了,是最常见的运维事故。
手动清理需要:
- 找出大文件:
du -sh /* | sort -rh - 判断哪些能删
- 执行清理
- 验证清理效果
用AI生成清理脚本:
# ai_disk_cleaner.py
import os
import subprocess
from pathlib import Path
from datetime import datetime
def find_large_dirs(top_path="/", limit_mb=100):
"""找出占用空间大于limit_mb的目录"""
result = subprocess.run(
["du", "-m", "-d", "1", top_path],
capture_output=True, text=True
)
large_dirs = []
for line in result.stdout.splitlines():
parts = line.split()
if len(parts) >= 2:
size_mb = int(parts[0])
path = parts[1]
if size_mb > limit_mb:
large_dirs.append({"path": path, "size_mb": size_mb})
return sorted(large_dirs, key=lambda x: -x["size_mb"])
def suggest_cleanup():
"""AI生成的智能清理建议"""
dirs = find_large_dirs("/var", limit_mb=50)
suggestions = []
for d in dirs[:5]:
path = d["path"]
if "logs" in path:
suggestions.append({
"path": path,
"size_mb": d["size_mb"],
"action": "日志轮转清理(推荐)",
"command": f"find {path} -name '*.log' -mtime +7 -delete"
})
elif "cache" in path:
suggestions.append({
"path": path,
"size_mb": d["size_mb"],
"action": "缓存清理(安全)",
"command": f"rm -rf {path}/*"
})
return suggestions
if __name__ == "__main__":
for s in suggest_cleanup():
print(f"📁 {s['path']} ({s['size_mb']}MB)")
print(f" 建议: {s['action']}")
print(f" 命令: {s['command']}")
print()
案例四:自动化部署脚本
传统部署流程:
- 拉取最新代码:
git pull - 安装依赖:
pip install -r requirements.txt - 数据库迁移:
python manage.py migrate - 重启服务:
systemctl restart app
每一步都需要手动执行,出错就要排查。
用AI生成一键部署脚本:
# ai_deploy.py
import subprocess
import sys
from datetime import datetime
DEPLOY_CONFIG = {
"repo": "git@github.com:your-org/your-app.git",
"branch": "main",
"python_version": "3.11",
"requirements": "requirements.txt",
"service_name": "your-app",
"migrate_before_start": True,
}
def run_cmd(cmd, check=True):
print(f"[$] {cmd}")
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
if check and result.returncode != 0:
print(f"[错误] {result.stderr}")
sys.exit(1)
return result
def deploy():
print(f"{'='*50}")
print(f"部署开始: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
print(f"{'='*50}")
# 1. 拉取代码
run_cmd(f"git pull origin {DEPLOY_CONFIG['branch']}")
# 2. 安装依赖
run_cmd("pip install -r requirements.txt")
# 3. 数据库迁移
if DEPLOY_CONFIG["migrate_before_start"]:
run_cmd("python manage.py migrate --check || python manage.py migrate")
# 4. 收集静态文件
run_cmd("python manage.py collectstatic --noinput")
# 5. 重启服务
run_cmd(f"sudo systemctl restart {DEPLOY_CONFIG['service_name']}")
# 6. 验证部署
run_cmd(f"sudo systemctl status {DEPLOY_CONFIG['service_name']} --no-pager", check=False)
print(f"\n{'='*50}")
print(f"部署完成: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
print(f"{'='*50}")
if __name__ == "__main__":
deploy()
AI还能帮你做什么?
- 生成回滚脚本(deploy rollback)
- 添加部署通知(成功/失败发钉钉消息)
- 生成部署文档和变更记录
案例五:服务器健康检查报告
每周给老板看一份服务器健康报告,手动整理太麻烦。
用AI生成自动报告:
# ai_health_report.py
import subprocess
import psutil
from datetime import datetime
def get_system_info():
return {
"uptime": subprocess.run(["uptime", "-p"], capture_output=True, text=True).stdout.strip(),
"cpu_load": psutil.getloadavg(),
"memory": {
"total_gb": round(psutil.virtual_memory().total / 1024**3, 1),
"used_percent": psutil.virtual_memory().percent,
},
"disk": {
"used_percent": psutil.disk_usage('/').percent,
},
}
def generate_report():
info = get_system_info()
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
report = f"""
╔══════════════════════════════════════╗
║ 服务器健康报告 - {now} ║
╠══════════════════════════════════════╣
║ 运行时间: {info['uptime']} ║
║ CPU负载: {info['cpu_load'][0]:.2f} {info['cpu_load'][1]:.2f} {info['cpu_load'][2]:.2f} ║
║ 内存使用: {info['memory']['used_percent']:.1f}% ({info['memory']['total_gb']}GB) ║
║ 磁盘使用: {info['disk']['used_percent']:.1f}% ║
╚══════════════════════════════════════╝
"""
# 发送通知
if info['memory']['used_percent'] > 80 or info['disk']['used_percent'] > 85:
report += "\n⚠️ 警告: 资源使用率过高,请及时处理!"
return report
if __name__ == "__main__":
print(generate_report())
用AI辅助运维的3个原则
原则一:AI写代码,你审逻辑
运维脚本跑错一次就可能出事故。每次AI生成的脚本,都要手动过一遍,确认:
- 删除操作不会误删重要文件
- 重启服务不会导致数据丢失
- 脚本有回滚方案
原则二:把脚本当文档写
AI生成的脚本应该加上注释,解释每步在做什么。半年后你自己都可能看不懂当初写的Bash脚本,但Python脚本加上了注释就清晰得多。
原则三:用Git管脚本
每个运维脚本都应该有对应的Git仓库。AI生成的脚本提交上去,版本管理+团队协作+随时回滚。
总结
AI辅助运维不是让AI替代运维工程师,而是帮你把重复性工作自动化,把精力放在架构设计和故障排查上。
脚本能跑、代码可读、版本可控——这三点做到了,AI就是你的超级运维助手。
你的服务器现在用什么方式管理?有没有被磁盘爆满吓哭过的经历?评论区聊聊。