本文实例为大家分享了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容器的全部代码,希望对大家的学习有所帮助。