python监控系统资源

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python监控系统资源相关的知识,希望对你有一定的参考价值。

监控网卡流量

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

#!/usr/bin/python

import re

import os

#get SNMP-MIB2 of the devices

def getAllitems(host,oid):

        sn1 = os.popen(‘snmpwalk -v 2c -c public ‘ + host + ‘ ‘ + oid).read().split(‘\n‘)[:-1]

        return sn1

                                                                                          

#get network device

def getDevices(host):

        device_mib = getAllitems(host,‘RFC1213-MIB::ifDescr‘)

        device_list = []

        for item in device_mib:

                if re.search(‘eth‘,item):

                        device_list.append(item.split(‘:‘)[3].strip())

        return device_list

                                                                                          

#get network date

def getDate(host,oid):

        date_mib = getAllitems(host,oid)[1:]

        date = []

        for item in date_mib:

                byte = float(item.split(‘:‘)[3].strip())

                date.append(str(round(byte/1024,2)) + ‘ KB‘)

        return date

                                                                                          

if __name__ == ‘__main__‘:

        hosts = [‘192.168.30.111‘,‘192.168.30.112‘]

        for host in hosts:

                device_list = getDevices(host)

                                                                                          

                inside = getDate(host,‘IF-MIB::ifInOctets‘)

                outside = getDate(host,‘IF-MIB::ifOutOctets‘)

                                                                                          

                print ‘==========‘ + host + ‘==========‘

                for in range(len(inside)):

                        print ‘%s : RX: %-15s   TX: %s ‘ % (device_list[i], inside[i], outside[i])

                print


监控内存(swap)使用率

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

#!/usr/bin/python

import os

def getAllitems(host, oid):

        sn1 = os.popen(‘snmpwalk -v 2c -c public ‘ + host + ‘ ‘ + oid).read().split(‘\n‘)[:-1]

        return sn1

                                                                            

def getSwapTotal(host):

        swap_total = getAllitems(host, ‘UCD-SNMP-MIB::memTotalSwap.0‘)[0].split(‘ ‘)[3]

        return swap_total

                                                                            

def getSwapUsed(host):

        swap_avail = getAllitems(host, ‘UCD-SNMP-MIB::memAvailSwap.0‘)[0].split(‘ ‘)[3]

        swap_total = getSwapTotal(host)

        swap_used = str(round(((float(swap_total)-float(swap_avail))/float(swap_total))*100 ,2)) + ‘%‘

        return swap_used

                                                                            

def getMemTotal(host):

        mem_total = getAllitems(host, ‘UCD-SNMP-MIB::memTotalReal.0‘)[0].split(‘ ‘)[3]

        return mem_total

                                                                            

def getMemUsed(host):

        mem_total = getMemTotal(host)

        mem_avail = getAllitems(host, ‘UCD-SNMP-MIB::memAvailReal.0‘)[0].split(‘ ‘)[3]

        mem_used = str(round(((float(mem_total)-float(mem_avail))/float(mem_total))*100 ,2)) + ‘%‘

        return mem_used

                                                                            

if __name__ == ‘__main__‘:

        hosts = [‘192.168.30.111‘,‘192.168.30.112‘]

        print "Monitoring Memory Usage"

        for host in hosts:

                mem_used = getMemUsed(host)

                swap_used = getSwapUsed(host)

                print ‘==========‘ + host + ‘==========‘

                print ‘Mem_Used = %-15s   Swap_Used = %-15s‘ % (mem_used, swap_used)

                print


监控系统负载

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#!/usr/bin/python

import os

def getAllitems(host, oid):

        sn1 = os.popen(‘snmpwalk -v 2c -c public ‘ + host + ‘ ‘ + oid).read().split(‘\n‘)

        return sn1

                                                                     

def getload(host,loid):

        load_oids = ‘1.3.6.1.4.1.2021.10.1.3.‘ + str(loid)

        return getAllitems(host,load_oids)[0].split(‘:‘)[3]

                                                                     

if __name__ == ‘__main__‘:

        hosts = [‘192.168.30.111‘,‘192.168.30.112‘]

        #check_system_load

        print ‘==============System Load==============‘

        for host in hosts:

                load1 = getload(host, 1)

                load10 = getload(host, 2)

                load15 = getload(host, 3)

                print ‘%s load(1min): %s ,load(10min): %s ,load(15min): %s‘ % (host,load1,load10,load15)


监控CPU

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

#!/usr/bin/python

import os

def getAllitems(host, oid):

        sn1 = os.popen(‘snmpwalk -v 2c -c public ‘ + host + ‘ ‘ + oid + ‘|grep Raw|grep Cpu|grep -v Kernel‘).read().split(‘\n‘)[:-1]

        return sn1

                                                                

