2026年运维自动化实战:提升效率的Shell与Python脚本分享
2026年运维自动化实战:提升效率的Shell与Python脚本分享
进入2026年,随着企业IT基础设施的规模呈指数级增长,云原生与混合云架构已成为绝对的主流。面对成千上万个节点、微服务实例以及海量的日志数据,传统的“手工敲命令”运维模式早已被彻底淘汰。在2026年的今天,运维自动化不仅是提升效率的工具,更是保障业务连续性和系统稳定性的核心基石。
本文将结合当前主流的运维场景,分享三款经过生产环境检验的实用Shell与Python自动化脚本,帮助运维团队从繁杂的重复性劳动中解放出来。
一、 Shell脚本:多维服务器健康巡检与预警
在日常运维中,每天早间的系统巡检是必修课。面对几十上百台服务器,手动执行top、df、free不仅耗时,而且容易遗漏。以下Shell脚本实现了对CPU、内存及磁盘的多维自动巡检,并支持阈值告警。
#!/bin/bash
# 2026系统健康巡检脚本
# 设定告警阈值
CPU_THRESHOLD=80
MEM_THRESHOLD=85
DISK_THRESHOLD=90
LOG_FILE="/var/log/system_health_$(date +%Y%m%d).log"
echo "===== 2026-$(date '+%Y-%m-%d %H:%M:%S') 系统健康巡检 =====" | tee -a $LOG_FILE
# 1. CPU使用率检查
CPU_IDLE=$(top -bn1 | grep "Cpu(s)" | awk '{print $8}')
CPU_USED=$(echo "100 - $CPU_IDLE" | bc)
if (( $(echo "$CPU_USED > $CPU_THRESHOLD" | bc -l) )); then
echo "[CRITICAL] CPU使用率: ${CPU_USED}%,超过阈值${CPU_THRESHOLD}%" | tee -a $LOG_FILE
fi
# 2. 内存使用率检查
MEM_USED_PERCENT=$(free -m | awk 'NR==2{printf "%.1f", $3/$2*100}')
if (( $(echo "$MEM_USED_PERCENT > $MEM_THRESHOLD" | bc -l) )); then
echo "[CRITICAL] 内存使用率: ${MEM_USED_PERCENT}%,超过阈值${MEM_THRESHOLD}%" | tee -a $LOG_FILE
fi
# 3. 磁盘使用率检查
df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $1 }' | while read output;
do
DISK_USED=$(echo $output | awk '{print $1}' | sed 's/%//g')
PARTITION=$(echo $output | awk '{print $2}')
if [ $DISK_USED -ge $DISK_THRESHOLD ]; then
echo "[CRITICAL] 分区 $PARTITION 磁盘使用率: ${DISK_USED}%,超过阈值${DISK_THRESHOLD}%" | tee -a $LOG_FILE
fi
done
echo "===== 巡检结束 =====" | tee -a $LOG_FILE
核心优势:该脚本无需安装额外依赖,利用系统原生工具进行数据采集,结合bc命令处理浮点数比较,非常适合作为Cron定时任务在每天凌晨自动执行,异常结果可直接对接邮件或钉钉/飞书Webhook。
二、 Python脚本:智能日志异常检测与Webhook推送
2026年的微服务架构下,单靠人工grep海量日志已不现实。我们需要一个具备主动分析能力的Python脚本,它能够实时监控日志增长,提取Error级别信息,并在异常频次达到阈值时触发Webhook告警。
#!/usr/bin/env python3
# 2026智能日志监控脚本
import time
import re
import requests
from collections import deque
LOG_FILE = "/var/log/app/application.log"
ERROR_PATTERN = re.compile(r'ERROR|Exception|OOM')
WEBHOOK_URL = "https://open.feishu.cn/open-apis/bot/v2/hook/your-2026-token"
WINDOW_SIZE = 60 # 统计窗口:60秒
THRESHOLD = 10 # 触发告警的异常条数
error_timestamps = deque()
def send_alert(count):
payload = {
"msg_type": "interactive",
"card": {
"header": {"title": {"tag": "plain_text", "content": "