2026年运维实战:提升效率的自动化Shell与Python脚本分享
2026年运维实战:提升效率的自动化Shell与Python脚本分享
在2026年的今天,随着云原生架构与混合云规模的持续扩张,IT运维体系正面临着前所未有的复杂性挑战。微服务数量呈指数级增长,传统的“人肉运维”模式早已无法满足现代企业对高效、稳定与安全的需求。自动化不仅是提升运维效率的工具,更是保障业务连续性的核心基石。本文将分享三个在2026年运维日常中极为实用的自动化脚本,涵盖Shell与Python,帮助大家解放双手,将精力聚焦于更高价值的架构优化上。
一、 Shell脚本:多服务器批量资源巡检与告警
在管理数十甚至上百台Linux服务器时,定期检查CPU、内存和磁盘使用率是防范系统宕机的第一道防线。以下Shell脚本通过SSH免密登录批量执行巡检命令,并在发现资源瓶颈时输出告警信息,可轻松集成至Jenkins或定时任务中。
#!/bin/bash
# 2026年多服务器资源巡检脚本
# 定义服务器IP列表文件
SERVER_LIST="servers.txt"
# 定义阈值
CPU_THRESHOLD=80
MEM_THRESHOLD=85
DISK_THRESHOLD=90
echo "===== 2026年巡检报告:$(date '+%Y-%m-%d %H:%M:%S') ====="
while read -r ip; do
echo "正在巡检服务器: $ip"
# 通过SSH远程获取资源数据
stats=$(ssh -o StrictHostKeyChecking=no root@$ip "echo \$(top -bn1 | grep 'Cpu(s)' | awk '{print \$2 + \$4}'); echo \$(free | awk '/Mem/{printf(\"%.2f\"), \$3/\$2*100}'); echo \$(df -h / | awk 'NR==2{print \$5}' | cut -d'%' -f1)")
cpu_usage=$(echo "$stats" | sed -n '1p')
mem_usage=$(echo "$stats" | sed -n '2p')
disk_usage=$(echo "$stats" | sed -n '3p')
# 判断是否超阈值
alert_msg=""
if (( $(echo "$cpu_usage > $CPU_THRESHOLD" | bc -l) )); then
alert_msg+="[CPU告警: ${cpu_usage}%] "
fi
if (( $(echo "$mem_usage > $MEM_THRESHOLD" | bc -l) )); then
alert_msg+="[内存告警: ${mem_usage}%] "
fi
if [ "$disk_usage" -gt "$DISK_THRESHOLD" ]; then
alert_msg+="[磁盘告警: ${disk_usage}%]"
fi
if [ -n "$alert_msg" ]; then
echo " ⚠️ 警告: $alert_msg"
# 此处可接入企业微信/钉钉/飞书机器人Webhook进行告警推送
else
echo " ✅ 状态正常 (CPU: ${cpu_usage}%, 内存: ${mem_usage}%, 磁盘: ${disk_usage}%)"
fi
done < "$SERVER_LIST"
二、 Python脚本:海量日志异常IP自动提取与封禁
在2026年的网络安全环境中,自动化攻击与恶意爬虫依然猖獗。面对动辄数十GB的Nginx访问日志,使用Python的异步与正则处理能力可以快速定位异常IP,并联动防火墙进行自动封禁。
#!/usr/bin/env python3
# 2026年日志异常IP自动分析脚本
import re
from collections import Counter
import subprocess
import time
# 2026年日志路径配置
LOG_FILE = '/var/log/nginx/access.log'
# 触发封禁的访问次数阈值
THRESHOLD = 500
# 监控时间窗口(秒)
TIME_WINDOW = 60
def get_top_ips(log_path, top_n=20):
ip_pattern = re.compile(r'^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})')
ip_counter = Counter()
try:
with open(log_path, 'r', encoding='utf-8') as f:
# 定位到文件末尾附近,只分析最新日志
f.seek(0, 2)
file_size = f.tell()
f.seek(max(0, file_size - 1024 * 1024 * 10)) # 读取最后10MB
for line in f:
match = ip_pattern.match(line)
if match:
ip_counter[match.group(1)] += 1
except FileNotFoundError:
print("日志文件不存在,请检查路径。")
return []
return ip_counter.most_common(top_n)
def block_ip(ip):
try:
# 调用 iptables 进行封禁
subprocess.run(['iptables', '-A', 'INPUT', '-s', ip, '-j', 'DROP'], check=True)
print(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] 已自动封禁异常IP: {ip}")
# 此处可加入将封禁记录写入数据库的逻辑
except subprocess.CalledProcessError:
print(f"封禁IP {ip} 失败,请检查权限。")
if __name__ == "__main__":
print("===== 2026年日志异常IP巡检启动 =====")
top_ips = get_top_ips(LOG_FILE)
for ip, count in top_ips:
if count > THRESHOLD:
print(f"发现异常IP: {ip} (访问次数: {count})")
block_ip(ip)
else:
break
三、 Python脚本:SSL证书过期自动化预警
随着HTTPS的全面普及,企业管理的域名数量庞大。SSL证书过期导致业务中断是运维的低级失误。此脚本利用Python的ssl和socket模块,实现对多域名证书有效期的批量检测,并在即将过期时发出预警。
#!/usr/bin/env python3
# 2026年SSL证书过期预警脚本
import ssl
import socket
from datetime import datetime, timedelta
# 需要监控的域名列表
DOMAINS = [
'api.company.com',
'portal.company.com',
'cdn.company.com'
]
# 提前预警天数
WARN_DAYS = 30
def check_ssl_expiry(domain, port=443):
context = ssl.create_default_context()
try:
with socket.create_connection((domain, port), timeout=5) as sock:
with context.wrap_socket(sock, server_hostname=domain) as ssock:
cert = ssock.getpeercert()
# 解析证书过期时间
expire_date_str = cert['notAfter']
expire_date = datetime.strptime(expire_date_str, "%b %d %H:%M:%S %Y %Z")
remaining_days = (expire_date - datetime.now()).days
if remaining_days <= WARN_DAYS:
status = "⚠️ 即将过期" if remaining_days > 0 else "❌ 已经过期"
print(f"[{status}] 域名: {domain} | 剩余天数: {remaining_days} | 过期时间: {expire_date.strftime('%Y-%m-%d')}")
# 触发告警逻辑
else:
print(f"[✅ 正常] 域名: {domain} | 剩余天数: {remaining_days}")
except Exception as e:
print(f"[❌ 检测失败] 域名: {domain} | 错误信息: {str(e)}")
if __name__ == "__main__":
print(f"===== 2026年SSL证书巡检报告: {datetime.now().strftime('%Y-%m-%d')} =====")
for domain in DOMAINS:
check_ssl_expiry(domain)
总结
在2026年的运维工作中,自动化脚本不仅是代码,更是运维思想的具象化表达。上述三个脚本分别从系统资源、安全防护、证书管理三个维度提供了自动化解决方案。建议运维团队在引入这些脚本时,结合自身的CMDB系统与告警通道(如飞书、钉钉机器人)进行深度改造,构建出完全贴合自身业务特性的自动化运维流水线。只有将重复性的工作彻底交给机器,运维人员才能在云原生时代真正实现“运筹帷幄,决胜千里”。