def getDate(host):

        items = getAllitems(host, ‘.1.3.6.1.4.1.2021.11‘)

                                                                

        date = []

        rate = []

        cpu_total = 0

        #us = us+ni, sy = sy + irq + sirq

        for item in items:

                float_item = float(item.split(‘ ‘)[3])

                cpu_total += float_item

                if item == items[0]:

                        date.append(float(item.split(‘ ‘)[3]) + float(items[1].split(‘ ‘)[3]))

                elif item == item[2]:

                        date.append(float(item.split(‘ ‘)[3+ items[5].split(‘ ‘)[3+ items[6].split(‘ ‘)[3]))

                else:

                        date.append(float_item)

                                                                

        #calculate cpu usage percentage

        for item in date:

                rate.append((item/cpu_total)*100)

                                                                

        mean = [‘%us‘,‘%ni‘,‘%sy‘,‘%id‘,‘%wa‘,‘%cpu_irq‘,‘%cpu_sIRQ‘]

                                                                

        #calculate cpu usage percentage

        result = map(None,rate,mean)

        return result

                                                                

if __name__ == ‘__main__‘:

        hosts = [‘192.168.30.111‘,‘192.168.30.112‘]

        for host in hosts:

                print ‘==========‘ + host + ‘==========‘

                result = getDate(host)

                print ‘Cpu(s)‘,

                #print result

                for in range(5):

                        print ‘ %.2f%s‘ % (result[i][0],result[i][1]),

                print

                print

监控磁盘

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

#!/usr/bin/python

import re

import os

def getAllitems(host,oid):

        sn1 = os.popen(‘snmpwalk -v 2c -c public ‘ + host + ‘ ‘ + oid).read().split(‘\n‘)[:-1]

        return sn1

                                                             

def getDate(source,newitem):

        for item in source[5:]:

                newitem.append(item.split(‘:‘)[3].strip())

        return newitem

                                                             

def getRealDate(item1,item2,listname):

        for in range(len(item1)):

                listname.append(int(item1[i])*int(item2[i])/1024)

        return listname

                                                             

def caculateDiskUsedRate(host):

        hrStorageDescr = getAllitems(host, ‘HOST-RESOURCES-MIB::hrStorageDescr‘)

        hrStorageUsed = getAllitems(host, ‘HOST-RESOURCES-MIB::hrStorageUsed‘)

        hrStorageSize = getAllitems(host, ‘HOST-RESOURCES-MIB::hrStorageSize‘)

        hrStorageAllocationUnits = getAllitems(host, ‘HOST-RESOURCES-MIB::hrStorageAllocationUnits‘)

                                                             

        disk_list = []

        hrsused = []

        hrsize = []

        hrsaunits = []

                                                             

        #get disk_list

        for item in hrStorageDescr:

                if re.search(‘/‘,item):

                        disk_list.append(item.split(‘:‘)[3])

        #print disk_list      

                                                             

        getDate(hrStorageUsed,hrsused)

        getDate(hrStorageSize,hrsize)

        #print getDate(hrStorageAllocationUnits,hrsaunits)

                                                             

        #get hrstorageAllocationUnits

        for item in hrStorageAllocationUnits[5:]:

                hrsaunits.append(item.split(‘:‘)[3].strip().split(‘ ‘)[0])

        #caculate the result

        #disk_used = hrStorageUsed * hrStorageAllocationUnits /1024 (KB)

        disk_used = []

        total_size = []

        disk_used = getRealDate(hrsused,hrsaunits,disk_used)

        total_size = getRealDate(hrsize,hrsaunits,total_size)

                                                             

        diskused_rate = []

        for in range(len(disk_used)):

                diskused_rate.append(str(round((float(disk_used[i])/float(total_size[i])*100), 2)) + ‘%‘)

                                                             

        return diskused_rate,disk_list

                                                             

if __name__ == ‘__main__‘:

        hosts = [‘192.168.30.111‘,‘192.168.30.112‘]

        for host in hosts:

                result = caculateDiskUsedRate(host)

                diskused_rate = result[0]

                partition = result[1]

                print "==========",host,‘==========‘

                for in range(len(diskused_rate)):

                        print ‘%-20s used: %s‘ % (partition[i],diskused_rate[i])

                print


本文出自 “linux运维” 博客,谢绝转载!

以上是关于python监控系统资源的主要内容,如果未能解决你的问题,请参考以下文章

scrapy主动退出爬虫的代码片段(python3)

scrapy按顺序启动多个爬虫代码片段(python3)

python BrickstorOS片段用于获取各种文件系统信息。

[未解决问题记录]python asyncio+aiohttp出现Exception ignored:RuntimeError('Event loop is closed')(代码片段

常用python日期日志获取内容循环的代码片段

python 有用的Python代码片段