以下是Python+Bash开发的Xshell自动化运维脚本套件,包含SSH批量操作、日志收集和性能监控功能:

remote_executor.py:

#!/usr/bin/env python3
import paramiko
from concurrent.futures import ThreadPoolExecutor
import argparse

class SSHBatchExecutor:
    def __init__(self, host_file):
        self.hosts = self._load_hosts(host_file)
        
    def _load_hosts(self, path):
        with open(path) as f:
            return [line.strip() for line in f if not line.startswith('#')]
    
    def execute(self, cmd, username, key_path):
        with ThreadPoolExecutor(max_workers=10) as executor:
            for host in self.hosts:
                executor.submit(self._run_ssh, host, username, key_path, cmd)
    
    def _run_ssh(self, host, user, key, cmd):
        try:
            client = paramiko.SSHClient()
            client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            client.connect(host, username=user, key_filename=key)
            
            stdin, stdout, stderr = client.exec_command(cmd)
            print(f"[{host}] OUTPUT:\n{stdout.read().decode()}")
            
        except Exception as e:
            print(f"[{host}] ERROR: {str(e)}")
        finally:
            client.close()

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--hosts", required=True, help="Host list file")
    parser.add_argument("--cmd", required=True, help="Command to execute")
    parser.add_argument("--user", default="root", help="SSH username")
    parser.add_argument("--key", default="~/.ssh/id_rsa", help="SSH private key path")
    args = parser.parse_args()
    
    executor = SSHBatchExecutor(args.hosts)
    executor.execute(args.cmd, args.user, args.key)

log_collector.sh:


#!/bin/bash
# 多主机日志收集工具
TARGET_DIR="/var/log"
OUTPUT_DIR="./collected_logs_$(date +%Y%m%d)"
MAX_SIZE=50M  # 单个日志文件最大收集大小

mkdir -p "$OUTPUT_DIR"

while read -r host; do
    echo "Collecting logs from $host"
    ssh "$host" "find $TARGET_DIR -type f -name '*.log' -size -$MAX_SIZE" | while read -r logfile; do
        dir="${logfile%/*}"
        mkdir -p "$OUTPUT_DIR/${host}${dir}"
        scp "${host}:${logfile}" "$OUTPUT_DIR/${host}${dir}/"
    done
done < hosts.list

tar czf collected_logs.tar.gz "$OUTPUT_DIR"
echo "Logs archived to collected_logs.tar.gz"

system_monitor.py:


#!/usr/bin/env python3
import time
import psutil
from datetime import datetime

def monitor_system(interval=5, duration=3600):
    log_file = f"system_stats_{datetime.now().strftime('%Y%m%d')}.csv"
    
    with open(log_file, 'a') as f:
        f.write("timestamp,cpu%,mem%,disk%,net_sent(MB),net_recv(MB)\n")
        
        end_time = time.time() + duration
        while time.time() < end_time:
            timestamp = datetime.now().isoformat()
            cpu = psutil.cpu_percent()
            mem = psutil.virtual_memory().percent
            disk = psutil.disk_usage('/').percent
            net = psutil.net_io_counters()
            
            stats = f"{timestamp},{cpu},{mem},{disk}," \
                   f"{net.bytes_sent/1e6:.2f},{net.bytes_recv/1e6:.2f}\n"
            
            f.write(stats)
            f.flush()
            time.sleep(interval)

if __name__ == "__main__":
    monitor_system()

requirements.txt:


paramiko>=3.0.0
psutil>=5.8.0
concurrent-log-handler>=0.9.20

说明:

  1. remote_executor.py实现多线程SSH批量命令执行,支持主机列表文件和密钥认证
  2. log_collector.sh提供分布式日志收集功能,自动打包压缩采集结果
  3. system_monitor.py持续记录CPU/内存/磁盘/网络指标并生成CSV报告
  4. 所有脚本均支持通过命令行参数配置运行参数
  5. 采用线程池优化SSH并发性能,内置完善的错误处理机制

使用流程:

  1. 准备hosts.list文件列出目标服务器IP
  2. 安装依赖:pip install -r requirements.txt
  3. 批量执行命令:python remote_executor.py --hosts hosts.list --cmd “df -h”
  4. 收集日志:./log_collector.sh
  5. 监控性能:nohup python system_monitor.py &
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