회사에서 나가는 제품 중 On-premise로 설치형식으로 나가는 제품이 존재한다.
제품은 docker를 이용해 실행하는데, 덕분에 docker를 관리해줄 필요가 생겼다.
python에서 docker라이브러리를 사용하면 손쉽게 docker의 상태를 확인할 수 있다.
$ pip install docker
import docker
# 컨테이너 리스트 조회
def get_containers():
client = docker.from_env() # 도커 주입
containers = client.containers.list()
return containers
# cpu 사용률 계산
def cacluate_cpu_percentage(stats):
total_usage = stats['cpu_stats']['cpu_usage']['total_usage']
prev_total_usage = stats['precpu_stats']['cpu_usage']['total_usage']
system_cpu_delta = stats['cpu_stats']['system_cpu_usage'] - stats['precpu_stats']['system_cpu_usage']
cpu_usage_delta = total_usage - prev_total_usage
cpu_percentage = cpu_usage_delta / system_cpu_delta
return cpu_percentage
# RAM 사용률 계산
def calculate_container_memory_percentage(stats):
memory_usage = stats['memory_stats']['usage']
memory_limit = stats['memory_stats']['limit']
memory_percentage = (memory_usage / memory_limit) * 100
return memory_percentage
def get_container_stats(self, container):
status = container.status
stats = {
'name': container.name,
'status': status,
'cpu_percentage': 0,
'memory_percentage': 0
}
# 컨테이너가 실행중일 경우에만 CPU, RAM 사용률 조회
if status == 'running':
container_stats = container.stats(stream=False)
stats['cpu_percentage'] = self.calculate_container_cpu_percentage(container_stats)
stats['memory_percentage'] = self.calculate_container_memory_percentage(container_stats)
return stats

이후 docker 정보를 조회하면 위와 같은 정보를 얻을 수 있다.