系統管理員需要一套可靠的工具來監控系統的健康狀態,才能及時發現並解決效能瓶頸。sysstat 工具套件是 Linux 系統中常用的效能監控工具,其中的 sar 和 sadf 指令更是不可或缺。sar 指令能收集系統的 CPU、記憶體、I/O 等活動資訊,而 sadf 指令則能將這些資訊轉換成易於分析的格式,例如 CSV 或 XML。除了 sar 和 sadf,本文也會介紹 iostat、ps、htop 和 glances 等常用監控指令,幫助系統管理員更有效率地監控系統效能。

系統健康監控與維護

在維護系統健康時,監控系統狀態是一項非常重要的工作。雖然市面上有許多商業監控工具可供選擇,但Linux系統中有一款免費且功能強大的工具——sysstat。sysstat工具能夠幫助管理員監控系統的各項效能指標,並且易於安裝和組態。

使用sysstat監控系統健康

在Red Hat為基礎的系統中,sysstat能夠自動組態並開始收集資料。然而,在Debian為基礎的系統中,則需要手動啟用sysstat來收集資料。

啟用sysstat

要啟用sysstat的System Activity Report(sar)工具,首先需要編輯/etc/default/sysstat檔案,將ENABLED="false"改為ENABLED="true"

sudo nano /etc/default/sysstat

ENABLED="false"更改為ENABLED="true"後,儲存並離開。

重啟sysstat服務

更改組態後,需要重啟sysstat服務以使更改生效:

sudo service sysstat restart

等待資料收集

重啟服務後,給系統一些時間來開始生成活動報告。稍後,我們將學習如何生成這些報告。

sysstat套件中的工具

sysstat套件包含多個用於檢查效能和格式化系統統計資訊的二進位制檔案。以下是這些工具及其功能的列表:

工具名稱功能描述
cifsiostat顯示CIFS檔案系統的讀寫操作統計資訊
iostat監控系統輸入/輸出裝置的負載情況
mpstat顯示每個可用處理器的活動情況
pidstat監控目前由Linux核心管理的個別任務
sadf以多種格式(CSV、XML等)顯示sar命令建立的資料檔案內容
sar將所選的累積活動計數器的內容輸出到標準輸出
tapestat監控連線到系統的磁帶機的活動情況

使用「stat」命令

許多「stat」命令的工作方式相似,例如vmstat命令,它需要提供一個時間間隔(以秒為單位)和一個特定的快照數量(count)。以下是一個vmstat命令的例子:

vmstat 5 5

這個命令會每5秒執行一次,總共執行5次。第一次執行的結果顯示自上次重啟以來的平均值。

iostat命令範例

同樣地,iostat命令也遵循類別似的使用方式:

iostat 5 2

這個命令會每5秒執行一次,總共執行2次,顯示系統的I/O統計資訊。

蒐集系統活動報告

sar命令是一個全面且多功能的工具,用於收集、報告和儲存系統活動資訊。您可以像使用其他「stat」命令一樣,透過提供間隔和計數來使用sar命令,或者使用特定選項(如-b)來顯示I/O統計資訊。

使用sar命令

例如,您可以使用以下命令來顯示I/O統計資訊:

sar -b

這個命令會顯示系統的I/O統計資訊。

結合間隔和計數使用sar

您也可以結合間隔和計數來使用sar命令,以特定的間隔顯示所選的效能計數器:

sar -b 5 2

這個命令會每5秒顯示一次I/O統計資訊,總共執行2次。

監控系統健康狀態與使用 sar 及 sadf 指令

系統健康監控的重要性

系統健康監控是維護系統效能、容量和安全性的重要任務。系統管理員需要持續追蹤系統的健康狀態,以確保符合客戶的服務水準協定(SLA)。本篇文章將介紹如何使用 sarsadf 指令來監控系統健康狀態。

使用 sar 指令監控系統活動

sar 指令是 System Activity Reporter 的縮寫,用於收集和報告系統活動資訊。預設情況下,sar 指令顯示 CPU 統計資料。若要顯示其他統計資料,需要使用特定的選項。

範例:使用 sar 指令顯示 I/O 統計資料

$ sar -b
Linux 4.18.0-348.7.1.el8_5.x86_64 (server1) 02/13/2022 _x86_64_ (1 CPU)
12:00:15 AM tps rtps wtps bread/s bwrtn/s
12:10:15 AM 0.22 0.03 0.19 2.32 4.30
12:20:15 AM 0.10 0.00 0.10 0.00 0.79
...

#### 內容解密:

  • sar -b 用於顯示 I/O 統計資料,包括每秒傳輸次數(tps)、每秒讀取次數(rtps)、每秒寫入次數(wtps)等。
  • 輸出結果顯示從午夜開始的 I/O 統計資料。

範例:使用 sar 指令顯示即時 I/O 統計資料

$ sar -b 5 5
Linux 4.18.0-348.7.1.el8_5.x86_64 (server1) 02/13/2022 _x86_64_ (1 CPU)
12:57:13 PM tps rtps wtps bread/s bwrtn/s
12:57:18 PM 0.00 0.00 0.00 0.00 0.00
12:57:23 PM 0.00 0.00 0.00 0.00 0.00
...

#### 內容解密:

  • sar -b 5 5 表示每隔 5 秒收集一次資料,共收集 5 次。
  • 輸出結果顯示即時的 I/O 統計資料。

使用 sadf 指令格式化系統活動報告

sadf 指令用於將 sar 收集的資料以不同的格式輸出,例如 CSV 或 XML。

範例:使用 sadf 指令輸出 CSV 格式的 CPU 統計資料

$ sadf -d
# hostname;interval;timestamp;CPU;%user;%nice;%system;%iowait;%steal;%idle
server1;600;2022-02-13 06:10:15 UTC;-1;0.01;0.00;0.24;0.01;0.00;99.74
server1;600;2022-02-13 06:20:15 UTC;-1;0.00;0.00;0.21;0.01;0.00;99.78
...

#### 內容解密:

  • sadf -d 用於輸出 CSV 格式的 CPU 統計資料。
  • 輸出結果包含主機名稱、間隔時間、時間戳記等資訊。

範例:使用 sadf 指令輸出特定日期的 I/O 統計資料

$ sadf -d /var/log/sa/sa10 -- -d
# hostname;interval;timestamp;DEV;tps;rkB/s;wkB/s;areq-sz;aqu-sz;await;...
server1;600;2022-02-10 06:10:15 UTC;dev8-0;0.35;8.46;2.17;30.81;0.00;0.62;...
server1;600;2022-02-10 06:10:15 UTC;dev11-0;0.00;0.00;0.00;0.00;0.00;0.00;...
...

#### 內容解密:

  • sadf -d /var/log/sa/sa10 -- -d 用於輸出特定日期(本例為 2 月 10 日)的 I/O 統計資料。
  • -- 用於分隔 sadfsar 的選項。

系統健康監控流程圖

此圖示說明瞭使用 sarsadf 指令進行系統健康監控的流程。從開始監控到分析報告,每一步驟都清晰地標示出來。

系統監控

系統監控並非可選專案,而是系統管理員必備的技能。身為系統管理員,必須時刻關注系統的效能、健康狀態和安全性。由於無法同時手動監控系統和執行其他管理工作,因此必須依賴自動化軟體、特定的系統組態和報告系統來更新各系統的狀態。

本章節將探討原生監控工具,並指導讀者收集系統的效能和健康統計資料。

CPU、記憶體和磁碟效能監控

在 Linux 系統中,CPU、記憶體和磁碟效能是三個主要的監控焦點。

網路效能

雖然區域網路(LAN)的網路容量通常不是問題,但檢查網路效能只需花費幾分鐘時間,因此值得進行監控。許多資料中心/伺服器室使用 10-gigabit 連線,以便系統間的通訊幾乎是即時的,備份(即使是大型備份)也不會造成問題。

本章節將重點介紹 CPU、記憶體和磁碟效能及容量監控。

追蹤 CPU 使用率

CPU 通常是系統管理員監控的首要元件。因為它是系統的核心。如果系統的 CPU 持續運作在 80% 以上的利用率,可能意味著系統的 CPU 不足以支援作業系統和所有正在執行的應用程式。也可能是應用程式編碼問題或安全漏洞導致 CPU 使用率進入「紅色」區域。

有多種工具可用於監控和評估 CPU 使用率。最簡單、最直接的工具是 topps 命令,這些命令是每個 Linux 發行版的標準組態。

top 命令

身為系統管理員,您可能已經使用過 top 或其相關命令(如 atophtop)。top 工具是大多數 Linux 發行版的標準組態,但需要從發行版的倉函式庫中安裝 atophtop 軟體包。

