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 相关文章推荐
在Ubuntu系统下安装使用Python的GUI工具wxPython
Feb 18 Python
Python编程实现双击更新所有已安装python模块的方法
Jun 05 Python
Python绑定方法与非绑定方法详解
Aug 18 Python
python 定时修改数据库的示例代码
Apr 08 Python
详解Python字典的操作
Mar 04 Python
Python秒算24点实现及原理详解
Jul 29 Python
matplotlib绘制多个子图(subplot)的方法
Dec 03 Python
ipython jupyter notebook中显示图像和数学公式实例
Apr 15 Python
python3爬虫中多线程的优势总结
Nov 24 Python
python爬虫爬取某网站视频的示例代码
Feb 20 Python
Jupyter notebook 输出部分显示不全的解决方案
Apr 24 Python
Python入门学习之类的相关知识总结
May 25 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静态新闻列表自动生成代码
2007/06/14 PHP
Uchome1.2 1.5 代码学习 common.php
2009/04/24 PHP
用PHP实现的四则运算表达式计算实现代码
2011/08/02 PHP
PHP错误提示的关闭方法详解
2013/06/23 PHP
使用PHP获取当前url路径的函数以及服务器变量
2013/06/29 PHP
php使用google地图应用实例
2014/12/31 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
PHP中时间加减函数strtotime用法分析
2017/04/26 PHP
php和vue配合使用技巧和方法
2019/05/09 PHP
Js event事件在IE、FF兼容性问题
2011/01/01 Javascript
JQuery.ajax传递中文参数的解决方法 推荐
2011/03/28 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
JavaSciprt中处理字符串之sup()方法的使用教程
2015/06/08 Javascript
js对象浅拷贝和深拷贝详解
2016/09/05 Javascript
微信小程序登录态控制深入分析
2017/04/12 Javascript
three.js中文文档学习之创建场景
2017/11/20 Javascript
JavaScript判断变量名是否存在数组中的实例
2017/12/28 Javascript
JS实现数组简单去重及数组根据对象中的元素去重操作示例
2018/01/05 Javascript
JavaScript实现的DOM绘制柱状图效果示例
2018/08/08 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
2018/08/08 jQuery
在 Vue.js中优雅地使用全局事件的方法
2019/02/01 Javascript
layui实现三级联动效果
2019/07/26 Javascript
Element Badge标记的使用方法
2020/07/27 Javascript
解决vue单页面应用打包后相对路径、绝对路径相关问题
2020/08/14 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
vue的$http的get请求要加上params操作
2020/11/12 Javascript
python字符串对其居中显示的方法
2015/07/11 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
2018/10/11 Python
使用pytorch实现论文中的unet网络
2020/06/24 Python
python解释器安装教程的方法步骤
2020/07/02 Python
Vs Code中8个好用的python 扩展插件
2020/10/12 Python
HTML5实现简单图片上传所遇到的问题及解决办法
2016/01/20 HTML / CSS
爱国主义教育活动总结
2014/05/07 职场文书
关于工作经历的证明书
2014/10/11 职场文书
2014小学数学教研组工作总结
2014/12/06 职场文书
七一慰问简报
2015/07/20 职场文书