各位用户为了找寻关于python脚本监控docker容器的资料费劲了很多周折。这里教程网为您整理了关于python脚本监控docker容器的相关资料,仅供查阅,以下为您介绍关于python脚本监控docker容器的详细内容
本文实例为大家分享了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容器的全部代码,希望对大家的学习有所帮助。