86754tr 发表于 2017-9-11 10:39:08

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(':').strip())
      return device_list

#get network date
def getDate(host,oid):
      date_mib = getAllitems(host,oid)
      date = []
      for item in date_mib:
                byte = float(item.split(':').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 i in range(len(inside)):
                        print '%s : RX: %-15s   TX: %s ' % (device_list, inside, outside)
                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').split(' ')
      return swap_total

def getSwapUsed(host):
      swap_avail = getAllitems(host, 'UCD-SNMP-MIB::memAvailSwap.0').split(' ')
      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').split(' ')
      return mem_total

def getMemUsed(host):
      mem_total = getMemTotal(host)
      mem_avail = getAllitems(host, 'UCD-SNMP-MIB::memAvailReal.0').split(' ')
      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).split(':')

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(' '))
                cpu_total += float_item
                if item == items:
                        date.append(float(item.split(' ')) + float(items.split(' ')))
                elif item == item:
                        date.append(float(item.split(' ') + items.split(' ') + items.split(' ')))
                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 i in range(5):
                        print ' %.2f%s' % (result,result),
                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:
                newitem.append(item.split(':').strip())
      return newitem

def getRealDate(item1,item2,listname):
      for i in range(len(item1)):
                listname.append(int(item1)*int(item2)/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(':'))
      #print disk_list      

      getDate(hrStorageUsed,hrsused)
      getDate(hrStorageSize,hrsize)
      #print getDate(hrStorageAllocationUnits,hrsaunits)

      #get hrstorageAllocationUnits
      for item in hrStorageAllocationUnits:
                hrsaunits.append(item.split(':').strip().split(' '))
      #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 i in range(len(disk_used)):
                diskused_rate.append(str(round((float(disk_used)/float(total_size)*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
                partition = result
                print "==========",host,'=========='
                for i in range(len(diskused_rate)):
                        print '%-20s used: %s' % (partition,diskused_rate)
                print



页: [1]
查看完整版本: python监控系统资源