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中正则表达式的用法实例汇总
Aug 18 Python
详解Python的迭代器、生成器以及相关的itertools包
Apr 02 Python
Python使用装饰器进行django开发实例代码
Feb 06 Python
Python PyQt5 Pycharm 环境搭建及配置详解(图文教程)
Jul 16 Python
使用Python将字符串转换为格式化的日期时间字符串
Sep 01 Python
Pandas将列表(List)转换为数据框(Dataframe)
Apr 24 Python
keras使用Sequence类调用大规模数据集进行训练的实现
Jun 22 Python
CentOS 7如何实现定时执行python脚本
Jun 24 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
Oct 27 Python
Django权限控制的使用
Jan 07 Python
如何查看python关键字
Jan 17 Python
python如何读取.mtx文件
Apr 22 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/05/29 PHP
php防止SQL注入详解及防范
2013/11/12 PHP
php eval函数一句话木马代码
2015/05/21 PHP
高性能WEB开发 flush让页面分块,逐步呈现 flush让页面分块,逐步呈现
2010/06/19 Javascript
json的前台操作和后台操作实现代码
2012/01/20 Javascript
获取内联和链接中的样式(js代码)
2013/04/11 Javascript
JQuery中SetTimeOut传参问题探讨
2013/05/10 Javascript
中文输入法不触发onkeyup事件的解决办法
2014/07/09 Javascript
限制上传文件大小和格式的jQuery插件实例
2015/01/24 Javascript
nodejs创建web服务器之hello world程序
2015/08/20 NodeJs
jquery validate.js表单验证入门实例(附源码)
2015/11/10 Javascript
为何JS操作的href都是javascript:void(0);呢
2015/11/12 Javascript
javascript实现下雪效果【实例代码】
2016/05/03 Javascript
AngularJS入门教程之服务(Service)
2016/07/27 Javascript
flexslider.js实现移动端轮播
2017/02/05 Javascript
Vue指令的钩子函数使用方法
2017/03/20 Javascript
基于JS对象创建常用方式及原理分析
2017/06/28 Javascript
JavaScript 通过Ajax 动态加载CheckBox复选框
2017/08/31 Javascript
构建Vue大型应用的10个最佳实践(小结)
2019/11/07 Javascript
微信小程序复选框实现多选一功能过程解析
2020/02/14 Javascript
纯JS开发baguetteBox.js响应式画廊插件
2020/06/28 Javascript
element中table高度自适应的实现
2020/10/21 Javascript
Python入门之modf()方法的使用
2015/05/15 Python
python web基础之加载静态文件实例
2018/03/20 Python
python实现年会抽奖程序
2019/01/22 Python
win10系统下python3安装及pip换源和使用教程
2020/01/06 Python
使用Django的JsonResponse返回数据的实现
2021/01/15 Python
使用CSS3实现多列布局与多背景的技巧
2016/02/29 HTML / CSS
使用layui框架实现点击左侧导航切换右侧内容且右侧选项卡跟随变化的效果
2020/11/10 HTML / CSS
加拿大户外探险购物网站:SAIL
2020/06/27 全球购物
日语专业毕业生求职信
2013/12/04 职场文书
教师自查自纠工作情况报告
2014/10/29 职场文书
员工辞职信范文大全
2015/05/12 职场文书
员工安全责任协议书
2016/03/22 职场文书
CSS中实现动画效果-附案例
2022/02/28 HTML / CSS
2022新作动画《福星小子》释出宣传影片 加入内田真礼&宫野真守配音演出
2022/04/08 日漫