python脚本监控docker容器


Posted in Python onApril 27, 2016

本文实例为大家分享了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 相关文章推荐
python的正则表达式re模块的常用方法
Mar 09 Python
利用Django框架中select_related和prefetch_related函数对数据库查询优化
Apr 01 Python
在Python中使用元类的教程
Apr 28 Python
5种Python单例模式的实现方式
Jan 14 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
PyTorch中Tensor的维度变换实现
Aug 18 Python
python+jinja2实现接口数据批量生成工具
Aug 28 Python
Django项目后台不挂断运行的方法
Aug 31 Python
Python 一行代码能实现丧心病狂的功能
Jan 18 Python
Django 5种类型Session使用方法解析
Apr 29 Python
python爬虫中采集中遇到的问题整理
Nov 27 Python
Python访问Redis的详细操作
Jun 26 Python
Python多进程同步简单实现代码
Apr 27 #Python
Python对象转JSON字符串的方法
Apr 27 #Python
Python利用前序和中序遍历结果重建二叉树的方法
Apr 27 #Python
Python实现二维有序数组查找的方法
Apr 27 #Python
Python数组遍历的简单实现方法小结
Apr 27 #Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
Apr 27 #Python
Python单链表简单实现代码
Apr 27 #Python
You might like
PHP中strtotime函数使用方法详解
2011/11/27 PHP
PHP 第二节 数据类型之字符串类型
2012/04/28 PHP
php缩放图片(根据宽高的等比例缩放)实例介绍
2013/06/09 PHP
php上传图片客户端和服务器端实现方法
2015/03/30 PHP
php类中的$this,static,final,const,self这几个关键字使用方法
2015/12/14 PHP
php如何控制用户对图片的访问 PHP禁止图片盗链
2016/03/25 PHP
Thinkphp5行为使用方法汇总
2017/12/21 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
2018/05/28 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
Yii2框架控制器、路由、Url生成操作示例
2019/05/27 PHP
jQuery Ajax文件上传(php)
2009/06/16 Javascript
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
如何正确使用javascript 来进行我们的程序开发
2014/06/23 Javascript
javascript动态创建链接的方法
2015/05/13 Javascript
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
2016/04/30 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
2018/09/27 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
详解python实现交叉验证法与留出法
2019/07/11 Python
关于PyTorch 自动求导机制详解
2019/08/18 Python
Python爬虫库requests获取响应内容、响应状态码、响应头
2020/01/25 Python
pytorch梯度剪裁方式
2020/02/04 Python
将pytorch转成longtensor的简单方法
2020/02/18 Python
使用python实现多维数据降维操作
2020/02/24 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
基于ccs3的timeline时间线实现方法
2020/04/30 HTML / CSS
美国面料纺织品商城:Fabric.com
2017/06/28 全球购物
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
当文件系统受到破坏时,如何检查和修复系统?
2012/03/09 面试题
机电专业毕业生推荐信
2013/11/10 职场文书
英语教学随笔感言
2014/02/20 职场文书
小学运动会演讲稿
2014/08/25 职场文书
2014法院干警廉洁警示教育思想汇报
2014/09/13 职场文书
文员试用期转正自我鉴定
2014/09/14 职场文书
春节晚会开场白
2015/05/29 职场文书
校园安全教育心得体会
2016/01/15 职场文书