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)
时间: 2024-07-30 23:36:36

python脚本监控docker容器的相关文章

zabbix自发现实时监控docker容器及容器中各个服务的状态线上业务展示

本文从开始到监控docker容器状态分为三部分1.查看自己的环境变量以及自己的服务路径(1)jdk环境: jdk1.8(2)zabbix版本:zabbix3.4.5(3)zabbix脚本存放路径:/data/zabbix/scripts/( 4 ) .conf文件存放路径:/data/zabbix/etc/zabbix_agentd.conf.d/ 2.配置脚本.key.模板首选,zabbix_agentd 配置 vim/data/zabbix/etc/zabbix_agentd.conf.d/

Centos 配置开机启动脚本启动 docker 容器

原文:Centos 配置开机启动脚本启动 docker 容器 Centos 配置开机启动脚本启动 docker 容器 Intro 我们的 Centos 服务器上部署了好多个 docker 容器,因故重启的时候就会导致还得手动去手动重启这些 docker 容器,为什么不写个脚本自动重启呢,于是就有了这篇文章. 批量启动 Docker 容器 之前我们有提到过关于 docker 的一些骚操作 ,可以直接使用 docker start $(docker ps -aq) # 启动所有容器 docker s

Zabbix 监控 Docker容器

我们可以通过Python提供的模块docker来取各个docker容器的监控参数.参考文档:http://docker-py.readthedocs.io/en/stable/containers.html pip install docker #安装docker模块 通过脚本获取各个监控项的值 #!coding=utf-8#python2.7.12测试通过 #监控docker状态脚本,包括内存.cpu和网速 #UserParameter=docker_monitor[*],/usr/bin/p

shell vs python脚本监控http请求

各写一个shell和python脚本来监控http请求,并在服务不可用的时候重启服务. 监控的连接为: http://192.168.1.101:5022/product http://192.168.1.101:5024/module shell脚本如下,配合crontab计划任务每一分钟执行一次检查: #!/bin/bash # This shell is used to moniter 192.168.1.101 port 5022 & 5024 date  #在crontab里用来记录l

Docker 监控实战 教你如何监控 Docker 容器内部

如今,越来越多的公司开始使用 Docker 了,现在来给大家看几组数据: 2 / 3 的公司在尝试了 Docker 后最终使用了它 也就是说 Docker 的转化率达到了 67%,而转化市场也控制在 60 天内. 越大型的公司越早开始使用 Docker 研究发现主机数量越多的公司,越早开始使用 Docker.而主机数量多,在这个研究里就默认等同于是大型公司了. Docker 优势 那为什么 Docker 越来越火呢?一谈起 Docker 总是会跟着让人联想到轻量这个词,甚至会有一种通过 Dock

Redis之使用python脚本监控队列长度

编辑python脚本redis_conn.py #!/usr/bin/env python #ending:utf-8 import redis def redis_conn(): pool = redis.ConnectionPool(host="192.168.56.11",port=6379,db=3,password=123456) conn = redis.Redis(connection_pool=pool) data = conn.llen("system-lo

使用python脚本监控指定域名解析

python脚本:                                                                                                                  21,0-1        All #!/usr/bin/python # -*- coding: utf-8 -*- #此脚本用于检测域名解析是否正常 import os namelist = {'www.51cto.com':'218.11.0.91

使用python脚本监控weblogic

1.python的脚本如下: 1 ############################################################################### 2 #created on 2013-07-09 3 #author : zhaolijun 4 #used to get weblogic server runtime infomation 5 #wls_ver:weblogic 10.3.5.0 6 #########################

监控docker容器内mysql主从同步状态

Docker exec 命令docker exec :在运行的容器中执行命令语法docker exec [OPTIONS] CONTAINER COMMAND [ARG...]OPTIONS说明:-d :分离模式: 在后台运行-i :即使没有附加也保持STDIN 打开-t :分配一个伪终端 脚本cat /server/scripts/mysql.sh #!/bin/bashdocker exec -t docke_mysql mysql -uroot -p123456 -e "show slav