64532 发表于 2016-4-27 09:22:49

python脚本监控docker容器

脚本功能:

[*]监控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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/usr/bin/envpython
# --*-- coding:UTF-8 --*--
importsys
importtab
importre
importos
importtime
from dockerimport Client
importcommands
keys_container_stats_list = ['blkio_stats', 'precpu_stats', 'network', 'read', 'memory_stats', 'cpu_stats']
merit_list=['usage','limit','mem_use_percent','total_cpu_usage','system_cpu_usage','cpu_usage_percent','rx_bytes','tx_bytes']
returnval = None
def start(container_name):
    global container_stats
    conn=Client(base_url='unix://run/docker.sock',version='1.19')
    generator=conn.stats(container_name)
    try:
      container_stats=eval(generator.next())
    except NameError,error_msg:
      pass
#      print error_msg
      container_stats=eval(generator.next())
    finally:
      conn.close()
def monitor_docker(monitor_item,merit):
    if merit == 'mem_use_percent':
      start(container_name)
      mem_usage = container_stats['memory_stats']['usage']
      mem_limit = container_stats['memory_stats']['limit']
      returnval = round(float(mem_usage) / float(mem_limit),2)
      printreturnval
    elif merit == 'system_cpu_usage':
      start(container_name)
      first_result = container_stats['cpu_stats']['system_cpu_usage']
      start(container_name)
      second_result = container_stats['cpu_stats']['system_cpu_usage']
      returnval = second_result - first_result
      printreturnval
    elif merit == 'total_cpu_usage':
      start(container_name)
      first_result = container_stats['cpu_stats']['cpu_usage']['total_usage']
      start(container_name)
      second_result = container_stats['cpu_stats']['cpu_usage']['total_usage']
      returnval = second_result - first_result
      print returnval
    elif merit == 'cpu_usage_percent':
      start(container_name)
      system_use=container_stats['cpu_stats']['system_cpu_usage']
      total_use=container_stats['cpu_stats']['cpu_usage']['total_usage']
      cpu_count=len(container_stats['cpu_stats']['cpu_usage']['percpu_usage'])
      returnval = round((float(total_use)/float(system_use))*cpu_count*100.0,2)
      print returnval
    elif merit == 'rx_bytes':
      command='''dockerexec -itapi1ifconfig eth1 | grep "bytes"| awk '{print $2}' | awk -F ':' '{print $2}' '''
      result_one = commands.getoutput(command)
      time.sleep(1)
      command='''dockerexec -itapi1ifconfig eth1 | grep "bytes"| awk '{print $2}' | awk -F ':' '{print $2}' '''
      result_second = commands.getoutput(command)
      returnval = round((int(result_second)-int(result_one))/1024,2)
      print returnval
    elif merit == 'tx_bytes':
      command='''dockerexec -itapi1ifconfig eth1 | grep "bytes"| awk '{print $6}' | awk -F ':' '{print $2}' '''
      result_one = commands.getoutput(command)
      time.sleep(1)
      command='''dockerexec -itapi1ifconfig eth1 | grep "bytes"| awk '{print $6}' | awk -F ':' '{print $2}' '''
      result_second = commands.getoutput(command)
      returnval = round((int(result_second)-int(result_one))/1024,2)
      print returnval
if __name__ == '__main__':
    command='''docker ps | awk '{print $NF}'| grep -v "NAMES"'''
    str=commands.getoutput(command)
    container_counts_list=str.split('\n')
    if sys.argv not in container_counts_list:
      print container_counts_list
      print "你输入的容器名称错误,请重新执行脚本,并输入上述正确的容器名称."
      sys.exit(1)
    else:
      container_name = sys.argv
      if sys.argv not in keys_container_stats_list:
            print keys_container_stats_list
            print '你输入的容器监控项不在监控范围,请重新执行脚本,并输入上述正确的监控项.'
            sys.exit(1)
      else:
            monitor_item = sys.argv
            if sys.argv not in merit_list:
                print merit_list
                print "你输入的容器监控明细详细不在监控范围内,请重新执行脚本,并输入上述正确的明细监控指标."
            else:
                merit = sys.argv
                monitor_docker(monitor_item,merit)







页: [1]
查看完整版本: python脚本监控docker容器