第一章:运维自动化概述
大家好,我是你们这门课的老朋友。做了十几年运维,踩过无数坑,也攒了不少经验。今天咱们聊聊运维自动化——说白了,就是怎么让机器替人干活。
什么是运维自动化?
运维自动化,不是简单地写几个脚本就完事了。它是一套方法论,把重复的、标准化的运维操作,交给程序去执行。我个人习惯把它分成三个层次:
- 脚本层:写个Python或Shell脚本,完成单个任务,比如批量改密码。
- 工具层:用Ansible、SaltStack这类工具,管理成百上千台机器。
- 平台层:搭建一套完整的运维平台,从监控到发布,全自动流转。
你想想看,以前运维被人叫“搬砖的”,就是因为整天在重复劳动。自动化就是要把这些砖,交给机器去搬。
为什么需要运维自动化?
这个问题我问过很多刚入行的朋友。答案五花八门,但核心就三个字:扛不住。
我在项目中遇到过一家创业公司,服务器从10台涨到500台,运维团队还是3个人。结果呢?每天凌晨都在手动部署,出一次故障就要通宵。这就是典型的“人肉运维”瓶颈。
具体来说,自动化能解决这些痛点:
| 痛点 | 手动运维 | 自动化运维 |
|---|---|---|
| 效率低下 | 部署1台机器要30分钟 | 批量部署100台只要5分钟 |
| 人为失误 | 漏改配置、输错命令 | 标准化执行,零误差 |
| 响应迟缓 | 故障发现靠人工巡检 | 自动告警+自愈 |
| 知识流失 | 操作步骤记在个人笔记里 | 脚本和配置统一管理 |
核心观点:自动化的本质不是取代运维,而是把运维从“救火队员”变成“架构师”。
自动化能解决哪些痛点?
我挑几个最典型的场景说说。嗯,这些都是我亲身经历过的。
1. 环境一致性
以前最怕听到“在我机器上是好的啊”。开发环境、测试环境、生产环境,配置稍微差一点,就出幺蛾子。自动化脚本可以保证:代码+配置+环境三者完全一致。
2. 故障自愈
我记得有一次,凌晨3点磁盘满了。以前得爬起来手动清理。现在呢?写个脚本监控磁盘使用率,超过90%自动清理日志,超过95%直接扩容。我可以在被窝里睡大觉。
3. 变更管理
改个nginx配置,手动操作容易漏掉reload。自动化脚本可以做到:先备份、再修改、最后验证。每一步都有日志,出了问题也能快速回滚。
避坑指南:我曾经犯过一个错误——把所有自动化脚本都跑在root权限下。结果一个bug导致批量删库。后来我学乖了,每个脚本都要做权限最小化,并且加上“确认执行”的交互步骤。
自动化脚本的典型应用场景
说了这么多理论,咱们看看实际能干什么。我按日常运维的流程,列几个高频场景:
- 批量操作:给500台服务器同步hosts文件、修改内核参数。
- 监控告警:CPU超过80%自动发钉钉消息,并记录现场信息。
- 自动部署:代码提交后,自动拉取、编译、打包、发布到测试环境。
- 日志分析:每天凌晨分析nginx日志,统计QPS、错误率,生成报表。
- 数据库备份:定时备份MySQL,保留最近7天数据,自动上传到OSS。
- 安全巡检:检查服务器是否有弱密码、未打补丁、异常登录。
这里给个简单的Python脚本示例,看看自动化到底长什么样:
#!/usr/bin/env python3
# 批量检查服务器磁盘使用率
import paramiko
servers = ['192.168.1.10', '192.168.1.11', '192.168.1.12']
username = 'ops'
password = 'your_password'
for ip in servers:
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(ip, username=username, password=password)
stdin, stdout, stderr = client.exec_command('df -h / | tail -1')
output = stdout.read().decode()
usage = output.split()[4].replace('%', '')
if int(usage) > 80:
print(f'[警告] {ip} 磁盘使用率: {usage}%')
else:
print(f'[正常] {ip} 磁盘使用率: {usage}%')
client.close()
小提示:实际生产环境不建议硬编码密码。可以用密钥认证,或者从Vault这类工具动态获取凭证。后面章节我会详细讲安全实践。
总结一下
运维自动化不是什么高深莫测的东西。说白了,就是把“人肉操作”变成“代码执行”。刚开始可能觉得写脚本比手动操作还慢,但一旦规模上来,你就知道它的威力了。
这门课我会带着大家,从最简单的脚本开始,一步步搭建自己的自动化体系。下一章咱们就动手写第一个Python运维脚本,敬请期待。
记住一句话:自动化不是目的,稳定高效才是。