本文實(shí)例為大家分享了python腳本監(jiān)控docker容器的方法,供大家參考,具體內(nèi)容如下
腳本功能:
1、監(jiān)控CPU使用率
2、監(jiān)控內(nèi)存使用狀況
3、監(jiān)控網(wǎng)絡(luò)流量
具體代碼:
#!/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 "你輸入的容器名稱錯(cuò)誤,請(qǐng)重新執(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)控項(xiàng)不在監(jiān)控范圍,請(qǐng)重新執(zhí)行腳本,并輸入上述正確的監(jiān)控項(xiàng).' sys.exit(1) else: monitor_item = sys.argv[2] if sys.argv[3] not in merit_list: print merit_list print "你輸入的容器監(jiān)控明細(xì)詳細(xì)不在監(jiān)控范圍內(nèi),請(qǐng)重新執(zhí)行腳本,并輸入上述正確的明細(xì)監(jiān)控指標(biāo)." else: merit = sys.argv[3] monitor_docker(monitor_item,merit)
?
以上就是python腳本監(jiān)控docker容器的全部代碼,希望對(duì)大家的學(xué)習(xí)有所幫助。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
