2026年运维自动化实战:高效Shell与Python脚本分享指南
2026年运维自动化实战:高效Shell与Python脚本分享指南
在2026年的IT运维领域,随着云原生架构与微服务的全面深化,系统复杂度与节点规模呈指数级增长。面对动辄成千上万的服务器实例与容器Pod,传统的手工敲命令、SSH逐台排查模式早已成为历史。自动化不仅是提升效率的工具,更是运维团队在2026年保障业务SLA、实现FinOps成本优化的核心护城河。
本文将结合2026年主流的运维场景,分享几款经过实战打磨的高效Shell与Python脚本,助力大家从繁琐的重复劳动中解放出来,将精力投入到更高价值的架构优化与稳定性建设中。
Shell脚本:批量主机巡检与日志自动清理
在2026年,虽然可观测性平台已经非常强大,但在某些离线环境、边缘计算节点或传统物理机房中,定期的系统基础巡检与日志清理依然是刚需。以下脚本通过SSH密钥认证,并行巡检多台主机的CPU、内存及磁盘状态,并自动清理超过7天的老旧业务日志。
#!/bin/bash
# 2026年批量巡检与日志清理脚本
# 依赖:sshpass或配置完善的SSH Key信任关系
HOSTS=("10.0.1.101" "10.0.1.102" "10.0.1.103")
LOG_DIR="/data/app/logs"
REPORT_FILE="/tmp/2026_inspect_report_$(date +%F).txt"
echo "=== 2026-$(date +%F) 系统巡检报告 ===" > $REPORT_FILE
for HOST in ${HOSTS[@]}; do
echo "正在巡检: $HOST" >> $REPORT_FILE
ssh -o ConnectTimeout=5 ops_user@$HOST "
# CPU负载
echo 'CPU Load:' \$(uptime | awk -F'load average:' '{print \$2}')
# 内存使用率
echo 'Memory Usage:' \$(free -m | awk 'NR==2{printf \"%.2f%%\", \$3*100/\$2}')
# 磁盘使用率
echo 'Disk Usage:' \$(df -h / | awk 'NR==2{print \$5}')
# 清理7天前日志
find $LOG_DIR -name '*.log' -mtime +7 -type f -delete
echo '已清理 $LOG_DIR 下超过7天的日志'
" >> $REPORT_FILE 2>&1
echo "------------------------" >> $REPORT_FILE
done
echo "巡检完成,报告已生成: $REPORT_FILE"
实战建议:在2026年的安全合规要求下,严禁在脚本中硬编码密码。请务必使用基于Ansible或SSH Certificate的免密认证体系。此外,日志清理动作在生产环境建议先切换为mv到归档目录,配合对象存储(如S3/OSS)进行长期留存,而非直接delete。
Shell脚本:核心进程守护与飞书Webhook告警
微服务架构下,偶尔会有进程因OOM或底层网络抖动而异常退出。在K8s体系外(如传统VM部署的核心网关),进程守护依然重要。此脚本不仅实现秒级拉起,还集成了2026年常用的飞书/钉钉Webhook实时告警。
#!/bin/bash
# 2026年进程守护与即时告警脚本
PROCESS_NAME="gateway-core"
WEBHOOK_URL="https://open.feishu.cn/open-apis/bot/v2/hook/xxxxx"
MAX_RETRY=3
RETRY_COUNT=0
while true; do
if ! pgrep -x "$PROCESS_NAME" > /dev/null; then
RETRY_COUNT=$((RETRY_COUNT+1))
ALERT_MSG="【严重告警】$PROCESS_NAME 进程于 $(date '+%F %T') 异常退出,正在尝试第 $RETRY_COUNT 次拉起..."
# 发送飞书告警
curl -s -X POST "$WEBHOOK_URL" \
-H 'Content-Type: application/json' \
-d "{\"msg_type\":\"text\",\"content\":{\"text\":\"$ALERT_MSG\"}}" > /dev/null
# 尝试重启服务
systemctl restart $PROCESS_NAME
sleep 5
if ! pgrep -x "$PROCESS_NAME" > /dev/null; then
if [ $RETRY_COUNT -ge $MAX_RETRY ]; then
FATAL_MSG="【致命告警】$PROCESS_NAME 连续 $MAX_RETRY 次拉起失败,需人工介入!"
curl -s -X POST "$WEBHOOK_URL" -H 'Content-Type: application/json' \
-d "{\"msg_type\":\"text\",\"content\":{\"text\":\"$FATAL_MSG\"}}" > /dev/null
exit 1
fi
else
RECOVER_MSG="【恢复通知】$PROCESS_NAME 已于 $(date '+%F %T') 成功拉起!"
curl -s -X POST "$WEBHOOK_URL" -H 'Content-Type: application/json' \
-d "{\"msg_type\":\"text\",\"content\":{\"text\":\"$RECOVER_MSG\"}}" > /dev/null
RETRY_COUNT=0
fi
fi
sleep 2
done
Python脚本:多云环境FinOps账单与资源用量统计
2026年,多云战略已成企业常态,但多云账单的碎片化让成本管控(FinOps)变得极具挑战。以下Python脚本利用各大云厂商的SDK,定时拉取ECS/EC2实例的运行数量与当日预估费用,为运维与财务提供统一视角的数据支撑。
#!/usr/bin/env python3
# 2026年多云资源与账单统计脚本
import boto3
from aliyunsdkcore.client import AcsClient
from aliyunsdkecs.request.v20140526 import DescribeInstancesRequest
import csv
from datetime import datetime
def get_aws_ec2_info():
"""获取AWS EC2实例数与成本预估"""
client = boto3.client('ce', region_name='us-east-1') # Cost Explorer Client
today = datetime.now().strftime('%Y-%m-%d')
response = client.get_cost_and_usage(
TimePeriod={'Start': today, 'End': today},
Granularity='DAILY',
Metrics=['UnblendedCost']
)
cost_amount = float(response['ResultsByTime'][0]['Total']['UnblendedCost']['Amount'])
ec2_client = boto3.client('ec2')
instances = ec2_client.describe_instances()
instance_count = sum([len(r['Instances']) for r in instances['Reservations']])
return {'Cloud': 'AWS', 'Instances': instance_count, 'DailyCost': cost_amount}
def get_aliyun_ecs_info():
"""获取阿里云ECS实例数(费用需通过账单API获取,此处简化为实例统计)"""
# 实际生产中建议通过BSS OpenAPI获取账单
client = AcsClient('<AccessKeyId>', '<AccessKeySecret>', 'cn-hangzhou')
request = DescribeInstancesRequest.DescribeInstancesRequest()
request.set_PageSize(100)
response = client.do_action_with_exception(request)
# 解析逻辑省略,返回模拟数据
return {'Cloud': 'Aliyun', 'Instances': 45, 'DailyCost': 120.50}
def generate_finops_report():
"""生成2026年FinOps统一CSV报告"""
aws_data = get_aws_ec2_info()
aliyun_data = get_aliyun_ecs_info()
report_file = f'/tmp/finops_report_2026_{datetime.now().strftime("%F")}.csv'
with open(report_file, 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=['Cloud', 'Instances', 'DailyCost'])
writer.writeheader()
writer.writerow(aws_data)
writer.writerow(aliyun_data)
print(f"2026 FinOps报告已生成: {report_file}")
if __name__ == '__main__':
generate_finops_report()
Python脚本:基于GitOps的配置文件自动同步分发
2026年的配置管理全面拥抱GitOps理念,一切配置皆代码。当Git仓库中的Nginx或业务配置发生变更时,我们需要自动化地将其分发到目标集群并执行重载。此脚本结合GitPython与Paramiko,实现了配置的拉取、比对与分发。
#!/usr/bin/env python3
# 2026年GitOps配置自动同步脚本
import git
import paramiko
import os
import hashlib
REPO_PATH = "/opt/config-repo"
REMOTE_URL = "https://git.corp.com/devops/app-configs.git"
TARGET_SERVERS = [("10.0.2.10", "nginx.conf"), ("10.0.2.11", "nginx.conf")]
LOCAL_CONFIG_DIR = os.path.join(REPO_PATH, "configs")
def clone_or_pull_repo():
"""拉取或更新Git配置仓库"""
if os.path.exists(REPO_PATH):
repo = git.Repo(REPO_PATH)
repo.remotes.origin.pull()
else:
git.Repo.clone_from(REMOTE_URL, REPO_PATH)
print("配置仓库已更新至最新版本")
def get_file_hash(filepath):
"""计算文件MD5,用于比对是否需要更新"""
hasher = hashlib.md5()
with open(filepath, 'rb') as f:
hasher.update(f.read())
return hasher.hexdigest()
def sync_configs():
"""通过SSH分发配置并重载服务"""
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
for server, config_file in TARGET_SERVERS:
local_file = os.path.join(LOCAL_CONFIG_DIR, config_file)
remote_file = f"/etc/nginx/{config_file}"
# 简化演示:实际应先比对远端MD5与本地MD5
try:
ssh.connect(server, username='ops_user', key_filename='/home/ops_user/.ssh/id_rsa')
sftp = ssh.open_sftp()
sftp.put(local_file, remote_file)
# 执行Nginx配置测试与重载
stdin, stdout, stderr = ssh.exec_command('nginx -t && systemctl reload nginx')
if stderr.read().decode():
print(f"[{server}] Nginx重载失败,请检查配置!")
else:
print(f"[{server}] 配置同步并重载成功")
sftp.close()
ssh.close()
except Exception as e:
print(f"[{server}] 同步异常: {str(e)}")
if __name__ == '__main__':
clone_or_pull_repo()
sync_configs()
结语
在2026年,运维自动化的内涵已经从单纯的“写脚本替代敲命令”,演进为涵盖可观测性、FinOps成本治理与GitOps持续交付的系统性工程。上述分享的脚本仅为特定场景的切入点,真正的价值在于将其融入您的CI/CD流水线与平台化工具中。同时,请牢记:任何自动化脚本都必须纳入安全审计,避免密钥泄露与越权操作。希望这些实战代码能为您在2026年的运维工作中提供切实的帮助与灵感启发。