python查看服务器cpu、硬盘、内存使用率,用于日常巡检
最近由于增加了很多新的服务,服务器经常会因为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、硬盘、内存使用率,用于日常巡检的更多相关文章
- 【转载】使用宝塔Linux面板功能查看服务器CPU使用率
运维过阿里云服务器或者腾讯云服务器的运维人员都知道,针对耗资源以及高并发的应用,很多时候我们需要关注云服务器的资源利用率情况,如最近一段时间内CPU的使用率.内存占用率等情况信息.阿里云和腾讯云官方后 ...
- Python获取CPU、内存使用率以及网络使用状态代码
Python获取CPU.内存使用率以及网络使用状态代码_python_脚本之家 http://www.jb51.net/article/134714.htm
- Linux下使用java获取cpu、内存使用率
原文地址:http://www.voidcn.com/article/p-yehrvmep-uo.html 思路如下:Linux系统中可以用top命令查看进程使用CPU和内存情况,通过Runtime类 ...
- Ubuntu 16.04 标题栏实时显示上下行网速、CPU及内存使用率--indicator-sysmonitor
---------------------------------------------------------------------------- 原文地址:http://blog.csdn.N ...
- Ubuntu 16.04 标题栏实时显示上下行网速、CPU及内存使用率
有时感觉网络失去响应,就通过Ubuntu 14.04自带的系统监视器程序来查看当前网速,但是这样很不方便,遂打算让网速显示在标题栏,那样就随时可直观的看到.一番搜索尝试后,成功实现!同时也实现了CPU ...
- Ubuntu下查看服务器cpu是否支持VT
http://blog.51cto.com/zhangmingqian/1249522 Ubuntu下查看服务器cpu是否支持VT 原创wazjajl 2013-07-15 16:25评论(0)119 ...
- C#获取CPU和内存使用率
获取内存使用率 方式1: using System; using System.Runtime.InteropServices; namespace ConsoleApp1 { public clas ...
- 转:ZABBIX监控H3C设备的CPU和内存使用率
由于最近监控的H3C路由器经常出现死机现象,SNMP获取不到数据,后面检查发现是CPU使用率过高,直接导致无法处理SNMP请求,所以需求来了,怎样通过SNMP监控H3C路由器的CPU和内存使用率? ...
- C#获取特定进程CPU和内存使用率
首先是获取特定进程对象,可以使用Process.GetProcesses()方法来获取系统中运行的所有进程,或者使用Process.GetCurrentProcess()方法来获取当前程序所对应的进程 ...
- 如何查看服务器CPU核心数和线程数
知道服务器CPU型号,那么我们如何在服务器里面查看服务器CPU核心数和线程数呢? 步骤: 先用鼠标右键点击屏幕最下方的任务栏空白处.会弹出一个菜单. 在菜单中用鼠标左键点选“启动任务管理器”. 点击任 ...
随机推荐
- 图片视频二进制流base64加密
一:读取图片或者视频,转换二进制流,进行Base64加密 @PostMapping("/base64Encoder") public StringBuilder changeIma ...
- Python全栈学习笔记---问题总结(五)
一.全局变量和局部变量 在函数内声明全局变量:globle 二.数值型lis和字符型list转换 数值型list转字符型list 3.x: array = [1, 2, 3, 4, 5,6 ] arr ...
- bat 脚本用 winrar 自动打包压缩文件
bat 的文本如下: --声明winrar软件的位置set Path=;"C:\Program Files\WinRAR";%SystemRoot%\system32--用forf ...
- VM虚拟机15安装Kali Linux2020版详细教程
下载kali镜像 kali Linux官网地址https://www.kali.org/downloads/下载相对应的电脑版本 打开Vmware虚拟机 安装虚拟机看物理机配置,尽量不要太折腾电脑(虚 ...
- Quartz 2D CGPattern学习笔记
CGPattern是在图形上下文中重复绘制的一系列绘制操作.你可以像使用颜色一样使用图案.当使用CGPattern进行绘制时,Quartz将页面划分为一组图案单元格,每个单元格的大小为CGPatter ...
- window JAVA 环境变量配置
java win环境变量配置1.安装的时候拷贝出,安装目录C:\Program Files\Java\jdk1.8.0_40\2.在系统变量中,点击"新建",弹出窗口后在变量名输入 ...
- android root app 无法umount
app已经有root权限了. 在执行umount /sbin时候总是不成功,但是在adb 的shell 里是可以的. 研究半天后发现,原来app的mount 空间被修改了. 用以下方法解决问. ech ...
- Python占位符总结:%方式和format方式
Python中,我们在预定义某类具有相似格式的变量或者输出一句含有多个变量的提示语句时,往往用到占位符,而占位符有两种表达方式: %方式: 下面这段代码摘自matplotlib的_init_.py文件 ...
- ctp认证权限
现象: /sys/firmware/dmi/tables/smbios_entry_point: Permission denied/dev/mem: Permission denied/sys/fi ...
- swing01
基于Eclipse和Mysql 快捷键: 类的备注:/** +enter main方法快捷方式:main alt+/ 自动提示:alt+/ 提示报错:ctrl+1 输出语句快捷方式:syso alt+ ...