Python scripts monitor docker containers and pythondocker containers
This article provides an example of how to monitor docker containers using python scripts for your reference. The details are as follows:
Script Function:
1. Monitor CPU usage
2. Monitor memory usage
3. Monitor network traffic
Code:
#! /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 () handle T 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 "the container name you entered is incorrect. Please run the script again and enter the correct container name. "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 'The Container Monitoring item you entered is not in the monitoring range. Please re-execute the script and enter the correct monitoring item. 'sys. exit (1) else: monitor_item = sys. argv [2] if sys. argv [3] not in merit_list: print merit_list print "the details of the container monitoring you entered are not within the monitoring range. Please re-execute the script and enter the correct detailed monitoring metrics. "else: merit = sys. argv [3] monitor_docker (monitor_item, merit)
The above is all the code of the python script to monitor the docker container. I hope it will be helpful for you to learn.