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基于回溯法子集树模板解决找零问题示例
Sep 11 Python
Python中xrange与yield的用法实例分析
Dec 26 Python
python奇偶行分开存储实现代码
Mar 19 Python
python调用并链接MATLAB脚本详解
Jul 05 Python
Python笔记之观察者模式
Nov 20 Python
基于Python中isfile函数和isdir函数使用详解
Nov 29 Python
如何使用Python抓取网页tag操作
Feb 14 Python
详解python常用命令行选项与环境变量
Feb 20 Python
解决Django no such table: django_session的问题
Apr 07 Python
pyinstaller打包单文件时--uac-admin选项不起作用怎么办
Apr 15 Python
python如何利用Mitmproxy抓包
Oct 10 Python
pytorch 两个GPU同时训练的解决方案
Jun 01 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读取目录下所有文件的代码
2008/01/07 PHP
Php获取金书网的书名的实现代码
2010/06/11 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
理清PHP在Linxu下执行时的文件权限方法
2017/06/07 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
Laravel框架文件上传功能实现方法示例
2019/04/16 PHP
PHP写API输出的时用echo的原因详解
2019/04/28 PHP
PHP观察者模式实例分析【对比JS观察者模式】
2019/05/22 PHP
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
2014/01/10 Javascript
javascript实现2048游戏示例
2014/05/04 Javascript
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
javascript实现字符串反转的方法
2015/02/05 Javascript
JavaScript编写连连看小游戏
2015/07/07 Javascript
浅析JavaScript作用域链、执行上下文与闭包
2016/02/01 Javascript
js密码强度实时检测代码
2016/03/02 Javascript
EasyUI 中combotree 默认不能选择父节点的实现方法
2016/11/07 Javascript
纯js实现倒计时功能
2017/01/06 Javascript
监听angularJs列表数据是否渲染完毕的方法示例
2018/11/07 Javascript
BootStrap modal实现拖拽功能
2018/12/01 Javascript
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
2019/04/30 Javascript
Bootstrap实现省市区三级联动(亲测可用)
2019/07/26 Javascript
JS获取表格视图所选行号的ids过程解析
2020/02/21 Javascript
Python中的__new__与__init__魔术方法理解笔记
2014/11/08 Python
windows10下python3.5 pip3安装图文教程
2018/04/02 Python
python获取Pandas列名的几种方法
2019/08/07 Python
python中struct模块之字节型数据的处理方法
2019/08/27 Python
一文解决django 2.2与mysql兼容性问题
2020/07/15 Python
安装并免费使用Pycharm专业版(学生/教师)
2020/09/24 Python
Ubuntu16安装Python3.9的实现步骤
2020/12/15 Python
Desigual德国官网:在线购买原创服装
2018/03/27 全球购物
英国手机零售商:Metrofone
2019/03/18 全球购物
印度在线购物网站:Paytmmall
2019/07/24 全球购物
党的群众路线教育实践活动心得体会
2014/03/03 职场文书
职业生涯规划书结束语
2014/04/15 职场文书
Redis分布式锁Redlock的实现
2021/08/07 Redis
详解flex:1什么意思
2022/07/23 HTML / CSS