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实用技巧两则
Aug 29 Python
python实现下载指定网址所有图片的方法
Aug 08 Python
Python数据结构之翻转链表
Feb 25 Python
用python制作游戏外挂
Jan 04 Python
Python基于socket实现简单的即时通讯功能示例
Jan 16 Python
详解如何利用Cython为Python代码加速
Jan 27 Python
Python 创建空的list,以及append用法讲解
May 04 Python
python之Flask实现简单登录功能的示例代码
Dec 24 Python
对python 合并 累加两个dict的实例详解
Jan 21 Python
Python json格式化打印实现过程解析
Jul 21 Python
使用Python制作一盏 3D 花灯喜迎元宵佳节
Feb 26 Python
OpenCV-Python 实现两张图片自动拼接成全景图
Jun 11 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
精致的人儿就要挑杯子喝咖啡
2021/03/03 冲泡冲煮
PHP下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
2011/09/19 PHP
修改PHP脚本使WordPress拦截垃圾评论的方法示例
2015/12/10 PHP
PHP7 弃用功能
2021/03/09 PHP
如何实现iframe(嵌入式帧)的自适应高度
2006/07/26 Javascript
js 图片随机不定向浮动的实现代码
2013/07/02 Javascript
JSON与JS对象的区别与对比
2017/03/01 Javascript
Vue开发中整合axios的文件整理
2017/04/29 Javascript
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
vuex actions异步修改状态的实例详解
2019/11/06 Javascript
解决uWSGI的编码问题详解
2017/03/24 Python
Python3 加密(hashlib和hmac)模块的实现
2017/11/23 Python
django实现用户登陆功能详解
2017/12/11 Python
在Python中构建增广矩阵的实现方法
2019/07/01 Python
Python SQLAlchemy入门教程(基本用法)
2019/11/11 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
Python调用ffmpeg开源视频处理库,批量处理视频
2020/11/16 Python
使用css3做0.5px的细线的示例代码
2018/01/18 HTML / CSS
利用纯html5绘制出来的一款非常漂亮的时钟
2015/01/04 HTML / CSS
斯凯奇美国官网:SKECHERS美国
2016/08/20 全球购物
Reebonz中国官网:新加坡奢侈品购物网站
2017/03/17 全球购物
瑞典最大的儿童用品网上商店:pinkorblue.se
2021/03/09 全球购物
新电JAVA笔试题目
2014/08/31 面试题
英语师范专业毕业生自荐信
2013/09/21 职场文书
连带责任保证书
2014/04/29 职场文书
体育运动口号
2014/06/09 职场文书
毕业生求职信
2014/06/10 职场文书
解除租赁合同协议书
2016/03/21 职场文书
Vue如何实现组件间通信
2021/05/15 Vue.js
Java用自带的Image IO给图片添加水印
2021/06/15 Java/Android
Lakehouse数据湖并发控制陷阱分析
2022/03/31 Oracle
Go获取两个时区的时间差
2022/04/20 Golang
科学家研发出新型速效酶,可在 24 小时内降解塑料制品
2022/04/29 数码科技
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript