-
[ Python ] 리눅스 mpstat 유틸을 이용한 CPU Core별 통계 뽑기. (평균값, 최대값, 최소값)Python/Python for Linux 2023. 5. 14. 22:39
Datebase CPU Core 증설작업 후 Core별로 CPU가 모두 활동하는지 확인해볼 필요가 생겼다.
리눅스의 mpstat는 Core 별 사용량을 모니터링할 수 있다. 결과를 파일로 export 하고, Python을 하여 DataFrame화
하려 한다.
DataFrame 하게 되면 DB, NoSQL 등에 저장하여 통계적으로 활용할 수 있겠다.
목표 : 리눅스의 mpstat 유틸과 python을 이용하여 Core 별 통계 추출
mpstat 명령어를 이용한 데이터 수집 ( 파일 리다이랙션 )
# 1초간격으로 모든 CPU Core 사용량을 추출 (리눅스 명령) # Output File : cpu_result_final.txt mpstat -P ALL 1 >> cpu_result_final.txt
%usr은 어플리케이션에서 사용되는 CPU 사용율을 볼 수 있는데, 이 지표를 활용해 보기로 한다.
수집하고 시간만큼 파일에 저장하고, Python으로 전처리 한다.
# 파일을 열어 라인별로 리스트 변환 # readlines() : 라인별로 읽어 리스트로 변환하는 메소드 with open('cpu_result_final.txt') as f: lines = f.readlines()
# 공백을 split하여 리스트 요소가 13인 것만 추출 (CPU, all이 포함된 문자열은 제외) # 사전 형태로 생성하는데, Core는 Key가 되고, %usr은 Value 값이 되어 리스트에 계속 append dct = {} for i in lines: i = i.split() if len(i) == 13: if 'CPU' in i: pass elif 'all' in i: pass else: if i[2] not in dct: dct[i[2]] = [float(i[3])] else: dct[i[2]] += [float(i[3])]
# Option : DataFrame에서 소숫점 2자리 표현. (굳이 소숫점을 5자리 이상 길게 할 필요는 없다) # 위에서 생성한 딕셔너리(dct)를 DataFrame으로 변환 import pandas as pd pd.options.display.float_format = '{:.2f}'.format dct = { 'cpu_' + x : y for x, y in dct.items() } df = pd.DataFrame(dct) df
# 평균, 최대값, 최소값을 구해서 맨 마지막열에 추가 # 숫자 index 이름을 알맞게 변경 meanvalue = df.mean().to_dict() df = df.append(meanvalue, ignore_index=True) maxvalue = df.max().to_dict() df = df.append(maxvalue, ignore_index=True) minvalue = df.min().to_dict() df = df.append(minvalue, ignore_index=True) df = df.rename(index = {4720:'평균'}) df = df.rename(index = {4721:'최대값'}) df = df.rename(index = {4722:'최소값'}) df
'Python > Python for Linux' 카테고리의 다른 글
[ Python ] 리눅스 iostat 결과값 DataFrame만들고, csv 저장 (0) 2023.05.24 [Python] Obtain capacity for Linux specific folder capacity. (리눅스 특정 확장자 용량 구하기) (0) 2019.10.25 [Python] pandas를 이용한 tomcat accesslog 분석 및 활용 (0) 2019.09.05 [Python] Linux에서 간단한 Web 모니터링 하기 (0) 2019.04.15 [Python] Linux Sendmail을 이용한 메일 보내기 (0) 2019.04.13 [ CentOS ] Python pip install (0) 2019.04.13 [Python] linux ping check(ICMP) program (0) 2019.04.09 [Python] CentOS 7 Python3 Install and Symbolc link (0) 2019.03.28