本文實例為大家分享了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容器的全部代碼,希望對大家的學習有所幫助。