top 命令提供系統「頂級」程式的即時檢視。預設情況下,top 按照 CPU 使用率排序列出程式。

top

使用 Shift + M 切換到記憶體使用模式,如下圖所示。

atop 和 htop 命令

標準的 top 命令很有用,但對於許多系統管理員來說,顯示的資訊不足以進行明智的決策。atophtop 命令(預設情況下未安裝在大多數發行版上)提供了更廣泛的檢視。

atop 命令

atop 工具是一個先進的系統和程式監視器。atop 在下部窗格中顯示標準的 top 程式,但在上部窗格中提供 CPU、記憶體、磁碟和網路效能的洞察,如下圖所示。

atop

htop 命令

htop 工具是另一個系統效能檢視器,顯示與標準 top 工具相同的資訊,但具有彩色編碼和方便的命令選單。如圖所示,htop 工具的目前使用模式被突出顯示(CPU%)。目前模式是 CPU 使用率。選單有助於執行特定的命令,而無需管理員記住每個操作的鍵盤快捷鍵。

htop

鍵盤快捷鍵

Table 9-1 提供一些 top 排序選項的鍵盤快捷鍵。

| 鍵盤快捷鍵 | 排序方式 | |



-|




| | Shift + M | %MEM(記憶體使用率) | | Shift + P | %CPU(CPU 使用率 - 預設) | | Shift + S | TIME(執行時間) |

重點觀察與分析

  • CPU 使用率高可能表示系統資源不足或存在安全問題。
  • 使用 topatophtop 等工具可以即時監控系統資源使用情況。
  • 這些工具提供不同層次的資訊,從基本的 CPU 和記憶體使用率到更詳細的系統效能分析。

atop 詳細資訊

當以 root 使用者身份執行 atop 時,會顯示:

*** System and Process Activity since Boot *** Unrestricted view (privileged)

當以一般使用者身份執行 atop 時,會顯示:

*** System and Process Activity since Boot *** Restricted view (unprivileged)

兩種模式下的檢視內容相同,但在受限檢視中,某些操作(如對非屬主行程使用 kill)無法執行。

系統監控工具詳解

在 Linux 系統管理中,監控系統資源的使用情況是至關重要的。本篇文章將介紹多種用於監控 CPU、記憶體和磁碟效能的工具,包括 pshtopglancessysstat 套件中的工具。

使用 ps 命令檢視行程資訊

ps 命令是一個用於顯示行程資訊的基本工具。透過不同的選項,可以檢視屬於特定使用者的行程、所有行程或是行程表的不同格式。

檢視特定使用者的行程

要檢視目前使用者帳戶所擁有的所有行程,可以使用 -ux 選項:

$ ps -ux

輸出結果將顯示使用者、行程 ID (PID)、CPU 使用率、記憶體使用率等資訊。

檢視所有行程

使用 -aux 選項可以檢視系統中的所有行程:

$ ps -aux

這個命令將顯示所有使用者的行程,包括系統行程。

htopglances:互動式系統監控工具

htopglances 是兩款互動式的系統監控工具,提供即時的系統資源使用情況。

htop

htop 是一款類別似於 top 的工具,但提供了更友善的介面和更多的功能。您可以透過它來監控 CPU 使用率、記憶體使用率等。

glances

glances 是另一款跨平台的監控工具,提供了豐富的資訊和客製化選項。您可以透過快捷鍵來切換顯示的資訊,例如按下 M 鍵切換到記憶體使用率。


### 注意事項
- 使用 `glances` 時需要注意其對 CPU 的佔用率(約 15%),相較於 `top`(約 3-5%)。

sysstat 套件:系統效能監控工具

sysstat 套件包含了一系列用於監控系統效能的工具,包括 sarsadfmpstatiostat 等。

使用 sar 命令監控系統效能

sar 命令用於報告系統的效能統計資料。預設情況下,它顯示從午夜到目前時間的 CPU 統計資料。

$ sar

您可以使用不同的選項來篩選結果,例如 -u 顯示 CPU 統計資料,-B 顯示分頁統計資料。

$ sar -u ALL
$ sar -B
$ sar -b

使用 sadf 命令格式化輸出

sadf 命令可以用於將 sar 收集的資料以不同的格式輸出,例如 CSV 或 XML。

以多種格式顯示系統活動資料

