最近由于增加了很多新的服务,服务器经常会因为oom、磁盘空间不足等原因造成各种各样的问题。所以需要写一个小工具完成对各服务器的巡检。

思路比较简单:利用paramiko这个库,在服务器上执行linux命令并将结果返回,然后通过正则表达式匹配想要的数据并进行简单数据处理 就能知道各服务器上资源占用情况了。

话不多说,上代码:

 1 from functools import reduce
2 import paramiko
3 import re
4
5 worker_ips = [
6 '192.168.1.2',
7 '192.168.1.3',
8 '192.168.1.4',
9 ]
10
11 def get_cmd_result(ip,cmd,password="***"):
12 ssh = paramiko.SSHClient()
13 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
14 ssh.connect(hostname=ip,port=22,username='root',password=password)
15 stdin,stdout,stderr = ssh.exec_command(cmd)
16 result = stdout.read()
17
18 return result
19
20 def get_re_result(rule,result):
21 result_li = re.findall(rule,result)
22
23 return result_li
24
25 def check_cpu():
26 cpu_space_ip_dict = {}
27 for worker_ip in worker_ips:
28 result = get_cmd_result(worker_ip,'top -bi -n 4 -d 0.02') # 单独的top命令通过paramiok不会有返回值,-n 表示查看4次,-d 表示隔多久查看一次
29 space_li = get_re_result(r', (\d+.\d+) id', result) # 注意:可能由于网络原因,查看4次结果 列表长度不一定就是4,元素个数会<=4,有可能为0
30 if space_li:
31 # space = 100 - reduce(lambda a,b:float(a) + float(b), space_li) / len(space_li)
32 space = 100 - sum([float(x) for x in space_li]) / len(space_li)
33 cpu_space_ip_dict[worker_ip] = "%d%%" % space
34 else:
35 cpu_space_ip_dict[worker_ip] = "【获取服务器数据异常,需手动获取】"
36
37 return cpu_space_ip_dict
38
39 def check_df():
40 df_space_ip_result = {}
41 for worker_ip in worker_ips:
42 result = get_cmd_result(worker_ip,'df /')
43 space = get_re_result(r'\d+%',result)[0]
44 df_space_ip_result[worker_ip] = space
45
46 return df_space_ip_result
47
48 def check_mem():
49 mem_space_ip_dict = {}
50 for worker_ip in worker_ips:
51 result = get_cmd_result(worker_ip,'free | grep Mem')
52 mem_li = get_re_result(r'\d+',result)
53 mem_space = round(int(mem_li[1]) / int(mem_li[0]+1e-5), 2) * 100
54 mem_space_ip_dict[worker_ip] = mem_space
55
56 return mem_space_ip_dict

附上docker容器资源的解决方法:

存在可能平时的服务是跑在docker容器里面,想要获取容器中某些资源情况,可以如下操作:

1 cmd = 'docker exec test_01 df -h'
2 stdin, stdout, stderr = ssh.exec_command(cmd)
3 result = stdout.read()

更有可能需要在容器中执行多个步骤返回结果,则可以加上bash -c 参数指定多个命令,命令间用&&分隔,如下:

1 cmd = '''docker exec tets_01 bash -c "cd /home/*** && . set_path.sh && 。。。。。。"'''
2 stdin, stdout, stderr = ssh.exec_command(cmd)
3 result = stdout.read()

