简介:本文系统梳理运维工程师日常最常用的几类脚本,涵盖系统资源监控、日志清理、服务健康检查、批量巡检与告警通知等场景。你将了解每类脚本的设计思路、关键实现与最佳实践,掌握用轻量脚本替代笨重方案的方法,提升日常运维效率与系统稳定性。
在日常运维工作中,真正高频使用的往往不是复杂的自动化平台,而是一批体量不大、却能精准解决具体问题的脚本。它们部署轻、改起来快、贴合现场需求,是运维工程师工具箱里的“常备武器”。下面从几个典型场景出发,聊聊这些脚本的设计思路与落地要点。
这是使用频率最高的一类脚本。相比动辄需要部署采集器、时序数据库和可视化面板的完整监控体系,一个几十行的脚本就能在终端里把 CPU、内存、磁盘、网络这些核心指标盯住,调参也只需改几个阈值。
设计要点:
下面是一段示意性实现(Python 生态中常用系统信息库,此处以通用接口描述):
# 伪代码示意:周期性采集并打印系统关键指标def collect_metrics():cpu = get_cpu_percent(interval=1)mem = get_memory_info() # 返回已用/总量/百分比disk = get_disk_usage("/") # 返回已用/总量/百分比net = get_net_io_counters() # 返回发送/接收字节数return {"time": now_str(),"cpu": cpu,"mem_used_gb": to_gb(mem.used),"mem_total_gb": to_gb(mem.total),"mem_percent": mem.percent,"disk_percent": disk_percent,"net_sent_mb": to_mb(net.bytes_sent),"net_recv_mb": to_mb(net.bytes_recv),}def monitor(interval=10):while True:m = collect_metrics()render(m)if m["cpu"] > 80 or m["mem_percent"] > 85:emit_alert(m)sleep(interval)
实践建议: 生产环境不要长期在前台运行这类脚本,建议交给进程守护工具托管,并把输出重定向到日志文件,配合日志轮转避免撑满磁盘。
磁盘被日志写满是运维最常见的故障之一。一个可靠的日志清理脚本应具备三个特征:按时间而非仅按大小清理、支持归档后再删除、执行前可预演。
典型逻辑包括:
关键细节在于归档与删除的原子性:先压缩、校验压缩包完整性、再删除源文件,避免中途失败导致数据丢失。同时应排除正在被写入的当前日志文件,防止句柄异常。
对于没有完善编排能力的场景,一个定时运行的健康检查脚本可以起到“兜底”作用。它周期性探测本地或远端服务的可用性(如端口连通性、HTTP 状态码、关键接口响应),在连续失败达到阈值后触发重启或上报。
设计时需要回答几个问题:
当需要同时了解几十上百台机器的状态时,手动登录逐台查看显然不现实。批量巡检脚本通常借助远程执行通道,把一组检查命令分发到各节点,回收结果后汇总成表格。
核心考量:
这类脚本采集的常见项包括:系统负载、磁盘剩余、关键进程存活、内核版本、时间同步状态等。
监控和巡检发现问题后,需要把信息送达人。告警脚本一般被其他脚本调用,负责格式化消息并通过既定渠道发送。设计上应做到:消息简洁、包含定位信息(主机、指标、当前值、阈值、时间)、支持去重与静默。
一个常被忽视的点是告警风暴抑制:同一问题在短时间内反复触发时,应合并为一条或按周期汇总,否则真正重要的告警会被淹没。
无论哪类脚本,以下几点都值得遵守:
运维脚本的价值不在于复杂,而在于贴场景、可维护、能兜底。资源监控脚本解决“看得见”,日志清理脚本解决“不爆盘”,健康检查脚本解决“自愈”,批量巡检脚本解决“效率”,告警脚本解决“触达”。把这些脚本按统一规范沉淀下来,再逐步与更完善的平台能力衔接,就能在轻量与体系化之间找到适合团队的平衡点。