python linux系统巡检脚本

2023-11-12

使用python 实现linux 系统巡检远程获取系统资源情况,导出为excel表格

背景: 因为服务器很多,刚开始一台一台手动巡检,效率很低,于是我想能不能写个工具实现一劳永逸,于是我想到了python ,python 具有丰富的类库,且语言简洁,作为运维使用来说比较方便

上代码

import paramiko
from openpyxl import Workbook,load_workbook
from openpyxl.styles import Alignment
# 建立 SSH 客户端对象
ssh = paramiko.SSHClient()
# 当 SSH 没有被信任时自动添加主机密钥
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 主机清单
host_lst = {'host1': {
    'host': '192.168.31.200',
    'port': 22,
    'user': 'root',
    'password': '123456'
},
 'host2' : {
     'host': '192.168.31.201',
     'port': 22,
     'user': 'root',
     'password': '123456'
}
}

def disk_func(ssh):
    # 获取磁盘使用率
    disk_cmd = "df -h"
    stdin, stdout, stderr = ssh.exec_command(disk_cmd)
    output = stdout.read().decode('utf-8')  # 获取标准输出
    output = output.strip().split("\n")
    disk_info = ''
    # 处理数据,得到最后的磁盘信息
    for line in output[1:]:
        line = [s for s in line.split() if s.strip()]
        if (line[0].startswith("/dev")) and (line[-1] not in ['/boot', '/boot/efi']):
            line_str = f"{line[-1]}: {line[-2]}\n"
            disk_info = str(disk_info) + line_str 

    return  disk_info

def cpu_func(ssh):
    # 获取cpu使用率
    cpu_cmd = "top -bn1 | grep Cpu | awk '{print $8}'"
    stdin, stdout, stderr = ssh.exec_command(cpu_cmd)
    output = stdout.read().decode('utf-8')  # 获取标准输出

    return  "{:.2f}%".format(100 - float(output))

def mem_func(ssh):
    # 获取内存使用率
    mem_cmd = "free"
    stdin,stdout,stderr = ssh.exec_command(mem_cmd)
    #output = stdout.read().decode("utf-8").strip().split("\n")
    output = stdout.read().decode("utf-8")
    out_lst = [i.strip().split() for i in output.strip().split("\n") if 'mem' in i.lower()][0]
    result = float(out_lst[2]) / float(out_lst[1]) * 100
    return "{:.2f}%".format(result)

# 插入巡检结果
def save_excel(info_lst):
    row = ws.max_row + 1
    for i in range(len(info_lst)):
        col = i + 1 
        cell = ws.cell(row=row,column=col)
        if i == 1 :
            cell.alignment = Alignment(wrap_text=True)
        ws.column_dimensions[cell.column_letter].auto_size = True     # 设置列宽适应内容
        ws.row_dimensions[cell.row].height = None                     # 设置行高适应内容

        cell.value = info_lst[i]

              

# 定义一个工作薄
# 实例化
path = 'D:/test/check_linux.xlsx'
sheet = "巡检结果记录"
try:
    wb = load_workbook(path)
except FileNotFoundError:
    wb = Workbook()

# 创建一个sheet
if sheet in wb.sheetnames:
    ws = wb[sheet]
else:
    ws = wb.create_sheet(title=sheet)
    
ws.delete_rows(2, ws.max_row)
ws.merge_cells('A1:E1')
ws['A1'] = sheet
ws['A1'].alignment = Alignment(horizontal='center', vertical='center')

# 插入巡检指标
option_lst = ["ip地址","磁盘使用率","cpu使用率","内存使用率"]

# 行
row = ws.max_row + 1
for i in range(len(option_lst)):
    col = i + 1 
    cell = ws.cell(row=row,column=col)
    cell.value = option_lst[i]



# 执行
for i in host_lst.values():
    host = list(i.values())[0]
    port = list(i.values())[1]
    user = list(i.values())[2]
    password = list(i.values())[3]
    try:
        # 连接远程主机
        ssh.connect(
            hostname=host,
            port=port,
            username=user,
            password=password
        )
        print("SSH connection successful!")
        # 磁盘
        disk_info = disk_func(ssh)
        # cpu
        cpu_info = cpu_func(ssh)
        # 内存
        mem_info = mem_func(ssh)

        print(disk_info)
        print(cpu_info)
        print(mem_info)

        os_lst = [host,disk_info,cpu_info,mem_info]
        save_excel(os_lst)
        
    except Exception as e:
        print(f"SSH connection failed: {e}")
    finally:
        ssh.close()

