python腳本監(jiān)控docker容器
本文實例為大家分享了python腳本監(jiān)控docker容器的方法,供大家參考,具體內(nèi)容如下
腳本功能:
1、監(jiān)控CPU使用率
2、監(jiān)控內(nèi)存使用狀況
3、監(jiān)控網(wǎng)絡流量
具體代碼:
#!/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 "你輸入的容器名稱錯誤,請重新執(zhí)行腳本,并輸入上述正確的容器名稱." 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 '你輸入的容器監(jiān)控項不在監(jiān)控范圍,請重新執(zhí)行腳本,并輸入上述正確的監(jiān)控項.' sys.exit(1) else: monitor_item = sys.argv[2] if sys.argv[3] not in merit_list: print merit_list print "你輸入的容器監(jiān)控明細詳細不在監(jiān)控范圍內(nèi),請重新執(zhí)行腳本,并輸入上述正確的明細監(jiān)控指標." else: merit = sys.argv[3] monitor_docker(monitor_item,merit)
以上就是python腳本監(jiān)控docker容器的全部代碼,希望對大家的學習有所幫助。
相關(guān)文章
Python3中對json格式數(shù)據(jù)的分析處理
這篇文章主要介紹了Python3中對json格式數(shù)據(jù)的分析處理,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01Python變量、數(shù)據(jù)類型、數(shù)據(jù)類型轉(zhuǎn)換相關(guān)函數(shù)用法實例詳解
這篇文章主要介紹了Python變量、數(shù)據(jù)類型、數(shù)據(jù)類型轉(zhuǎn)換相關(guān)函數(shù)用法,結(jié)合實例形式詳細分析了Python變量類型、基本用法、變量類型轉(zhuǎn)換相關(guān)函數(shù)與使用技巧,需要的朋友可以參考下2020-01-01keras讀取h5文件load_weights、load代碼操作
這篇文章主要介紹了keras讀取h5文件load_weights、load代碼操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06如何解決import torchvision報錯問題 DLL:找不到模塊
這篇文章主要介紹了如何解決import torchvision報錯問題 DLL:找不到模塊,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01python網(wǎng)頁請求urllib2模塊簡單封裝代碼
這篇文章主要分享一個python網(wǎng)頁請求模塊urllib2模塊的簡單封裝代碼,有需要的朋友參考下2014-02-02