實時需要非常具體的 iostat 輸出

實時需要非常具體的 iostat 輸出

無論如何,是否可以獲得 iostat -m 的輸出並僅實時添加擴展輸出中的等待列?我知道這個問題聽起來很瘋狂,但我需要能夠即時獲取所有這些列,而無需輸出到文件或運行 iostat 兩次,因為這會產生誤導性的結果。這是centos 6.2 iostat 9.0.4。內核 2.6.36.4。總而言之,我需要這個。

Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn
sda               0.56         0.00         0.00        324        485

我需要添加等待,所以它看起來像這樣。

Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn   await
sda               0.56         0.00         0.00        324        485   10.72

我在做夢嗎?我是不是看錯方向了?我需要編譯自己的iostat嗎?

提前致謝。

答案1

我不確定如何獲得iostat您正在尋找的格式。不過,我用於此類監視的工具可以自訂,以便您可以顯示相關欄位。它也非常適合產生用於重播和繪圖的數據。

我用採集監控(在 CentOS 中可透過 yum 取得),以及磁碟檢查標誌應該給你你需要的東西:

collectl -sD --dskfilt sda

範例輸出(您可以變更列印的單位和列):

collectl -sD --dskfilt sdb
waiting for 1 second sample...

# DISK STATISTICS (/sec)
#          <---------reads---------><---------writes---------><--------averages--------> Pct
#Name       KBytes Merged  IOs Size  KBytes Merged  IOs Size  RWSize  QLen  Wait SvcTim Util
sdb              0      0    0    0     336      0   52    6       6     0     0      0    1
sdb             16      0    1   16     389      1   52    7       7     0     0      0    3
sdb              0      0    0    0    1236      9  109   11      11     0     0      0    0
sdb             16      0    1   16     676      3  140    5       4     0     1      1   14
sdb              0      0    0    0      64      1   16    4       4     0     2      1    2

答案2

為什麼不在 bash 中創建包裝器?

單行版本看起來像:

iostat 1 2 | grep -w sda | tail -1 | awk {'print $7'}

這將運行 iostat 兩次,並傳回 await 的正確值(即第七列)

您可以使用 vmstat 執行相同的操作,方法是將右側欄位傳遞給 awk 以獲得整個 CPU iowait。例如 :

vmstat 1 2 | tail -1 | awk {'print $16'}

請注意,每個 Linux 發行版上的 iostat 和 vmstat 都不同,您必須選擇正確的欄位。

答案3

這似乎應該可以用 munin、石墨等來監控。

編輯:如果您的系統有watch,您可以將 iostat 設定為自動運行給定(或無限重複)次數,並在運行之間指定指定的間隔! awk找出您真正想要的欄位!

答案4

如果作者正在尋找即時訊息,重讀最初的問題,我同意 Collectl 是正確的選擇。這就是我寫它的原因。 ;)

如果您想對數據做一些具體的事情,也許我可以幫忙,但我需要了解更多。至於你想要的即時性,你可以選擇任何你喜歡的亞秒監控間隔。

-標記

相關內容