sadf 命令將 sar 資料輸出為不同的格式,以便更容易地將其匯入資料函式庫或在網頁上顯示。例如,以下命令以易於匯入資料函式庫的格式顯示某月 21 日的 sar 資料:

$sadf -d /var/log/sa/sa21
# hostname;interval;timestamp;CPU;%user;%nice;%system;%iowait;%steal;%idle
server1;601;2022-09-21 04:10:04 UTC;-1;0.01;0.00;0.28;0.01;0.00;99.70
server1;601;2022-09-21 04:20:05 UTC;-1;0.01;0.00;0.26;0.01;0.00;99.72
server1;601;2022-09-21 04:30:06 UTC;-1;0.01;0.00;0.28;0.01;0.00;99.71
server1;601;2022-09-21 04:40:07 UTC;-1;0.01;0.00;0.27;0.01;0.00;99.71
...

除了用於歷史資料,sadf 也可用於當前資料:

$sadf -dh -- -p
# hostname;interval;timestamp;CPU;%user;%nice;%system;%iowait;%steal;%idle[...]
server1;598;2022-09-24 04:10:01 UTC;-1;0.02;0.00;0.33;0.01;0.00;99.64
server1;601;2022-09-24 04:20:01 UTC;-1;0.01;0.00;0.30;0.01;0.00;99.69
server1;601;2022-09-24 04:30:02 UTC;-1;0.01;0.00;0.29;0.01;0.00;99.70
server1;600;2022-09-24 04:40:03 UTC;-1;0.01;0.00;0.29;0.01;0.00;99.69
...

內容解密:

此命令輸出系統活動報告的格式可被輕易匯入資料函式庫。其中,-d 引數指定輸出格式為分隔資料,適用於匯入資料函式庫。輸出的欄位包含主機名稱、間隔時間、時間戳記、CPU 使用率等詳細資訊。

使用 iostat 監控系統 I/O 裝置負載

如同其他 “stat” 命令,iostat 命令首先顯示自系統啟動以來的統計摘要。您可多次執行該命令以檢視當前統計資料,或使用 -y 選項忽略摘要資訊。

包含摘要資訊的範例:

$iostat -d 2
Linux 4.18.0-348.7.1.el8_5.x86_64 (server1) 09/24/2022 _x86_64_ (1 CPU)
Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              0.26         1.59         2.05      312698      403049
sdc              0.01         0.04         0.01        8267        2797
sdb              0.00         0.02         0.01        3028        2048
scd0             0.00         0.00         0.00           1           0
dm-0             0.26         1.31         2.12      257071      416372
dm-1             0.00         0.01         0.01        2220        1172
dm-2             0.00         0.01         0.01        1330        2048
...

省略摘要資訊的範例:

$iostat -y -d 2
Linux 4.18.0-348.7.1.el8_5.x86_64 (server1) 09/24/2022 _x86_64_ (1 CPU)
Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              0.00         0.00         0.00           0           0
sdc              1.00         0.00         0.75           0           1
sdb              0.00         0.00         0.00           0           0
scd0             0.00         0.00         0.00           0           0
dm-0             0.00         0.00         0.00           0           0
dm-1             0.00         0.00         0.00           0           0
dm-2             0.00         0.00         0.00           0           
...

此圖示說明 iostat 輸出欄位及用途:

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title Linux系統監控工具sar與sadf詳解

package "Linux Shell 操作" {
    package "檔案操作" {
        component [ls/cd/pwd] as nav
        component [cp/mv/rm] as file
        component [chmod/chown] as perm
    }

    package "文字處理" {
        component [grep] as grep
        component [sed] as sed
        component [awk] as awk
        component [cut/sort/uniq] as text
    }

    package "系統管理" {
        component [ps/top/htop] as process
        component [systemctl] as service
        component [cron] as cron
    }

    package "管線與重導向" {
        component [| 管線] as pipe
        component [> >> 輸出] as redirect
        component [$() 命令替換] as subst
    }
}

nav --> file : 檔案管理
file --> perm : 權限設定
grep --> sed : 過濾處理
sed --> awk : 欄位處理
pipe --> redirect : 串接命令
process --> service : 服務管理

note right of pipe
  命令1 | 命令2
  前者輸出作為後者輸入
end note

@enduml

圖示內容解密:

此圖示呈現了 iostat 命令輸出的主要欄位及其意義。透過此圖,您可以清楚瞭解每個欄位所代表的磁碟 I/O 統計資訊。