首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python脚本监控docker容器

python脚本监控docker容器

作者头像
py3study
发布2020-01-10 11:18:02
1.8K0
发布2020-01-10 11:18:02
举报
文章被收录于专栏:python3python3

脚本功能:

  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)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档