最近由于增加了很多新的服务,服务器经常会因为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. 常用ansible命令梳理

    命令的具体格式 : ansible <host-pattern> [-f forks] [-m module_name] [-a args] 场景 命令 查询线上所有机器某个文件的含有某个 ...

  2. 打开Access时电脑出现蓝屏,错误编号0x00000116的问题解决

    Windows7 64位旗舰版,在打开Access 2013,Onenote 2013时均会出现蓝屏,现就出现蓝屏问题解决方法给大家做一个分享. 步骤: 1.右击我的电脑,打开设备管理器 2.按顺序1 ...

  3. python 对接各大数据库,快速上手!

      1.mysql 安装pymysql pip intsall pymysql 快速上手 import pymysql # 第一步:连接到数据库 con = pymysql.connect(host= ...

  4. Win+R 常用命令

      regedit 系统注册表编辑器 osk 打开键盘 msconfig 关闭系统开机启动项 gpedit.msc 本地组策略编辑器 nslookup IP地址侦测器 explorer 打开资源管理器 ...

  5. js 俄罗斯方块 canvas

    俄罗斯方块背景- canvans 第一次写不知道说些什么好,直接上代码了@_@... jquery引入 <script src="https://cdn.bootcdn.net/aja ...

  6. 个人css样式

    <style> .div1{ width:200px; height:100px; border:1px solid #dddddd; transition:all 0.5s linear ...

  7. 记一次redis集群搭建过程

    在搭建前,我们先用vmware创建3台虚拟机,并确保它们相互之间能够ping通. 1. redis源码安装 1.1 编译安装 apt install gcc make wget http://down ...

  8. Java把List转成以逗号分隔的字符串

    private static <T> String parseListToStr(List<T> list){ String result = list.stream().ma ...

  9. vue2 安装swiper

    npm install swiper@5.4.5 -D

  10. 《Makefile中变量的高级用法:变量的替换引用、变量的嵌套使用》

    高级使用方法有两种:第一种是变量的替换引用,第二种是变量的嵌套引用. 第一种用法经常用到,第二种用法我们很少使用.我们应该尽量避免使用变量的嵌套引用,在必须使用时,嵌套的层数越少越好.因为这种方法表达 ...