2026年运维自动化实战:提升效率的Shell与Python脚本分享

进入2026年,随着企业IT基础设施的规模呈指数级增长,云原生与混合云架构已成为绝对的主流。面对成千上万个节点、微服务实例以及海量的日志数据,传统的“手工敲命令”运维模式早已被彻底淘汰。在2026年的今天,运维自动化不仅是提升效率的工具,更是保障业务连续性和系统稳定性的核心基石。

本文将结合当前主流的运维场景,分享三款经过生产环境检验的实用Shell与Python自动化脚本,帮助运维团队从繁杂的重复性劳动中解放出来。

一、 Shell脚本:多维服务器健康巡检与预警

在日常运维中,每天早间的系统巡检是必修课。面对几十上百台服务器,手动执行topdffree不仅耗时,而且容易遗漏。以下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": "