首页 > 系统相关 >Linux-IO监控

Linux-IO监控

时间:2024-05-14 17:19:55浏览次数:21  
标签:监控 22.62 IO ip list result str Linux line

import pymysql
import os
import re
import time
import datetime
'''
建表语句:
CREATE TABLE `r_linux_io_monitor` (
  `up_date` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '监测时间',
  `ip` varchar(16) DEFAULT NULL COMMENT 'IP地址',
    `CPU使用率` FLOAT not NULL COMMENT 'CPU使用率',
  `磁盘IO` text not NULL COMMENT '磁盘IO:{设备名称:{读每秒:float KB/S,写每秒:float KB/S},}',
    `网卡速率` text not NULL COMMENT '网卡速率:{发送速率:float bytes/s,接收速率:float bytes/s}',
    `内存使用率` FLOAT not NULL COMMENT '内存使用率'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='Linux系统IO监控表';
'''
def iostat命令执行(ip:str,port:int=10022):
    cmd_str = "ssh -p {} {} 'sudo iostat -kx'".format(port,ip)
    # print(cmd_str)
    result=os.popen(cmd_str)
    result_str = result.read()
    return result_str;
def CPU利用率计算(cmd_result_Str:str)->float:
    '''
    请直接将命令执行结果发送过来
    总体CPU利用率 = %user + %system + %iowait
    '''
    #avg-cpu:  %user   %nice %system %iowait  %steal   %idle
    avg_cpu_str = re.findall(r'(?<=\n) +.+',cmd_result_Str)[0]

    avg_cpu_list=re.findall(r'\d+.\d+|\d+', avg_cpu_str)

    CPU_usage = float(avg_cpu_list[0])+float(avg_cpu_list[2])+float(avg_cpu_list[3])
    return CPU_usage;
def 获取磁盘IO(cmd_result_Str:str)->dict:
    '''
    请直接将命令执行结果发送过来
    返回的数据结构:{设备名称:{读每秒:float,写每秒:float},}
    '''
    lines = cmd_result_Str.split('\n')
    idx=0
    for line in lines:
        if('Device:' == line[:7]):
            break
        idx+=1
    need_line=lines[idx+1:]
    ret_dict={}
    for line in need_line:
        if(0 == len(line)):    #排除空字符串
            continue
        if("dm" == line[:2]):#排除dm-开头的设备,这是虚拟设备,lvm映射出来的。
            continue
        line = re.sub(r' +',' ',line)
        line_list= line.split(' ')
        ret_dict[line_list[0]]={'kB_read/s':line_list[1],'kB_wrtn/s':line_list[2]}
    return ret_dict;
def 获取网卡速率(ip:str,port:int=10022)->dict:
    '''
    设备名称将被写死;
    返回字典:{发送速率:,接收速率:},第一个是发送速率(bytes/s);第二个是接收速率(bytes/s)。
    '''
    设备名称="bond0"
    cmd_str = "ssh -p {} {} sudo ip -s link show {}|grep -E '^ +[0-9]+' -o|grep -E [0-9]+ -o".format(port,ip,设备名称)
    result=os.popen(cmd_str)
    result_lines = result.read().split('\n')    #RX在第一行,TX在第二行
    #RX 表示接收(Receive)的数据量,而 TX 表示发送(Transmit)的数据量。
    RX_bytes_old = int(result_lines[0])
    TX_bytes_old = int(result_lines[1])
    time.sleep(1)
    result=os.popen(cmd_str)
    result_lines = result.read().split('\n')    #RX在第一行,TX在第二行
    RX_bytes_new = int(result_lines[0])
    TX_bytes_new = int(result_lines[1])

    发送速率 = TX_bytes_new-TX_bytes_old
    接收速率 = RX_bytes_new-RX_bytes_old
    return {"发送速率":发送速率,"接收速率":接收速率};
def 获取物理内存使用率(ip:str,port:int=10022)->float:
    '''
    
    '''
    cmd_str = "ssh -p {} {} sudo cat /proc/meminfo".format(port,ip)
    result=os.popen(cmd_str)
    result_lines = result.read().split('\n')
    MemTotal=re.findall(r'\d+',result_lines[0])[0]    #表示系统总内存大小,以 KB 为单位。
    MemAvailable=re.findall(r'\d+',result_lines[2])[0]    #表示系统当前可用的内存大小,以 KB 为单位。这个字段在最新的内核版本中提供了更准确的可用内存信息。
    #不取MemFree是因为那是完完全全没有被使用的内存。
    #取MemAvailable的话,是表示系统可以应急抽调的内存,它包含MemFree
    return round(1-(int(MemAvailable)/int(MemTotal)),2);
def write_mysql(data_2List:list)->bool:
    mysql = pymysql.connect(host='',port=,user='',password='',database='sczxjc')
    # mysql = pymysql.connect(host='192.168.51.2',port=3306,user='root',password='',database='sczxjc')
    mysql_cursor=mysql.cursor()
    for data in data_2List:
        mysql_sql_str="INSERT INTO `sczxjc`.`r_linux_io_monitor`(`up_date`, `ip`, `CPU使用率`, `磁盘IO`, `网卡速率`, `内存使用率`) VALUES ('{}', '{}', {}, '{}', '{}', {})".format(data[0],data[1],data[2],data[3],data[4],data[5])
        # print(mysql_sql_str)
        mysql_cursor.execute(mysql_sql_str)
    mysql.commit()
    mysql.close();
