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绘制人人网好友关系图示例
Apr 01 Python
Python实现二分法算法实例
Feb 02 Python
Python使用sorted排序的方法小结
Jul 28 Python
100行Python代码实现自动抢火车票(附源码)
Jan 11 Python
Python标准库笔记struct模块的使用
Feb 22 Python
python可视化实现代码
Jan 15 Python
Python函数中的可变长参数详解
Sep 12 Python
python元组的概念知识点
Nov 19 Python
如何用python处理excel表格
Jun 09 Python
Python如何将字符串转换为日期
Jul 31 Python
Python常用配置文件ini、json、yaml读写总结
Jul 09 Python
PO模式在selenium自动化测试框架的优势
Mar 20 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新手上路(八)
2006/10/09 PHP
php5数字型字符串加解密代码
2008/04/24 PHP
PHP5中使用PDO连接数据库的方法
2010/08/01 PHP
Thinkphp模板标签if和eq的区别和比较实例分析
2015/07/01 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
laravel 时间格式转时间戳的例子
2019/10/11 PHP
延时重复执行函数 lLoopRun.js
2007/05/08 Javascript
原来Jquery.load的方法可以一直load下去
2011/03/28 Javascript
JS实现匀速运动的代码实例
2013/11/29 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
jQuery选择器源码解读(一):Sizzle方法
2015/03/31 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
2015/05/03 Javascript
javascript正则表达式定义(语法)总结
2016/01/08 Javascript
80%应聘者都不及格的JS面试题
2017/03/21 Javascript
AngularJS 限定$scope的范围实例详解
2017/06/23 Javascript
jQuery三组基本动画与自定义动画操作实例总结
2020/05/09 jQuery
[00:16]热血竞技场
2019/03/06 DOTA
pyside写ui界面入门示例
2014/01/22 Python
python关键字and和or用法实例
2015/05/28 Python
python批量提取word内信息
2015/08/09 Python
Pytorch 实现自定义参数层的例子
2019/08/17 Python
python-docx文件定位读取过程(尝试替换)
2020/02/13 Python
Jupyter notebook运行Spark+Scala教程
2020/04/10 Python
python 基于opencv 实现一个鼠标绘图小程序
2020/12/11 Python
浅析移动设备HTML5页面布局
2015/12/01 HTML / CSS
环境科学专业研究生求职信
2013/10/02 职场文书
开会迟到检讨书
2014/02/03 职场文书
小学母亲节活动方案
2014/03/14 职场文书
六查六看自检自查剖析材料
2014/10/14 职场文书
施工员岗位职责
2015/02/10 职场文书
承兑汇票延期证明
2015/06/23 职场文书
编写python程序的90条建议
2021/04/14 Python
python 实现体质指数BMI计算
2021/05/26 Python
Python max函数中key的用法及原理解析
2021/06/26 Python
用Python实现屏幕截图详解
2022/01/22 Python
通过T-SQL语句创建游标与实现数据库加解密功能
2022/03/16 SQL Server