本文實(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 sysimport tabimport reimport osimport timefrom docker import Clientimport commandskeys_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 = Nonedef 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 returnvalif __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)控項(xiàng)不在監(jiān)控范圍,請重新執(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),請重新執(zhí)行腳本,并輸入上述正確的明細(xì)監(jiān)控指標(biāo)." else: merit = sys.argv[3] monitor_docker(monitor_item,merit)
以上就是python腳本監(jiān)控docker容器的全部代碼,希望對大家的學(xué)習(xí)有所幫助。
新聞熱點(diǎn)
疑難解答
圖片精選