本文实例为大家分享了python脚本监控docker容器的方法,供大家参考,具体内容如下
脚本功能:
1、监控CPU使用率
2、监控内存使用状况
3、监控网络流量
具体代码:
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/env python
# --*-- coding:UTF-8 --*--
import sys
import tab
import re
import os
import time
from docker import Client
import commands
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 )
print returnval
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
print returnval
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 = '''docker exec -it api1 ifconfig eth1 | grep "bytes" | awk '{print $2}' | awk -F ':' '{print $2}' '''
result_one = commands.getoutput(command)
time.sleep( 1 )
command = '''docker exec -it api1 ifconfig 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 = '''docker exec -it api1 ifconfig eth1 | grep "bytes" | awk '{print $6}' | awk -F ':' '{print $2}' '''
result_one = commands.getoutput(command)
time.sleep( 1 )
command = '''docker exec -it api1 ifconfig 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[ 1 ] not in container_counts_list:
print container_counts_list
print "你输入的容器名称错误,请重新执行脚本,并输入上述正确的容器名称."
sys.exit( 1 )
else :
container_name = sys.argv[ 1 ]
if sys.argv[ 2 ] not in keys_container_stats_list:
print keys_container_stats_list
print '你输入的容器监控项不在监控范围,请重新执行脚本,并输入上述正确的监控项.'
sys.exit( 1 )
else :
monitor_item = sys.argv[ 2 ]
if sys.argv[ 3 ] not in merit_list:
print merit_list
print "你输入的容器监控明细详细不在监控范围内,请重新执行脚本,并输入上述正确的明细监控指标."
else :
merit = sys.argv[ 3 ]
monitor_docker(monitor_item,merit)
|
以上就是python脚本监控docker容器的全部代码,希望对大家的学习有所帮助。