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解决鸡兔同笼问题的方法
Dec 20 Python
python Django模板的使用方法
Jan 14 Python
Python解决抛小球问题 求小球下落经历的距离之和示例
Feb 01 Python
详解python字节码
Feb 07 Python
tensorflow 1.0用CNN进行图像分类
Apr 15 Python
python实现一行输入多个值和一行输出多个值的例子
Jul 16 Python
在python里创建一个任务(Task)实例
Apr 25 Python
Pycharm中配置远程Docker运行环境的教程图解
Jun 11 Python
keras 简单 lstm实例(基于one-hot编码)
Jul 02 Python
Keras模型转成tensorflow的.pb操作
Jul 06 Python
Python通用唯一标识符uuid模块使用案例
Sep 10 Python
python模拟点击玩游戏的实例讲解
Nov 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统计目录下的文件总数及代码行数(去除注释及空行)
2011/01/17 PHP
探讨各种PHP字符串函数的总结分析
2013/06/05 PHP
Yii2 批量插入、更新数据实例
2017/03/15 PHP
php readfile下载大文件失败的解决方法
2017/05/22 PHP
php实现的二分查找算法示例
2017/06/20 PHP
tp5框架的增删改查操作示例
2019/10/31 PHP
javascript阻止浏览器后退事件防止误操作清空表单
2013/11/22 Javascript
js判断横竖屏及禁止浏览器滑动条示例
2014/04/29 Javascript
JS实现的网页倒计时数字时钟效果
2015/03/02 Javascript
jQuery实现自定义右键菜单的树状菜单效果
2015/09/02 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
基于Vue的SPA动态修改页面title的方法(推荐)
2018/01/02 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
2018/01/10 Javascript
vue中v-for通过动态绑定class实现触发效果
2018/12/06 Javascript
如何使用electron-builder及electron-updater给项目配置自动更新
2018/12/24 Javascript
微信小程序实现星级评价效果
2018/12/28 Javascript
微信小程序学习笔记之表单提交与PHP后台数据交互处理图文详解
2019/03/28 Javascript
vue项目打包后怎样优雅的解决跨域
2019/05/26 Javascript
百度小程序之间的页面通信过程详解
2019/07/18 Javascript
JavaScript arguments.callee作用及替换方案详解
2020/09/02 Javascript
vue $router和$route的区别详解
2020/12/02 Vue.js
Python Web框架Flask下网站开发入门实例
2015/02/08 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
如何在Python中实现goto语句的方法
2019/05/18 Python
使用Python来做一个屏幕录制工具的操作代码
2020/01/18 Python
Python3 selenium 实现QQ群接龙自动化功能
2020/04/17 Python
jupyter notebook中新建cell的方法与快捷键操作
2020/04/22 Python
Pycharm导入anaconda环境的教程图解
2020/07/31 Python
canvas基础之图形验证码的示例
2018/01/02 HTML / CSS
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
英国男女奢华内衣和泳装购物网站:Figleaves
2017/01/28 全球购物
美津浓美国官网:Mizuno美国
2018/08/07 全球购物
员工安全生产承诺书
2014/05/22 职场文书
优秀管理者事迹材料
2014/05/22 职场文书
大学生党员批评与自我批评范文
2014/10/14 职场文书
西安大雁塔导游词
2015/02/10 职场文书