python脚本监控docker容器

yipeiwu_com5年前Python基础

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

相关文章

Python计算机视觉里的IOU计算实例

其中x1,y1;x2,y2分别表示两个矩形框的中心点 def calcIOU(x1, y1, w1, h1, x2, y2, w2, h2): if((abs(x1 - x2)...

pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解

如题:只需要给定输出特征图的大小就好,其中通道数前后不发生变化。具体如下: AdaptiveAvgPool2d CLASStorch.nn.AdaptiveAvgPool2d(outp...

Python中的descriptor描述器简明使用指南

当定义迭代器的时候,描述是实现迭代协议的对象,即实现__iter__方法的对象。同理,所谓描述器,即实现了描述符协议,即__get__, __set__, 和 __delete__方法的...

Python进阶_关于命名空间与作用域(详解)

写在前面 如非特别说明,下文均基于Python3 命名空间与作用于跟名字的绑定相关性很大,可以结合另一篇介绍Python名字、对象及其绑定的文章。 1. 命名空间 1.1 什么是命名空间...

VSCode下配置python调试运行环境的方法

VSCode下配置python调试运行环境的方法

VSCode配置python调试环境 很久之前的一个东东,翻出来看看 VSCode配置python调试环境 * 1.下载python解释器 * 2.在V...