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 相关文章推荐
Odoo中如何生成唯一不重复的序列号详解
Feb 10 Python
对python list 遍历删除的正确方法详解
Jun 29 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
Jul 07 Python
在python中实现对list求和及求积
Nov 14 Python
利用Python如何实现一个小说网站雏形
Nov 23 Python
Python Pillow Image Invert
Jan 22 Python
Python提取支付宝和微信支付二维码的示例代码
Feb 15 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
Aug 18 Python
tensorflow多维张量计算实例
Feb 11 Python
python学习之panda数据分析核心支持库
May 07 Python
Python中的套接字编程是什么?
Jun 21 Python
Python&Matlab实现灰狼优化算法的示例代码
Mar 21 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中eval函数的危害与正确禁用方法
2014/06/30 PHP
php文件压缩之PHPZip类用法实例
2015/06/18 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
2019/04/09 PHP
js调用后台servlet方法实例
2013/06/09 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
2015/05/06 Javascript
javascript巧用eval函数组装表单输入项为json对象的方法
2015/11/25 Javascript
Bootstrap项目实战之子栏目资讯内容
2016/04/25 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
JavaScript中判断数据类型的方法总结
2016/05/24 Javascript
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
jquery获取复选框checkbox的值实现方法
2016/05/30 Javascript
AngularJS入门教程引导程序
2016/08/18 Javascript
对Vue.js之事件的绑定(v-on: 或者 @ )详解
2018/09/15 Javascript
vue自定义指令之面板拖拽的实现
2019/04/14 Javascript
利用Vue实现一个markdown编辑器实例代码
2019/05/19 Javascript
vue中使用element组件时事件想要传递其他参数的问题
2019/09/18 Javascript
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
[01:02:25]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS VG
2014/05/25 DOTA
Python中将变量按行写入txt文本中的方法
2018/04/03 Python
python 识别图片中的文字信息方法
2018/05/10 Python
TensorFlow实现Logistic回归
2018/09/07 Python
python使用PIL实现多张图片垂直合并
2019/01/15 Python
python Matplotlib底图中鼠标滑过显示隐藏内容的实例代码
2019/07/31 Python
Keras预训练的ImageNet模型实现分类操作
2020/07/07 Python
REISS美国官网:伦敦最受欢迎的时尚品牌
2019/08/16 全球购物
德国的各种媒体在线商店:Thalia.de(书籍、电子书、玩具等)
2020/10/08 全球购物
【魔兽争霸3重制版】原版画面与淬火MOD画面对比
2021/03/26 魔兽争霸
应届生服务员求职信
2013/10/31 职场文书
领导干部考察材料
2014/02/08 职场文书
情人节活动策划方案
2014/02/27 职场文书
乡镇干部个人对照检查材料(群众路线)
2014/09/26 职场文书
群众路线教育实践活动整改方案(个人版)
2014/10/25 职场文书
2015年新学期寄语
2015/02/26 职场文书
单位工作证明范本
2015/06/15 职场文书
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL
Win11 Beta 22621.601 和 22622.601今日发布 KB5017384修复内容汇总
2022/09/23 数码科技