“Python 是运维工程师的第二只手”这句话并非夸张。在运维场景中,Python 凭借简洁的语法、丰富的标准库和强大的第三方生态,几乎可以覆盖从日常脚本到大规模自动化平台的一切需求。
脚本开发:把重复劳动变成一行命令
运维工作中存在大量重复性任务:巡检服务器状态、批量修改配置、处理日志文件、备份数据库等。Python 脚本可以让这些工作一键完成。
- 典型场景:
- 读取一个文本文件中的 IP 列表,逐台 SSH 登录检查磁盘使用率。
- 从 CSV 文件导入用户信息,批量在 LDAP 或 Active Directory 中创建/禁用账号。
- 每天凌晨压缩并归档前一天的应用日志,删除超过 30 天的旧文件。
- 核心工具:
- 标准库
os、sys、shutil、pathlib用于文件与系统操作。 subprocess模块可以调用外部命令(如ping、curl、系统工具),获取输出并进行后续处理。argparse可以轻松把脚本包装为命令行工具,支持参数输入,让同事也能放心使用。- 实用技巧:
- 脚本里统一用
pathlib.Path代替字符串拼接路径,避免操作系统差异带来的斜杠问题。 - 用
logging而不是print输出信息,方便同时输出到控制台和文件,后期排查有据可依。 - 小型脚本可以直接用
crontab(Linux)或“任务计划程序”(Windows)定时触发,无需第三方依赖。
批量操作:并行处理提升效率
当需要同时操作成百上千台服务器或处理海量文件时,单线程顺序执行会非常缓慢。Python 的并发能力可以大幅压缩等待时间。
- 并行执行 SSH 命令:
- 使用
paramiko或fabric库可以建立 SSH 连接执行远程命令。 - 结合
concurrent.futures.ThreadPoolExecutor或multiprocessing.Pool对多台主机并行操作,将原本几小时的巡检任务缩短到几分钟。 - 注意控制并发数,避免对目标系统或网络造成过大压力。一般 IO 密集型任务用线程池(如 20-50 并发),CPU 密集用进程池。
- 文件批量处理:
- 标准库
glob或pathlib.Path.rglob()可以递归匹配目录下所有符合条件的文件。 - 用
concurrent.futures并行压缩、转码、上传文件,充分利用多核 CPU 和带宽。 - 配合
tqdm进度条库,让长期运行的批量脚本直观显示进度,不再“黑箱”。
- 配置批量下发:
- 使用模板引擎(如
jinja2)生成不同主机对应的配置文件,再通过 SCP 或 SFTP 批量推送到目标机器,并重启对应服务。 - 这类操作通常会封装为一个带命令行参数的工具,支持
--dry-run模式先预览效果,保障安全性。
监控告警:从被动救火到主动发现
Python 在监控体系中既可以编写轻量级健康检查脚本,也能集成企业级监控平台。
- 应用级健康检查脚本:
- 用
requests检查 Web 接口是否返回 200;用数据库驱动(如pymysql、psycopg2)执行简单查询,验证数据库连通性。 - 检查结果用
logging记录,若出现异常可以直接调用钉钉、企业微信、飞书的 Webhook 发送告警消息。 - 也可简单发送邮件告警:标准库
smtplib+email即可拼装邮件内容并发送。
- 系统资源监控与采集:
psutil库可以获取 CPU、内存、磁盘、网络、进程等实时信息,几行代码就能写一个资源使用率收集脚本,定期存入数据库或直接输出到 Prometheus 兼容格式。- 结合
apscheduler实现定时采集任务,而无需依赖系统的 crontab,便于在程序内统一管理。
- 告警与告警抑制:
- 告警不能“一触发就发”,否则半夜可能被短信淹没。需实现简单的告警抑制:发过一次告警后,在 5 分钟内相同问题不再重复发送。
- 用 Redis 或一个本地文件记录状态,配合
time模块判断间隔。
- 与运维平台集成:
- 如果公司已有 Zabbix、Nagios、Prometheus 等系统,Python 可以作为灵活的补充,通过 API 上报自定义指标,或编写 exporter 将内部业务数据暴露为监控指标。
- 当需要复杂告警逻辑(如根据业务指标动态调整阈值)时,用 Python 写一个告警决策脚本比硬配置更灵活。
真实项目建议
- 代码规范:即使是一个小脚本,也建议加上基本的异常处理和日志,否则一天夜里突然报错退出,排查起来很痛苦。
- 幂等性:批量操作的设计要尽量保证可重复执行而不产生副作用(如:先检查文件是否存在再创建;备份操作前先打时间戳)。
- 先小范围测试:批量 SSH 操作先在 1-2 台测试机上跑通再全量运行;文件删除操作最好先将文件移到回收站目录或备份,确认无误后再彻底清除。
- 利用现有工具:如果已有成熟配置管理工具(如 Ansible),不必用裸 SSH 脚本从零搭建,但 Ansible 本身也是用 Python 编写的,会用 Python 能帮你更好地理解与扩展它。
Python 赋予了运维工程师强大的“自定义”能力:当现成监控工具无法满足特定需求时,几行 Python 代码就可以补上短板;当手头工作重复枯燥时,一段脚本就能把自己解放出来。这也是为什么 Python 会成为现代运维技能树中的基础语言之一。