Python 之 日志巡检脚本

脚本说明

使用Paramiko库进行SSH连接的自动化脚本,用于检查、配置和排除设备故障。说明如下:

  1. 导入所需的库:paramiko、json、logging和concurrent.futures。
  2. 定义配置文件路径(devices.json)和日志文件路径(automation.log)。
  3. 设置日志级别为INFO。
  4. 定义一个函数read_config(),用于读取设备信息配置文件。如果配置文件不存在或解析错误,将记录错误日志并返回None。
  5. 定义一个函数connect_device(device),用于连接到指定的设备。如果连接失败,将记录错误日志并返回None。
  6. 定义一个函数execute_command(client, command),用于在已连接的设备上执行命令。如果命令执行出错,将记录错误日志并返回None。
  7. 定义一个函数check_device_status(device),用于检查设备的状态。如果设备状态正常,将记录信息日志并输出结果。
  8. 定义一个函数configure_device(device),用于配置指定的设备。如果配置成功,将记录信息日志并输出结果。
  9. 定义一个函数troubleshoot_device(device),用于排除设备的故障。如果故障排除成功,将记录信息日志并输出结果。
  10. 定义主函数main(),用于执行上述操作。首先调用read_config()函数读取设备信息配置文件,然后使用多线程并发地检查、配置和排除设备的故障。最后记录脚本执行完毕的信息日志。
  11. 如果脚本作为主程序运行,则调用main()函数执行上述操作。

首先读取设备信息配置文件,然后使用多线程并发地检查、配置和排除设备的故障。

脚本示例

import paramiko
import json
import logging
import concurrent.futures# 配置文件路径
CONFIG_FILE = 'devices.json'#日志配置
LOG_FILE = 'automation.log'
LOG_LEVEL = logging.INFO# 连接超时时间( 秒) 
CONNECT_TIMEOUT = 10# 配置日志
logging.basicConfig(filename = LOG_FILE, level = LOG_LEVEL)# 读取设备信息配置文件
def read_config():try:with open(CONFIG_FILE, 'r') as file:config = json.load(file)return configexcept FileNotFoundError:logging.error(f '配置文件 {CONFIG_FILE} 未找到')except json.JSONDecodeError:logging.error(f '配置文件 {CONFIG_FILE} 解析错误')return None# 连接设备
def connect_device(device):client = paramiko.SSHClient()client.set_missing_host_key_policy(paramiko.AutoAddPolicy())try:client.connect(hostname = device['host'], username = device['username'], key_filename = device['key_filename'], timeout = CONNECT_TIMEOUT)return clientexcept paramiko.AuthenticationException: logging.error(f "无法连接设备 {device['host']}: 身份验证失败")except paramiko.SSHException as e: logging.error(f "无法连接设备 {device['host']}: {str(e)}")except Exception as e:logging.error(f "无法连接设备 {device['host']}: {str(e)}")return None# 执行命令
def execute_command(client, command):try:stdin, stdout, stderr = client.exec_command(command, timeout = CONNECT_TIMEOUT)output = stdout.read().decode('utf-8')error = stderr.read().decode('utf-8')client.close()if error:logging.error(f "命令执行出错: {error}")return Nonereturn output.strip()except Exception as e:logging.error(f "命令执行出错: {str(e)}")return None# 检查设备状态
def check_device_status(device):client = connect_device(device)if client:output = execute_command(client, 'show interfaces')if output:logging.info(f "设备 {device['host']} 状态正常")logging.info(output)# 配置设备
def configure_device(device):client = connect_device(device)if client:config_commands = ['interface eth0', 'ip address 192.168.1.1 255.255.255.0', 'no shutdown']for command in config_commands:execute_command(client, command)logging.info(f "设备 {device['host']} 配置已更新")# 故障排除
def troubleshoot_device(device):client = connect_device(device)if client:output = execute_command(client, 'show logs')if output:logging.info(f "设备 {device['host']} 故障排除日志:")logging.info(output)# 主函数
def main():config = read_config()if config:with concurrent.futures.ThreadPoolExecutor() as executor:futures = []for device in config['devices']:logging.info(f "正在检查设备 {device['host']} 的状态...")futures.append(executor.submit(check_device_status, device))for future in concurrent.futures.as_completed(futures):future.result()with concurrent.futures.ThreadPoolExecutor() as executor:futures = []for device in config['devices']:logging.info(f "正在配置设备 {device['host']}...")futures.append(executor.submit(configure_device, device))for future in concurrent.futures.as_completed(futures):future.result()with concurrent.futures.ThreadPoolExecutor() as executor:futures = []for device in config['devices']:logging.info(f "正在进行故障排除...")futures.append(executor.submit(troubleshoot_device, device))for future in concurrent.futures.as_completed(futures):future.result()logging.info("脚本执行完毕")if __name__ == '__main__':main()

来自: 学习Python 之 日志巡检脚本icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=Mzk0NTQ3OTk3MQ==&mid=2247487526&idx=1&sn=aa64a64703a14f4c5f1a9527e8fe5f3c&chksm=c315986af462117c3235616370efdf3a6e7b88489b1b090a7ba8ac85ab17956bd2cf53be880d&token=355315523&lang=zh_CN#rd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/15691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里巴巴最新研究突破:自我演化大模型,打破性能天花板

获取本文论文原文PDF,请在公众号【AI论文解读】留言:论文解读AI论文解读 原创作者 | 柏企 引言:自我进化的新篇章 在人工智能领域,大型语言模型(LLMs)的发展正迎来一场革命性的变革。传统的训练模式依赖…

006、API_单线程

