本文实例为大家分享了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脚本监控docker容器

本文地址: http://www.cppcns.com/jiaoben/python/148494.html

python代码进去docker容器内_python脚本监控docker容器相关推荐

  1. About 一行Python代码搞定局域网内文件共享与传输

    一行Python代码搞定局域网内文件共享与传输 前提:环境中有Python安装,并配置环境变量. 1.共享目录:Windows下,在要共享文件目录下,shift+鼠标右键,在此处打开命令行窗口(CMD ...

  2. Docker - 容器内应用和外部非容器应用互相访问方法

    Docker搭建开发环境用的非常多,通常开发机器上既有容器形式的应用,又有本机跑着或者调试的程序,它们之间互相依赖,如何让它们之间通信顺畅,有时候是一个挺困难的事情.容器应用和容器外应用互相访问分为三 ...

  3. 怎么进入Docker 容器查看容器内文件,并复制容器内文件至本机

    环景: ubuntu 16.04 docker Version: 20.10.7 问题描述: 怎么进入Docker 容器查看容器内文件,并复制容器内文件至本机 解决方案: 1.#docker ps 执 ...

  4. docker修练之容器内的脚本

    场景举例: 比如容器里执行脚本 #1脚本拷贝 docker ps //找到容器的短ID或者指定的name. docker inspect  -f '{{.Id}}' id or name 得到指定容器 ...

  5. python代码大全和用法用量_Python生成器的使用方法和示例代码

    本文是<Effect Python 编写高质量Python代码的59个有效方法>的学习笔记.主要记录生成器的使用方法和示例代码. 返回队列的函数 如果函数要产生一系列结果,那么最简单的做法 ...

  6. python代码封装供第三方使用_python发博客

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python生成csdn博客分享图一.前言我们分享博客的方式有很多种,最常见的无 ...

  7. python代码怎么换行继续写_python代码太长怎么换行

    在需要换行的代码后面加一个 / 回车 python怎么换行啊??我是一只崭新的程序猿...在学python..下了3.4,,,打开IDLE是个白其实我想喷上面,但是出于理智,他可能是没理解你的意思或者 ...

  8. python代码解释4个作用域_Python中作用域的深入讲解

    前言 作用域是指变量的生效范围,例如本地变量.全局变量描述的就是不同的生效范围. python的变量作用域的规则非常简单,可以说是所有语言中最直观.最容易理解的作用域. 在开始介绍作用域之前,先抛一个 ...

  9. python代码大全心形盒子简单_python心形代码

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 之前看到python一行代码就可以在控制台打印心形,感觉非常神奇,昨天突然想起来 ...

最新文章

  1. jQuery绑定事件的三种常见方式(bind、one、【change、click、keydown、hover】)
  2. Python链接MySQL
  3. mysql和mongodb对比互补
  4. 【Android 应用开发】Android 网络编程 API笔记 - java.net 包相关 接口 api
  5. Spring Data(二)查询
  6. helm快速部署一个nginx应用并更改service类型为NodePort、自定义Chart的发布
  7. 【HTML】前端性能优化之CDN和WPO的比较
  8. h5分享到朋友圈_微信朋友圈创意招聘广告制作方法 H5模板
  9. Postman使用入门
  10. Spring MVC对象转换说明
  11. warpaffine 旋转有一部分消失_如果月球消失了,会发生什么?我们的世界又将会变得怎么样?...
  12. java volatile关键字的作用_java volatile关键字作用及使用场景详解
  13. JVM总结(一):概念----(无节操转载,潜心学习)
  14. 配置远程jupyter notebook
  15. 设置foxmail通过ccproxy代理收发邮件
  16. c语言炉石传说测试数据库,炉石传说:王师傅微博分享算法入门题 网友:快把C语言播完吧!...
  17. 第十三课、类族的结构进化-------------------狄泰软件学院
  18. Linux操作文档——分析和排查系统故障(日志)
  19. 提高电脑性能增加fps的方法
  20. 使用Qt构建ROS应用程序

热门文章

  1. 【数据结构与算法】判断单链表是否有环的算法
  2. boost一些常用库(数据结构,迭代器,算法及字符串) 简单介绍
  3. git commit 规范指南
  4. 为什么重写equals时必须重写hashCode方法?
  5. 创意or鸡肋?亚马逊想让智能音箱“手机”化
  6. 道康宁有机硅助力动力电池发展
  7. objective-c 语法快速过(4)
  8. VMware8 8.0.1 安装Lion正式版 原版镜像 直接DMG安装 非整合版 免引导 完美解决iCloud...
  9. 梦燕服饰:企业数字化走得快不是真本事,走得稳才是硬道理
  10. 今天的一下子跳出来了的超级玛丽