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使用phoenixdb操作hbase的方法示例
Feb 28 Python
深入解析Python小白学习【操作列表】
Mar 23 Python
Apache,wsgi,django 程序部署配置方法详解
Jul 01 Python
python for循环remove同一个list过程解析
Aug 14 Python
python opencv调用笔记本摄像头
Aug 28 Python
使用python实现希尔、计数、基数基础排序的代码
Dec 25 Python
Python如何访问字符串中的值
Feb 09 Python
Python @property及getter setter原理详解
Mar 31 Python
Python BeautifulReport可视化报告代码实例
Apr 13 Python
使用Python三角函数公式计算三角形的夹角案例
Apr 15 Python
基于Python爬虫采集天气网实时信息
Jun 05 Python
python turtle绘图
May 04 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 dirname()与__FILE__常量的应用
2013/06/24 PHP
php实现根据字符串生成对应数组的方法
2014/09/22 PHP
php中将一个对象保存到Session中的方法
2015/03/13 PHP
JavaScript 给汉字排序实例代码
2008/06/28 Javascript
jquery 插件学习(六)
2012/08/06 Javascript
event.currentTarget与event.target的区别介绍
2012/12/31 Javascript
JS中for循序中延迟加载动态效果的具体实现
2013/08/18 Javascript
js根据日期判断星座的示例代码
2014/01/23 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
2016/08/03 Javascript
JavaScript切换搜索引擎的导航网页搜索框实例代码
2017/06/11 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
2017/09/06 jQuery
vue-cli系列之vue-cli-service整体架构浅析
2019/01/14 Javascript
layer弹出层显示在top顶层的方法
2019/09/11 Javascript
vue element-ui实现动态面包屑导航
2019/12/23 Javascript
动态实现element ui的el-table某列数据不同样式的示例
2021/01/22 Javascript
[53:36]Liquid vs VP Supermajor决赛 BO 第三场 6.10
2018/07/05 DOTA
详解Python import方法引入模块的实例
2017/08/02 Python
python基本语法练习实例
2017/09/19 Python
Python提取支付宝和微信支付二维码的示例代码
2019/02/15 Python
python实现批量处理将图片粘贴到另一张图片上并保存
2019/12/12 Python
Python魔法方法 容器部方法详解
2020/01/02 Python
python 如何实现遗传算法
2020/09/22 Python
美国鲍勃商店:Bob’s Stores
2018/07/22 全球购物
澳洲本土太阳镜品牌:Quay Australia
2019/07/29 全球购物
应届生财务会计求职信
2013/11/05 职场文书
通用求职信范文模板分享
2013/12/27 职场文书
四好少年事迹材料
2014/01/12 职场文书
求职信范文大全
2014/05/26 职场文书
教师党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
群众路线自我剖析及整改措施
2014/11/04 职场文书
2015年除四害工作总结
2015/07/23 职场文书
初中化学教学反思
2016/02/22 职场文书
四年级语文教学反思
2016/03/03 职场文书
大学毕业生自我鉴定范文
2019/06/21 职场文书
Python实战之实现康威生命游戏
2021/04/26 Python
《金肉人》米特&《航海王》阿鹤声优松岛实因胰脏癌去世 享寿81岁
2022/04/13 日漫