Python脚本如何实现自动化运维?,自动化运维脚本怎么写?
编写Python脚本实现自动化运维任务,关键是把“采集—判断—动作—通知—留痕”做成闭环,而不是堆一堆一次性脚本。对SRE来说,脚本要能接入监控告警、可重复执行、失败可回滚,故障复盘时还能自动交出证据。下面按监控告警、自动化任务、故障复盘和成本选型拆开讲。
Python自动化运维脚本怎么写:先画闭环,再写代码
很多脚本出问题不是语法,而是边界没定。写之前先回答四件事:谁触发、输入输出是什么、失败怎么处理、后续谁维护。行业共识认为,自动化脚本的价值在可重复执行和可审计,不在代码行数。
从“人肉巡检”到“脚本闭环”的四层结构
- 01采集层
用psutil、requests、paramiko或云厂商SDK获取指标、日志、配置和接口状
- 02判断层
做阈值判断、连续次数判断、白名单和告警收敛。配置放YAML或环境变量,别写死在代码里。
- 03动作层
重启服务、清理磁盘、滚动发布、扩容。高风险动作先dry-run。
- 04通知与留痕
企业微信或飞书webhook、Alertmanager、JSON日志、工单。每次执行都要能查
最小骨架可以很朴素:
def main():
data = collect()
level = judge(data)
if level:
notify(level)
write_log(data, level)
if __name__ == "__main__":
main()
入口固定,参数用argparse,异常要捕获并返回非0退出码。虚拟环境建议单独建:python3 -m venv /opt/ops/venv,再安装依赖。定时任务可用crontab -e写:*/5 * * * * /opt/ops/venv/bin/python /opt/ops/check.py –env prod >> /var/log/ops/check.log 2>&1。路径、权限、日志目录都要提前固定。
Python运维脚本和Shell脚本哪个好:按任务边界选型
别争论语言,先看任务。短平快的系统命令编排,Shell更直接;复杂数据结构、API调用、多源聚合和报告生成,Python更稳。
| 维度 | Shell脚本 | Python脚本 |
|---|---|---|
| 适合任务 | 日志切割、服务启停、命令管道 | 业务巡检、跨系统聚合、告警通知、复盘归档 |
| 优点 | 上手快,系统命令顺手 | 结构清晰,库多,便于测试和维护 |
| 风险 | 复杂逻辑容易失控,错误处理弱 | 依赖环境要管,权限和超时容易漏 |
| 建议 | 做入口、锁和简单动作 | 做核心判断、通知和报告 |
常见做法是Shell做入口和并发锁,Python做逻辑。比如flock -n /tmp/check.lock /opt/ops/venv/bin/python /opt/ops/check.py,避免定时任务重叠执行。业内专家指出,脚本事故多数来自并发执行和权限过大,不是语言本身。
服务器监控告警Python脚本实例:采集、判断、收敛、通知
典型场景是磁盘使用率、进程存活、接口可用性和证书过期。脚本每5分钟跑一次,发现异常先收敛再通知,不要直接重启。
采集与判断:别只看单点阈值
- 磁盘:用psutil.disk_usage(‘/’).percent,连续3次超阈值才告警,排除临时清理目录。
- 进程:psutil.pid_exists加cmdline匹配,避免同名误判;同时检查systemctl is-active。
- 接口:requests.get(url, timeout=3),校验状态码和关键