wb.save(path)
print(f"结果保存在{path}中")

不足之处还望批评指正

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python linux系统巡检脚本 的相关文章

  • 我怎样才能更多地了解Python的内部原理? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我使用Python编程已经有半年多了 我对Python内部更感兴趣 而不是使用Python开发应用程序
  • 在 Python distutils 中从 setup.py 查找脚本目录的正确方法?

    我正在分发一个具有以下结构的包 mymodule mymodule init py mymodule code py scripts script1 py scripts script2 py The mymodule的子目录mymodul
  • 忽略 Mercurial hook 中的某些 Mercurial 命令

    我有一个像这样的善变钩子 hooks pretxncommit myhook python path to file myhook 代码如下所示 def myhook ui repo kwargs do some stuff 但在我的例子中
  • 如何创建一个语句来打印以特定单词开头的单词? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何在 python 中打印从特定字母开始的单词 而不使用函数 而是使用方法或循环 1 我有一个字符串 想要打印以 m 开头的单词 S
  • Pandas 数据帧到 numpy 数组 [重复]

    这个问题在这里已经有答案了 我对 Python 很陌生 经验也很少 我已经设法通过复制 粘贴和替换我拥有的数据来使一些代码正常工作 但是我一直在寻找如何从数据框中选择数据 但无法理解这些示例并替换我自己的数据 总体目标 如果有人真的可以帮助
  • 使用 Python pandas 计算调整后的成本基础(股票买入/卖出的投资组合分析)

    我正在尝试对我的交易进行投资组合分析 并尝试计算调整后的成本基础价格 我几乎尝试了一切 但似乎没有任何效果 我能够计算调整后的数量 但无法获得调整后的购买价格有人可以帮忙吗 这是示例交易日志原始数据 import pandas as pd
  • 查找哪些页面不再与写入时复制共享

    假设我在 Linux 中有一个进程 我从中fork 另一个相同的过程 后forking 因为原始进程将开始写入内存 Linux写时复制机制将为进程提供与分叉进程使用的不同的唯一物理内存页 在执行的某个时刻 我如何知道原始进程的哪些页面已被写
  • 使用 OLS 回归预测未来值(Python、StatsModels、Pandas)

    我目前正在尝试在 Python 中实现 MLR 但不确定如何将我找到的系数应用于未来值 import pandas as pd import statsmodels formula api as sm import statsmodels
  • 对图像块进行多重处理

    我有一个函数必须循环遍历图像的各个像素并计算一些几何形状 此函数需要很长时间才能运行 在 24 兆像素图像上大约需要 5 小时 但似乎应该很容易在多个内核上并行运行 然而 我一生都找不到一个有据可查 解释充分的例子来使用 Multiproc
  • 使用鼻子获取设置中当前测试的名称

    我目前正在使用鼻子编写一些功能测试 我正在测试的库操作目录结构 为了获得可重现的结果 我存储了一个测试目录结构的模板 并在执行测试之前创建该模板的副本 我在测试中执行此操作 setup功能 这确保了我在测试开始时始终具有明确定义的状态 现在
  • ftrace:仅打印trace_printk()的输出

    是否可以只转储trace printk 输出于trace文件 我的意思是过滤掉函数跟踪器 或任何其他跟踪器 中的所有函数 一般来说 您可以在选项目录中关闭选项 sys kernel debug tracing options Use ls显
  • 如何解决使用 Spark 从 S3 重新分区大量数据时从内存中逐出缓存的表分区元数据的问题?

    在尝试从 S3 重新分区数据帧时 我收到一个一般错误 Caused by org apache spark SparkException Job aborted due to stage failure Task 33 in stage 1
  • Seaborn Pairplot 图例不显示颜色

    我一直在学习如何在Python中使用seaborn和pairplot 这里的一切似乎都工作正常 但由于某种原因 图例不会显示相关的颜色 我无法找到解决方案 因此如果有人有任何建议 请告诉我 x sns pairplot stats2 hue
  • Pandas 根据 diff 列形成簇

    我正在尝试使用 Pandas 根据表示时间 以秒为单位 的列中的差异来消除数据框中的一些接近重复项 例如 import pandas as pd numpy as np df pd DataFrame 1200 1201 1233 1555
  • 使用 NumPy 将非均匀数据从文件读取到数组中

    假设我有一个如下所示的文本文件 33 346 1223 10 23 11 23 12 23 13 23 14 23 15 23 16 24 10 24 11 24 12 24 13 24 14 24 15 24 16 25 14 25 15
  • mac osx 10.8 上的初学者 python

    我正在学习编程 并且一直在使用 Ruby 和 ROR 但我觉得我更喜欢 Python 语言来学习编程 虽然我看到了 Ruby 和 Rails 的优点 但我觉得我需要一种更容易学习编程概念的语言 因此是 Python 但是 我似乎找不到适用于
  • 默认情况下,Keras 自定义层参数是不可训练的吗?

    我在 Keras 中构建了一个简单的自定义层 并惊讶地发现参数默认情况下未设置为可训练 我可以通过显式设置可训练属性来使其工作 我无法通过查看文档或代码来解释为什么会这样 这是应该的样子还是我做错了什么导致默认情况下参数不可训练 代码 im
  • Tkinter - 浮动窗口 - 调整大小

    灵感来自this https stackoverflow com a 22424245 13629335问题 我想为我的根窗口编写自己的调整大小函数 但我刚刚注意到我的代码显示了一些性能问题 如果你快速调整它的大小 你会发现窗口没有像我希望
  • 您可以将操作直接应用于map/reduce/filter 中的参数吗?

    map and filter通常可以与列表理解互换 但是reduce并不那么容易被交换map and filter 此外 在某些情况下我仍然更喜欢函数语法 但是 当您需要对参数本身进行操作时 我发现自己正在经历语法体操 最终必须编写整个函数
  • 迭代 pandas 数据框的最快方法?

    如何运行数据框并仅返回满足特定条件的行 必须在之前的行和列上测试此条件 例如 1 2 3 4 1 1 1999 4 2 4 5 1 2 1999 5 2 3 3 1 3 1999 5 2 3 8 1 4 1999 6 4 2 6 1 5 1