Redis使用了单线程架构和I/O多路复用模型来实现高性能的内存数据库 服务,本节首先通过多个客户端命令调用的例子说明Redis单线程命令处理 机制,接着分析Redis单线程模型为什么性能如此之高,最终给出为什么理 解单线程模型是使用和运维Redis的…

WordPress国外超人气主题Vikinger汉化版

WordPress国外超人气主题Vikinger汉化版 前言效果图安装教程领取主题下期更新预报 前言 我们在上一个教程已经学过如何安装WordPress,所以现在不用多说。 效果图 安装教程 下载后先本地解压,找到vikinger.zip文件,上传安装并启用主题。 访…

EasyMR 基于国产化信创的适配实践技术详解

国产化信创,即采用国产信息技术产品和服务,构建自主可控的信息技术体系。近年来,随着国家对网络安全和信息安全的重视程度不断提高,国产化信创已经成为国家战略的重要组成部分,并呈现出以下大趋势: ● 政策…

【C语言】C语言-学生选修课程系统(源码)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

分享几张漂亮的linux kde主题

分享几张漂亮的linux kde主题:在系统设置的全局主题内下载。

开源大模型与闭源大模型

概述 开源大模型和闭源大模型是两种常见的大模型类型,它们在以下方面存在差异: 开放性: 开源大模型:代码和模型结构是公开可用的,任何人都可以访问、修改和使用。闭源大模型:模型的代码和结构是私有的&…

求斐波那契数列第n项的值

本期介绍🍖 主要介绍:什么是斐波那契数列,递归实现求斐波那契数列第n项值,递归法为什么不适合求斐波那契数,用迭代法实现求斐波那契数列的值👀。 文章目录 1. 斐波那契数列是什么?2. 题目2. 递归…

iOS17闪退问题 *** Assertion failure in void _UIGraphicsBeginImageContextWithOptions(CGSize, BOOL, CGFloa

ios升级17以后运行闪退。报错日志为*** Assertion failure in void _UIGraphicsBeginImageContextWithOptions(CGSize, BOOL, CGFloat, BOOL)(), UIGraphics.m:410 根据相关断点跟踪,具体报错位置 查看相关api发现iOS17api已经被替代。 替代方式为将UIGraphicsBegin…

9.Docker网络

文章目录 1、Docker网络简介2、常用基本命令3、网络模式对比举例3.1、bridge模式3.2、host模式3.3、none模式3.4、container模式3.5、自定义网络 1、Docker网络简介 作用: 容器间的互联和通信以及端口映射容器IP变动时候可以通过服务名直接进行网络通信而不受到影…

# 文件或目录损坏且无法读取 的解决方案

文件或目录损坏且无法读取 的解决方案 一、问题描述: windows 系统下,当对某一个文件或文件夹操作时,出现【文件或目录损坏且无法读取】,这时不管对其进行修改、删除、更改属性等操作,都不能正常进行,在 …

从0开始学统计-t检验

1.什么是t检验? t检验是一种用于比较两个样本均值之间差异是否显著的统计方法。它通常用于以下几种情况: (1)单样本 t 检验:用于检验一个样本的平均值是否与一个已知的总体平均值(或者一个假设的总体平均…

11.jenkins调整上线的脚本实现tag方式上线

jenkins调整上线的脚本实现tag方式上线 多次打标签重新提交到gitlab远程仓库-基于multi-line string parameter 修改脚本html_deploy_tar.sh #!/usr/bin/bashDate$(date %F-%H-%M) web_server"192.168.111.22 192.168.111.23" Name${Date}-${git_version} code_t…

网络模型-路由策略

一、路由策略 路由策略(Routing Policy)作用于路由,主要实现了路由过滤和路由属性设置等功能,它通过改变路由属性(包括可达性)来改变网络流量所经过的路径。目的:设备在发布、接收和引入路由信息时,根据实际组网需要实施一些策略&#xff0c…

笔记89:LeetCode_135_分发糖果

前言: 注:代码随想录中没有很清楚的提起想出方法的思路,只是给出了解决这个问题的大致思路和代码;下面我将介绍一下我的思考过程,并贴出实现代码; a a a a 思考过程: 思路1:为了…

【实际项目精选源码】ehr人力资源管理系统实现案例(java,vue)

一、项目介绍 一款全源码可二开,可基于云部署、私有部署的企业级数字化人力资源管理系统,涵盖了招聘、人事、考勤、绩效、社保、酬薪六大模块,解决了从人事招聘到酬薪计算的全周期人力资源管理,符合当下大中小型企业组织架构管理运…

docker-compose Install homer

homer前言 一个非常简单的静态主页,为您的服务器保持您的服务在手,从一个简单的yaml配置文件。 前提要求 安装 docker docker-compose 参考创建一键安装homer 脚本 homer安装位置/homerhomer 脚本位置/homer/assetshomer logo 图标/home/assets/iconshomer 端口80homer 颜色…

运维 之 大文件分片刻录光盘

需求 因有些企业中涉及设备只能通过光盘介质方式拷贝文件,然而采购的单张光盘又不能确保存放下一些较大的文件,所以只能通过分片的方式逐个光盘存储。 Windows处理 1、安装压缩软件(自行选择,这里使用WinRAR)、Ultr…

HTML静态网页成品作业(HTML+CSS)——企业酒店官网网页(5个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有5个页面。 二、作品演示 三、代…

FuTalk设计周刊-Vol.053

#AI漫谈 热点捕手 1.Midjourney推出新功能Room 用户可在聊天室中一起创作图像 Midjourney最近推出了一个有趣的新功能——Room,为用户提供了一个协作和社交平台,用户可以一起创建和分享图像,并参与实时聊天。Room促进了用户之间的互动和合作…