45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:python脚本监控docker容器的方法介绍

python脚本监控docker容器的方法介绍

2016-07-21 21:25:53 来源:www.45fan.com 【

python脚本监控docker容器的方法介绍

本文实例为大家分享了python脚本监控docker容器的方法,供大家参考,具体内容如下

脚本功能:

1、监控CPU使用率

2、监控内存使用状况

3、监控网络流量

具体代码:

#!/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容器的全部代码,希望对大家的学习有所帮助。


本文地址:http://www.45fan.com/a/question/59365.html
Tags: 脚本 python 监控
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部