python查看服务器cpu、硬盘、内存使用率,用于日常巡检的更多相关文章

  1. 【转载】使用宝塔Linux面板功能查看服务器CPU使用率

    运维过阿里云服务器或者腾讯云服务器的运维人员都知道,针对耗资源以及高并发的应用,很多时候我们需要关注云服务器的资源利用率情况,如最近一段时间内CPU的使用率.内存占用率等情况信息.阿里云和腾讯云官方后 ...

  2. Python获取CPU、内存使用率以及网络使用状态代码

    Python获取CPU.内存使用率以及网络使用状态代码_python_脚本之家 http://www.jb51.net/article/134714.htm

  3. Linux下使用java获取cpu、内存使用率

    原文地址:http://www.voidcn.com/article/p-yehrvmep-uo.html 思路如下:Linux系统中可以用top命令查看进程使用CPU和内存情况,通过Runtime类 ...

  4. Ubuntu 16.04 标题栏实时显示上下行网速、CPU及内存使用率--indicator-sysmonitor

    ---------------------------------------------------------------------------- 原文地址:http://blog.csdn.N ...

  5. Ubuntu 16.04 标题栏实时显示上下行网速、CPU及内存使用率

    有时感觉网络失去响应,就通过Ubuntu 14.04自带的系统监视器程序来查看当前网速,但是这样很不方便,遂打算让网速显示在标题栏,那样就随时可直观的看到.一番搜索尝试后,成功实现!同时也实现了CPU ...

  6. Ubuntu下查看服务器cpu是否支持VT

    http://blog.51cto.com/zhangmingqian/1249522 Ubuntu下查看服务器cpu是否支持VT 原创wazjajl 2013-07-15 16:25评论(0)119 ...

  7. C#获取CPU和内存使用率

    获取内存使用率 方式1: using System; using System.Runtime.InteropServices; namespace ConsoleApp1 { public clas ...

  8. 转:ZABBIX监控H3C设备的CPU和内存使用率

      由于最近监控的H3C路由器经常出现死机现象,SNMP获取不到数据,后面检查发现是CPU使用率过高,直接导致无法处理SNMP请求,所以需求来了,怎样通过SNMP监控H3C路由器的CPU和内存使用率? ...

  9. C#获取特定进程CPU和内存使用率

    首先是获取特定进程对象,可以使用Process.GetProcesses()方法来获取系统中运行的所有进程,或者使用Process.GetCurrentProcess()方法来获取当前程序所对应的进程 ...

  10. 如何查看服务器CPU核心数和线程数

    知道服务器CPU型号,那么我们如何在服务器里面查看服务器CPU核心数和线程数呢? 步骤: 先用鼠标右键点击屏幕最下方的任务栏空白处.会弹出一个菜单. 在菜单中用鼠标左键点选“启动任务管理器”. 点击任 ...

随机推荐

  1. Building fresh packages卡很久

    [NPM]Building fresh packages运行很久都没反应原创onemetre 最后发布于2019-12-24 10:20:13 阅读数 287 收藏展开[问题]通过YARN 安装,Bu ...

  2. WampServer3.0服务器端开启ssl认证后重启Apache失败,解决办法

    最近项目中需要访问网站的 https 地址,于是进行部署,什么事情都是想起来简单,做起来难,想着一天就能搞定的事儿,结果前后折腾了三天. 现在把部署的经历记录下来,希望对朋友们有所帮助. 1.在西部数 ...

  3. 解决windows环境TIM无法修改个人文件夹位置

    原文在这里,我做了一下整理并方便下次找到 步骤如下 进入C:\Users\Public\Documents\Tencent\QQ文件夹下(没有则创建),创建UserDataInfo.ini文本文档 编 ...

  4. Spring Boot 开启后缀匹配模式

    项目原有 Java 配置为继承 WebMvcConfigurationSupport, 而WebMvcConfigurationSupport#requestMappingHandlerMapping ...

  5. jdbc中druid连接池遇到的问题和jdbcTemplate

    无效的源发行版11 这是jdk版本不一致,去项目结构里排查一下 严重: init datasource error com.mysql.jdbc.exceptions.jdbc4.MySQLNonTr ...

  6. 嵌在Android app的html 拨打不了电话,发送不了短信

    html嵌在app里面的 <a href="tel:xxx"></a> <a href="sms:phoneNmber?body=1111& ...

  7. 使用Android studio配置软件签名,并在车机安装

    系统级APP,可在Androidmanifest.xml中配置属性,并使用系统级签名. 1. 签名方式 1.1 bulid.gradle(:app)中添加签名信息 1.2 使用Android stud ...

  8. EXE项目和DLL项目远程调试、Props设置说明

    通用宏设置 exe项目根据平台.配置设置输出路径: dll项目根据平台.配置设置输出路径,dll文件.lib文件分别输出到自己的路径: 中间文件根据平台.配置.项目设置输出路径: 设置远程调试命令.远 ...

  9. 传递数据(props)

    student.vue <template> <div> <h3>{{msg}}</h3> <h3>姓名:{{name}}</h3&g ...

  10. 如何用python脚本采集某网图片

    一.前言: 今天学了两个工具urlopen  和etree,这两个小工具至关重要.urllib.request模块提供了最基本的构造HTTP请求的方法,利用它可以模拟浏览器的一个请求发起过程,同时它还 ...