随机推荐

  • 距离向量算法_RIP协议及距离向量算法(上)【44】

    1 RIP协议 RIP 全称Routing Information Protocol 即路由信息协议 RIP是一种分布式的基于距离向量的路由选择协议 是因特网的协议标准 最大优点的简单 RIP协议要求网络中每一个路由器都维护从它自己到其它每
  • Centos 安装mysql8(YUM方式)

    1 执行安装命令 root localhost wget https dev mysql com get mysql80 community release el8 4 noarch rpm root localhost yum modul
  • JAVA 定义静态map并赋值

    private static final Map
  • C语言入门经典三,c语言入门经典第4版和第3版有什么区别

    问 微软的C语言和其他C语言有什么区别吗 答 不知道楼主说的是所谓 微软的c 是指什么概念 个人意见 仅供参考 1 如果是指微软推出的c语言的编译器ms c的话 其实就是c语言各个编译器之间的区别 如果你想深入了解 最好是学习下c标准的制定
  • 【ICS大作业】

    零 摘要 本文对给定的hello程序的生命周期进行了系统性分析 程序经预处理生成hello i 编译生成hello s 汇编生成hello o 最后链接成可执行目标文件hello Shell收到 hello的指令 调用fork函数创建进程
  • 再临SpringBoot——WebFlux处理流程

    文章目录 WebFlux初次尝试 处理过程源码分析 SpringMvc通常是Servlet应用 因此 可能被当前线程阻塞 以远程调用为例 由于阻塞的缘故 导致Servlet容器使用较大的线程池处理请求 而Spring WebFlux通常是非
  • 第一篇——开始

    第一篇 开始 个人简介 学习经历 学习过程 后记 个人简介 个人简介 以山河作礼 学习经历 作为一名本科大一的软件工程专业学生 我已经在CSDN学习了近一年的时间 同时也深入学习了C语言半年 在我的CSDN博客上 我将记录下我在学习过程中的
  • Vue3.0监听props方法

    学习vue3 0记录下props监听 第一种直接监听这个props export default defineComponent props isOpen Boolean emits close modal null setup props
  • 算术表达式的前缀式、中缀式、后缀式相互转换

    中缀表达式 中缀记法 中缀表达式是一种通用的算术或逻辑公式表示方法 操作符以中缀形式处于操作数的中间 中缀表达式是人们常用的算术表示方法 虽然人的大脑很容易理解与分析中缀表达式 但对计算机来说中缀表达式却是很复杂的 因此计算表达式的值时 通
  • 02Nginx源码分析之总结内存开辟的相关函数(ngx_alloc.c,ngx_palloc.c)

    02Nginx源码分析之总结内存开辟的相关函数 ngx alloc c ngx palloc c 前言 写这一篇的目的是为了方便接下来的阅读 否则每次都要对应查找相应的函数 非常麻烦 并且注意 下面所说的内存对齐 实际上是通过倍数来对齐的
  • Mac下使用Xcode的freopen读取输入输出

    很多使用Mac的小伙伴都知道 类似于win或者linux系统下的直接freopen是不行的 或者说强制读入也是不可的 于是 就是去想办法去读入它了 那么怎么读文件和写文件呢 创建 txt 文件 找到文本编辑 点击新建文稿 但是发现 怎么是这
  • 我要自学网视频教程ajax,这么逆天的自学网站,还是第一次见,难怪考不上清华北大...

    原标题 这么逆天的自学网站 还是第一次见 难怪考不上清华北大 有很多朋友 工作了N年之后 工资一直不涨 其实就是没有找到正确的方法 这个时候呢 我们就需要用到一些非常好用的自学网站 去帮助自己在所在的领域进行充电啦 首选的当然就是下面几个啦
  • Servlet 的应用程序设计

    目录 1 基于 Servlet Controller 的应用程序设计 2 基于 Filter Dispatcher 的应用程序设计 3 使用表单验证器 4 添加数据库访问 5 依赖注入 在该模型中 用一个 Servlet 或者过滤器充当控制
  • Flex中字符串String按照格式转化为日期Date的方法

    在Flex中 要通过传入时间的字符串和格式字符串的方式来转换出Date Flex本身没有完善的方法 不知道Adobe在想什么 这么简单实用的功能都没有 回想起来 还是java神马的好 在网上找了好久都没有完善的解决方案 最后偶然发现Date
  • cout << 输出格式突然变成了16进制

    1 背景 在工程中 我通过cout打印一个被频繁调用的函数里面某个参数的值 在前面若干次调用中 cout lt lt 工作正常 是打印的10进制 突然 不清楚什么原因 就开始打印16进制的值 而且是不加0x的16进制 导致我一直以为是10进
  • 力扣:338. 比特位计数

    给你一个整数 n 对于 0 lt i lt n 中的每个 i 计算其二进制表示中 1 的个数 返回一个长度为 n 1 的数组 ans 作为答案 示例 1 输入 n 2 输出 0 1 1 解释 0 gt 0 1 gt 1 2 gt 10 示例
  • 枪神纪紫霄系列服务器,枪神纪紫霄左轮枪简测评

    枪神纪最新的新年红包武器紫霄左轮枪上线 小编这就给各位玩家带来 枪神纪紫霄左轮枪武器测评 枪神纪紫霄左轮枪怎么样 红包武器 紫霄左轮枪 面板 面板伤害比重击左轮高出10点伤害 穿甲多出65 稳定高出20 便携高6 外观 简直和这皮肤是一套的
  • Mac M1 安装配置TensorFlow-GPU

    在Mac上安装了TensorFlow 但是import Tensorflow时却一直显示TensorFlow不存在 看了各种安装方法 最后终于成功了 进入正题 直接进官网 根据苹果官方给的安装方法进行安装 https developer a
  • Windows下安装 Redis

    目录 1 下载 1 1 Redis官网 1 2 github下载地址 2 安装步骤 2 1 解压Redis压缩包 2 2 创建临时服务 2 3 启动客户端 2 4 注册Redis服务 3 总结 4 致谢 1 下载 1 1 Redis官网 D
  • python linux系统巡检脚本

    使用python 实现linux 系统巡检远程获取系统资源情况 导出为excel表格 背景 因为服务器很多 刚开始一台一台手动巡检 效率很低 于是我想能不能写个工具实现一劳永逸 于是我想到了python python 具有丰富的类库 且语言