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在不同层级目录import模块的方法
Jan 31 Python
python读取二进制mnist实例详解
May 31 Python
python ansible服务及剧本编写
Dec 29 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
Apr 21 Python
python实现读Excel写入.txt的方法
Apr 29 Python
使用Python微信库itchat获得好友和群组已撤回的消息
Jun 24 Python
Sanic框架流式传输操作示例
Jul 18 Python
python集合是否可变总结
Jun 20 Python
python_mask_array的用法
Feb 18 Python
Django后端分离 使用element-ui文件上传方式
Jul 12 Python
Python基础知识学习之类的继承
May 31 Python
Python Pygame实战在打砖块游戏的实现
Mar 17 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 mysql数据库操作分页类
2008/06/04 PHP
sphinx增量索引的一个问题
2011/06/14 PHP
PHP错误和异长常处理总结
2014/03/06 PHP
php 利用socket发送HTTP请求(GET,POST)
2015/08/24 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
2016/02/15 PHP
24条货真价实的PHP代码优化技巧
2016/07/28 PHP
老生常谈PHP位运算的用途
2017/03/12 PHP
JS判定是否原生方法
2013/07/22 Javascript
5秒后跳转到另一个页面的js代码
2013/10/12 Javascript
浅谈js中的闭包
2015/03/16 Javascript
JS函数定义方式的区别介绍
2016/03/22 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
2016/06/06 Javascript
jquery模拟多级复选框效果的简单实例
2016/06/08 Javascript
jQuery中的insertBefore(),insertAfter(),after(),before()区别介绍
2016/09/01 Javascript
解决AjaxFileupload 上传时会出现连接重置的问题
2017/07/07 Javascript
vue单页应用加百度统计代码(亲测有效)
2018/01/31 Javascript
11个教程中不常被提及的JavaScript小技巧(推荐)
2019/04/17 Javascript
vue组件化中slot的基本使用方法
2019/05/01 Javascript
解决Echarts 显示隐藏后宽度高度变小的问题
2020/07/19 Javascript
[47:10]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第二场 12.16
2020/12/18 DOTA
python中的对象拷贝示例 python引用传递
2014/01/23 Python
python定时器使用示例分享
2014/02/16 Python
Python2.x中文乱码问题解决方法
2015/06/02 Python
python3中int(整型)的使用教程
2017/03/23 Python
Python(Django)项目与Apache的管理交互的方法
2018/05/16 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
2018/12/12 Python
Python字符串处理的8招秘籍(小结)
2019/08/13 Python
Pandas DataFrame中的tuple元素遍历的实现
2019/10/23 Python
python实现文法左递归的消除方法
2020/05/22 Python
python 装饰器的基本使用
2021/01/13 Python
外贸英语毕业生自荐信
2013/11/14 职场文书
大学三年的自我评价
2013/12/25 职场文书
幼儿园小班教学反思
2014/02/02 职场文书
小学生开学感言
2014/02/28 职场文书
2015年评职称个人工作总结
2015/10/15 职场文书
2019请假条的基本格式及范文!
2019/07/05 职场文书