2012-08-25 3 views
1

Linux에서 bash, awk, sed를 사용하여 모든 디스크 I/O 속도를 모니터링해야합니다. 문제는 한 시간 간격으로 한 행을 반환해야한다는 것입니다. 따라서이 한 행에는 tps, kB_read/s, kB_wrtn/s, kB_read, kB_wrtn이 포함되어야하지만 모든 디스크별로 요약되어야합니다.리눅스에서 디스크 I/O 속도를 모니터링하는 스크립트

-d -k -p `parted -l | grep Disk | cut -f1 -d: | cut -f2 -d' '` > /tmp/jPtafDiskIO.txt  
echo `date +"%H:%M:%S"`,`awk 'FNR>2' /tmp/jPtafDiskIO.txt | awk 'BEGIN {FS=OFS=" "}NR == 1 { n1 = $2; n2 = $3; n3 = $4; n4 = $5; n5 = $6; next } { n1 += $2; n2 += $3; n3 += $4; n4 += $5; n5 += $6 } END { print n1","n2","n3","n4","n5 }'` >> diskIO.log  

내가 거의 다 이니 이제

-d -k -p `parted -l | grep Disk | cut -f1 -d: | cut -f2 -d' '` 

멋진 트릭 열을 요약 :

-d -k -p $interval $loops 

내가 사용하는 모든 디스크를 제한하려면 여기 자연 선택은 물론이다 , 그러나 이것은 (루프에서 실행) 처음부터 매번 호출되기 때문에 간격에서 간격으로 통계를 얻지 못하지만 항상 평균을 취합니다 (각 호출은 꽤 똑같은 것을 가져옵니다). 출력).

나는 복잡한 것처럼 들리 겠지만 어쩌면 누군가가 아이디어를 가지고있을 것입니까? 아마 완전히 다른 접근법일까요? Thx.

편집 :

샘플 입력 (/tmp/jPtafDiskIO.txt) :

> Linux 2.6.18-194.el5 (hostname) 08/25/2012 
> 
> Device:   tps kB_read/s kB_wrtn/s kB_read kB_wrtn 
> sda    0.00   0.00   0.00  35655   59 
> sda2    0.00   0.00   0.00   67  272 
> sda1    0.00   0.00   0.00  521  274 
> sdb    52.53   0.56  569.40 20894989 
> 21065384388 sdc    1.90  64.64  10.93 
> 2391333384 404432217 sdd    0.00   0.00   0.04 
> 17880 1343028 

출력 diskIO.log :

16:53:12,54.43,65.2,580.37,2412282496,21471160238 
+0

견본 출력뿐만 아니라 샘플 출력도 제공해 주시겠습니까 – Anders

답변

2

iotophttp://guichaz.free.fr/iotop/를 사용할 수 있습니까?

+0

텍스트 파일에 로그 출력이 필요합니다. IOtop은 연속 출력 AFAIK 만 표시합니다. –

+2

'iotop'을 배치 모드로 실행하여 출력을 저장할 수 있습니다. 예를 들면 다음과 같습니다 :'iotop -bto -iter = 1' –

2

dstat 당신이 찾고있는 것일 수도 있습니다. 그것은보고 할 수있는 많은 것들을 가지고 있으며, 몇몇 일반적인 것들은 기본적으로 표시됩니다.