在现代企业中,高效的运维管理至关重要。高级运维自动化脚本旨在整合多种运维功能,提升运维效率,减少人为错误,并确保系统的稳定性和可靠性。本脚本集合了资源监控、日志管理、自动化部署、数据备份和邮件通知等功能,以实现全面的运维自动化。这种脚本能够帮助运维团队在减少重复劳动的同时,快速响应系统问题,保证业务连续性。
这个脚本使用了几个关键的Python库:
subprocess
: 用于执行外部命令和程序(如SSH、rsync和tar),可以捕获命令的输出和错误。os
: 提供了与操作系统交互的功能,如路径操作。shutil
: 提供了文件和目录操作的高层次功能,例如创建压缩归档。smtplib
: 用于发送电子邮件,通过SMTP协议与邮件服务器通信。email.mime.text
: 用于创建邮件内容的MIME文本格式。
#!/usr/bin/env python3
import subprocess
import os
import shutil
import smtplib
from email.mime.text import MIMEText
from datetime import datetime
# 配置部分
SERVERS = [
{"host": "192.168.1.1", "user": "user1", "password": "pass1"},
{"host": "192.168.1.2", "user": "user2", "password": "pass2"}
]
LOG_DIR = "/var/log/myapp"
BACKUP_DIR = "/var/backup"
EMAIL_SENDER = "[email protected]"
EMAIL_RECEIVER = "[email protected]"
EMAIL_SMTP_SERVER = "smtp.example.com"
EMAIL_SMTP_PORT = 587
EMAIL_LOGIN = "login"
EMAIL_PASSWORD = "password"
# 监控服务器资源
def monitor_resources():
for server in SERVERS:
print(f"Monitoring {server['host']}")
# 示例:使用SSH执行命令检查CPU使用率
# 这里使用subprocess模块来执行SSH命令
result = subprocess.run(
["ssh", "{}@{}".format(server['user'], server['host']), "top -bn1 | grep Cpu"],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
if result.returncode == 0:
print(f"CPU Usage on {server['host']}: {result.stdout.decode().strip()}")
# 收集日志
def collect_logs():
now = datetime.now().strftime("%Y%m%d%H%M%S")
log_archive = shutil.make_archive(f"{LOG_DIR}_{now}", 'zip', LOG_DIR)
print(f"Logs collected and archived as {log_archive}")
# 自动化部署
def deploy_app():
print("Starting deployment...")
# 这里可以放置部署逻辑,例如使用rsync同步文件等
# 示例:使用rsync同步当前目录到远程服务器
for server in SERVERS:
subprocess.run(
["rsync", "-avz", ".", f"{server['user']}@{server['host']}:/deployment/directory"],
check=True
)
print("Deployment completed.")
# 备份
def backup_data():
print("Starting backup...")
backup_time = datetime.now().strftime("%Y%m%d%H%M%S")
backup_path = os.path.join(BACKUP_DIR, f"backup_{backup_time}.tar.gz")
subprocess.run(
["tar", "czf", backup_path, BACKUP_DIR],
check=True
)
print(f"Backup completed. File saved as {backup_path}")
# 发送邮件通知
def send_email(subject, message):
msg = MIMEText(message, 'plain', 'utf-8')
msg['From'] = EMAIL_SENDER
msg['To'] = EMAIL_RECEIVER
msg['Subject'] = subject
server = smtplib.SMTP(EMAIL_SMTP_SERVER, EMAIL_SMTP_PORT)
server.starttls()
server.login(EMAIL_LOGIN, EMAIL_PASSWORD)
server.sendmail(EMAIL_SENDER, EMAIL_RECEIVER, msg.as_string())
server.quit()
# 主逻辑
def main():
try:
monitor_resources()
collect_logs()
deploy_app()
backup_data()
send_email("Automation Script Completed", "The automation script has completed successfully.")
except Exception as e:
send_email("Automation Script Error", str(e))
if __name__ == "__main__":
main()
python
#!/usr/bin/env python3
这行代码是脚本的shebang,它告诉操作系统使用哪个解释器来执行脚本,这里是环境中的Python 3。
python
import subprocess import os import shutil import smtplib from email.mime.text import MIMEText from datetime import datetime
这部分导入了实现脚本功能所需的Python标准库和模块。
subprocess
:用于执行外部命令。os
和shutil
:提供操作系统接口和文件操作功能。smtplib
:用于发送SMTP邮件。email.mime.text
:用于创建邮件内容。datetime
:用于获取当前日期和时间。python
SERVERS = [{...}, {...}] LOG_DIR = "/var/log/myapp" BACKUP_DIR = "/var/backup" EMAIL_SENDER = "[email protected]" EMAIL_RECEIVER = "[email protected]" EMAIL_SMTP_SERVER = "smtp.example.com" EMAIL_SMTP_PORT = 587 EMAIL_LOGIN = "login" EMAIL_PASSWORD = "password"
这里定义了脚本运行所需的配置信息,包括服务器列表、日志目录、备份目录和邮件发送设置。
python
def monitor_resources():
该函数通过SSH连接到每台服务器,并执行top
命令来监控CPU使用率。
python
def collect_logs():
该函数创建一个时间戳命名的ZIP归档文件,用于存储和压缩指定目录中的日志文件。
python
def deploy_app():
该函数使用rsync
命令将本地文件同步到远程服务器的指定目录,实现应用的自动化部署。
python
def backup_data():
该函数创建一个时间戳命名的.tar.gz
备份文件,备份指定目录的数据。
python
def send_email(subject, message):
该函数构建一个简单的邮件消息,并使用SMTP协议发送邮件。邮件内容包括脚本执行的结果或错误信息。
python
def main():
这是脚本的主要入口点,它按顺序调用上述功能函数,并在执行过程中捕获任何异常。如果脚本执行成功,会发送一封完成邮件;如果发生异常,会发送一封错误邮件。
python
if __name__ == "__main__": main()
这一部分确保当脚本被直接运行时,main
函数会被执行。
脚本使用try...except
结构来捕获执行过程中的异常,并在发生异常时通过邮件发送错误通知。
非常感谢您阅读我的博客!如果您有任何问题、建议或想了解特定主题,请随时告诉我。您的反馈对我非常重要,我将继续努力提供高质量的内容。
如果您喜欢我的博客,请考虑订阅我们的更新,这样您就不会错过任何新的文章和信息。同时,欢迎您分享我们的博客给更多的朋友和同事,让更多人受益。
再次感谢您的支持和关注!如果您有任何想法或需求,请随时与我们联系。祝您生活愉快,学习进步!