CPU 사용률을 CSV 파일에 저장

CPU 사용률을 CSV 파일에 저장

운영 체제: 데비안 8 x64

5초마다 CPU 비율을 다음 형식의 CSV 파일에 기록하고 싶습니다.

YYYY-MM-DD HH:MM:SS,CPU%

top나는 awk/grep을 사용하여 ((us+sy)/(us+sy+id)*100)을 계산하기 위해 이 프로그램을 사용하는 방법에 익숙하지 않습니다 . 당신이 도울 수 있기를 바랍니다.

검색을 통해 사람들이 top -bn1과 top -bn2를 사용하는 몇 가지 예를 보았습니다. 그러나 내 루프가 top을 호출하면 배치 모드를 전혀 사용할 필요가 없다고 생각합니다.

이것은 제가 작성하기 시작한 쉘 스크립트입니다.

#!/bin/bash

while sleep 5; do "top | grep "Cpu(s)" | awk '{}' >> cpu.csv; done

답변1

다음과 같은 방법으로 이 작업을 수행할 수 있습니다 vmstat.

#!/usr/bin/perl

open VMSTAT, "vmstat 5|";
<VMSTAT>; <VMSTAT>; # skip the header
while (<VMSTAT>) {
    @now = split;
    ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime (time);
    printf "%d-%02d-%02d %02d:%02d:%02d,%d%\n", $year+1900, $mon, $mday, $hour, $min, $sec,
        $now[12] + $now[13];
}

대부분의 코드는 날짜를 인쇄하는 데 사용됩니다.

답변2

1) 다음 두 버전을 비교해 보겠습니다.

while sleep 0.1 ; do top -d 10 | grep Cpu ; done
#versus batch mode
while sleep 0.1 ; do top -d 10 -bn1 | grep Cpu ; done

top첫 번째 예에서는 시간이 업데이트 간격(10초로 설정 -d 10)으로 정의되는 반면 두 번째 예에서는 sleepwhile 루프의 명령이 제한임을 알 수 있습니다. 또한 첫 번째 예에서는 top결코 완료되지 않습니다 . 이는 프로그램 읽기가 "프로세스 종료" 신호를 얻지 못하기 때문에 파이프된 출력을 처리하는 데 문제가 됩니다. 이는 stin특히 문제가 되는 열 기반 프로그램에 유용하지 않습니다. 예를 들어 방법을 확인하세요.awkcut

top -d 0.1 -b | grep Cpu | cut -d' ' -f1

간격을 두고 출력을 생성하는 대신 top불규칙한 배치로 출력을 생성합니다.

while sleep 0.1 ; do top -bn1 | grep Cpu | cut -d' ' -f1 ; done

원하는 간격으로 출력을 생성합니다.

간단히 말해서: while루프를 사용하고top -bn1

2) awk처리:

stin읽은 내용을 사용하면 top -bn1 | grep Cpu다음을 사용할 수 있습니다.

awk 'BEGIN { FS == " +" } ; { cmd1="date +%Y-%m-%d" ; cmd2="date +%H:%M:%S" ; while ( cmd1 | getline a ) ; while ( cmd2 | getline b) ; print a,b,($2+$4)/($2+$4+$8)*100"%" }'

BEGIN { FS == " +" }하나 이상의 ( ) 공백이 필드 구분 기호로 사용되므로 us +, sy 및 id에 해당하는 필드는 $2, $4 및 $8입니다.

해결책은 cmd1="..." ; while ( cmd1 | getline a)awk에서 시스템 호출 결과를 변수로 읽는 것입니다. @ghostdog74의 답변 보기여기

답변3

나는 제안된 솔루션이 약간 지나쳤다고 말하고 싶습니다. 이것이 작동해야합니다 ...

echo $(date +'%Y-%m-%d %H:%M:%S,' && uptime | awk '{print "CPU: " $9*100 "%"}' ) >> myfile.csv

물론, 원하는 수면 시간과 함께 while 루프에 넣으세요.

이는 "상위" 로드와 동일한 "uptime" 명령에서 CPU 로드를 가져와서 파일에 추가합니다.

BR, 콘텐츠

관련 정보