def main():
    ips=["22.62.96.36","22.62.96.37","22.62.96.38","22.62.96.39","22.62.96.40","22.62.96.41","22.62.96.42","22.62.96.43","22.62.96.44","22.62.96.45","22.62.96.46","22.62.96.47","22.62.96.48","22.62.96.49","22.62.96.50","22.62.96.51","22.62.96.52","22.62.96.53","22.62.96.54",]
    # ips=["22.62.96.36","22.62.96.37",]
    now_datetime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:00')
    out_result_list=[]
    for ip in ips:
        out_list=[now_datetime,ip]
        cmd_result_Str = iostat命令执行(ip)
        out_list.append(CPU利用率计算(cmd_result_Str))
        out_list.append(str(获取磁盘IO(cmd_result_Str)).replace("'",'"'))
        out_list.append(str(获取网卡速率(ip)).replace("'",'"'))
        out_list.append(获取物理内存使用率(ip))
        out_result_list.append(out_list)
    write_mysql(out_result_list);
if __name__ == '__main__':
    main()

将数据写入mysql之后,在展示出来。

标签:监控,22.62,IO,ip,list,result,str,Linux,line
From: https://www.cnblogs.com/love-DanDan/p/18191776

相关文章

  • 探索大语言模型:理解Self Attention
    一、背景知识在ChatGPT引发全球关注之后,学习和运用大型语言模型迅速成为了热门趋势。作为程序员,我们不仅要理解其表象,更要探究其背后的原理。究竟是什么使得ChatGPT能够实现如此卓越的问答性能?自注意力机制的巧妙融入无疑是关键因素之一。那么,自注意力机制究竟是什么,它是如何创造......
  • Linux启动流程
    参考链接:https://www.ruanyifeng.com/blog/2013/02/booting.htmlhttps://www.ruanyifeng.com/blog/2013/08/linux_boot_process.htmlhttps://www.runoob.com/linux/linux-system-boot.html第一阶段:计算机启动(硬件启动流程)1.BIOS(BasicInputOutputSystem基本输入输出系统)阶......
  • 在Linux中,如何配置防火墙和安全规则?
    在Linux中,配置防火墙和安全规则通常涉及使用iptables或较新的firewalld工具。以下是使用这两种工具的基本步骤和概念:1.使用iptables配置防火墙规则iptables是Linux内核的Netfilter框架的一部分,用于配置防火墙规则。它通过一系列链(chains)和规则(rules)来决定数据包的处理方式(如允......
  • 在Linux中,什么是入侵检测系统(IDS)和入侵防御系统(IPS)?
    在Linux环境中,入侵检测系统(IntrusionDetectionSystem,IDS)和入侵防御系统(IntrusionPreventionSystem,IPS)是两种关键的网络安全组件,用于增强网络的安全性和防护能力。下面是对这两个概念的详细解释:1.入侵检测系统(IDS)入侵检测系统是一种监控工具,其主要职责是实时或定期监控......
  • 【SpringBoot】实现项目启动后执行的两个接口ApplicationRunner和CommandLineRunner
    开发中可能会有这样的场景,需要在容器启动的时候执行一些内容。比如读取配置文件,数据库连接之类的。SpringBoot给我们提供了两个接口来帮助我们实现这种需求。两个启动加载接口分别是:CommandLineRunner和ApplicationRunner。Spring提供了接口InitializingBean,jdk提供了@PostCo......
  • MinIO入门教程
    是什么?MinIO是一种高性能、S3兼容的对象存储。它是为大规模AI/ML、数据湖和数据库工作负载。它是软件定义的并在任何云或本地基础设施上运行。MinIO具有双重许可根据开源GNUAGPLv3和商业企业许可证特点简单简单性是百亿亿次数据基础设施的基础——无论是技术上......
  • [转]查杀linux隐藏挖矿病毒rcu_tasked
    记录一次项目中挖矿病毒的经历这是黑客使用的批量蔓延病毒的工具,通过如下脚本[[email protected]]#cat/home/pischi/.bash_historycd/root/nvidia-smi;ls-a;cd.cfg;ls-a;wc-lip./key20-fippass22"nproc;nvidia-smi;rm-rf.cfg;mkdir.cfg;cd.cfg;wget193.42......
  • java.net.SocketException: Connection reset
    今天在学习socket编程的时候遇到了一个bug:java.net.SocketException:Connectionreset先来看一下自己的代码:服务端:publicclassServerSocketDemo{publicstaticvoidmain(String[]args){try{//建立一个ServerSocketServerS......
  • 图扑智慧农业——生态鱼塘数字孪生监控
    智慧农业园作为新型农业经营模式,正在以其高效、环保、可持续的特点受到广泛关注。智慧鱼塘作为智慧农业中一项关键技术,结合物联网、人工智能、云计算等技术,实现对新型养殖模式的实时监控、优化与管理。效果展示图扑软件应用自研HTforWeb产品,打造轻量化智慧生态鱼塘可视化解......
  • Centos7下Prometheus+Grafana部署 redis 以及 mysql 监控
    Prometheus部署mysql监控本篇文章部分内容与我前一篇文章衔接,看不明白的可以参考我前一篇文章Centos7下搭建Prometheus+Grafana并部署基础监控Redis监控对于Redis的监控,Prometheus可以收集多种指标,包括但不限于:命令统计:如每个命令的调用次数、执行时间等。内存使用情......