在 Linux 環境下,有效監控系統效能並善用自動化技術是確保系統穩定執行的關鍵。本文將介紹多種常用工具,例如 mpstat 監控 CPU 效能、pidstat 監控個別行程、cifsiostat 監控 CIFS/Samba 檔案系統,並示範如何結合 Shell 指令碼與 Cron 排程,自動化備份等例行性任務。此外,文章也涵蓋 NTP 和 Chrony 時間同步設定,以及 Samba 伺服器的佈署與設定,以確保跨平台檔案分享和互通性。透過這些技術的整合運用,系統管理員可以更有效率地管理系統資源,減少人為錯誤,並提升整體系統的可靠性。

使用 tapestat 檢視磁帶機統計資訊(舊式技術)

由於目前大多數環境已不再使用實體磁帶機,此工具主要用於舊系統維護。

$tapestat
Linux 4.18.0-348.7.el8_5.x86_64 (server1) 
09/24/2022 _x86_64_ (1 CPU)
No tape drives with statistics found

tapestat 解密:

當系統中沒有磁帶機時,tapestat 將顯示未找到相關統計資訊的訊息。若您的系統仍在使用磁帶機,該命令將提供相關的統計資料。

使用 mpstat 取得處理器統計資訊

mpstat 命令可用於顯示多處理器和單處理器的統計資訊。

檢視所有處理器統計資訊:

$mpstat
Linux 
5..4.-125-generic (server2) 
09/25/2022 _x86_64_ (2 CPU)
10:06:16 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
10:06:16 AM all   .920   .010   .910   .200   .000   .250   .000   .000   .000   .972

檢視特定處理器統計資訊:

$mpstat -P 
Linux 
5..4.-125-generic (server2) 
09/25/2022 _x86_64_ (2 CPU)
10::43 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 
10::43 AM     .710   .010   .640   .140   .000   .080   .000   .000   .000   .984 

mpstat 解密:

mpstat 能夠顯示每個處理器的詳細使用率,包括使用者模式、系統模式、等待 I/O 等多項指標。透過 -P引數,您可以檢視特定處理器的統計資訊。

監控系統效能與容量

在管理 Linux 系統時,監控系統的效能和容量是確保系統穩定運作的關鍵步驟。本章將介紹多種工具和方法,幫助系統管理員全面監控和管理系統資源。

使用 mpstat 監控處理器統計資訊

mpstat 是一個用於報告處理器相關統計資訊的工具。它能夠提供有關 CPU 使用率的詳細資料,包括使用者模式、系統模式、等待 I/O 操作等各個方面的統計。

基本用法

執行 mpstat 命令可以顯示自系統啟動以來所有 CPU 的平均統計資訊:

$ mpstat
Linux 5.4.0-125-generic (server2) 09/25/2022 _x86_64_ (2 CPU)
09:56:28 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
09:56:28 AM all 2.05 0.02 2.01 0.44 0.00 0.44 0.00 0.00 0.00 95.05

檢視所有處理器的統計資訊

使用 -P ALL 選項,可以檢視所有處理器的詳細統計資訊:

$ mpstat -P ALL
Linux 5.4.0-125-generic (server2) 09/25/2022 _x86_64_ (2 CPU)
09:56:28 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
09:56:28 AM all 2.05 0.02 2.01 0.44 0.00 0.44 0.00 0.00 0.00 95.05
09:56:28 AM 0 1.93 0.02 2.11 0.44 0.00 0.65 0.00 0.00 0.00 94.84
09:56:28 AM 1 2.16 0.02 1.91 0.43 0.00 0.22 0.00 0.00 0.00 95.25

設定間隔和重複次數

與其他 “stat” 命令類別似,mpstat 可以設定間隔時間和重複次數。例如,以下命令每隔5秒執行一次 mpstat,共執行3次:

$ mpstat 5 3
Linux 5.4.0-125-generic (server2) 09/25/2022 _x86_64_ (2 CPU)
10:26:53 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
10:26:58 AM all 0.00 0.00 0.00 0.00 0.00 0.10 0.00 0.00 0.00 99.90
10:27:03 AM all 0.00 0.00 0.00 0.00 0.00 0.10 0.00 0.00 0.00 99.90
10:27:08 AM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Average: all 0.00 0.00 0.00 0.00 0.00 0.07 0.00 0.00 0.00 99.93

#### 程式碼解析:

  • mpstat:用於報告處理器的統計資訊。
  • -P ALL:顯示所有處理器的統計資訊。
  • 5 3:設定 mpstat 每隔5秒執行一次,共執行3次。

使用 pidstat監控 Linux 行程

pidstat 命令用於監控目前由 Linux核心管理的個別行程。預設情況下,它只顯示活躍的行程(具有非零統計值的行程)。

基本用法

執行 pidstat 命令可以顯示目前活躍行程的統計資訊:

$ pidstat
Linux5 .4 .0 -125 -generic (server2)09 /25 /2022_x86_64_(2CPU)
11 :19 :08AMUIDPID% usr% system% guest% wait% CPUCPUCommand
11 :19 :08AM01120 .020 .040 .000 .010 .060systemd
11 :19 :08AM020 .000 .000 .000 .000 .001kthreadd
11 :19 :08AM0100 .000 .010 .000 .000 .010ksoftirqd /0
...

檢視特定使用者的行程統計資訊

使用 -d-U選項,可以檢視特定使用者的行程磁碟使用統計資訊:

$ pidstat -d -U khess
Linux5 .4 .0 -125 -generic (server2)09 /25 /2022_x86_64_(2CPU)
11 :36 :26AMUSERPIDkB_rd /skB_wr /skB_ccwr /siodelayCommand
11 :36 :26AMkhess11310 .030 .000 .001systemd
11 :36 :26AMkhess12390 .790 .000 .002bash

#### 程式碼解析:

  • pidstat:用於監控 Linux 行程的統計資訊。
  • -d:顯示行程的磁碟使用統計資訊。
  • -U khess:指定要檢視的使用者名稱。

使用 cifsiostat監控 Windows 相容檔案系統統計資訊

cifsiostat 命令用於顯示關於 CIFS(Common Internet File System)或 Samba檔案系統的讀寫操作統計資訊。

基本用法

執行 cifsiostat 命令可以顯示 CIFS/Samba檔案系統的統計資訊:

$ cifsiostat 
Filesystem :rB /swB /srops /swops /sfo /sfc /sfd /s 
\\ server2\common0 .000 .000 .000 .001 .001 .000 .00 

#### 程式碼解析:

  • cifsiostat:用於顯示 CIFS/Samba檔案系統的統計資訊。
  • 輸出結果包括讀取位元組數、寫入位元組數、讀取操作次數、寫入操作次數等。

自動化與指令碼編寫

系統管理員盡可能地自動化他們的工作,但並非所有任務都能自動化。自動化有其優勢,但也有侷限性。本章將討論自動化的優缺點,以及在自動化過程中可能遇到的挑戰,如時序問題、系統故障、指令碼錯誤和人為干預等。

為什麼要自動化?

一些系統管理員曾問我為什麼要進行自動化。答案很簡單:這樣你就可以專注於更高層級的工作,而讓電腦系統處理那些必須執行的日常瑣事。這些瑣事包括手動建立備份、將備份複製到存檔位置、檢查每個系統的容量、安裝更新、檢查日誌檔案中的錯誤以及檢查執行時間等。

自動化的好處

自動化可以減少人為錯誤,提高工作效率,讓系統管理員有更多時間專注於重要的任務,如系統安全、測試新軟體和提升指令碼編寫技能。

#### 程式碼解析:

本文討論了自動化的好處和必要性,沒有特定的程式碼範例。

自動化:節省時間、減少錯誤與提升工作滿意度

在現今的技術環境中,我們擁有近乎無窮的運算能力,卻往往面臨時間的嚴格限制。將重複性、耗時的任務交給系統自動處理,不僅能節省時間,還能避免人為錯誤。自動化幾乎所有的重複性任務,不僅能提升工作效率,還能減少因人為疏失導致的問題。

自動化帶來的效益

基本自動化技術易於實行,能夠節省時間、金錢,並減少錯誤。系統管理員(sysadmin)透過自動化,能夠減少工作負擔,避免因重複性工作導致的倦怠感。多項研究顯示,自動化確實能提升工作滿意度。將備份、檔案傳輸、檢查備份和移除舊備份等重複性任務自動化,能夠大幅降低管理多台系統的工作量。

自動化的實踐

以下是關於自動化的五個常見問題的解答:

  1. 哪些任務應該自動化?
    任何可以可靠地指令碼化的任務,即使需要使用者輸入,都應該自動化。

  2. 是否有無法自動化的任務?
    是的,很多工無法自動化,尤其是那些需要複雜、多步驟決策的任務。不過,可以使用各種技術(如expect、shell指令碼、Perl、PHP等指令碼語言和編譯語言)來嘗試自動化它們。

  3. 是否有不應該自動化的任務?
    是的。例如,不應該自動化需要將未加密的密碼儲存在文字檔案中的任務。可以使用加密密碼、金鑰檔案、有限的sudo許可權或非特權帳戶來安全地自動化任務。

  4. 應該首先自動化哪個任務?
    應該首先自動化備份任務。例如,建立/etc目錄的備份,並使用安全複製(SCP)將其存檔到另一台系統上。

  5. 是否應該購買商業自動化解決方案?
    可以先使用自己的指令碼,並在窮盡所有選項後再考慮購買商業解決方案。如果主機數量龐大,購買商業解決方案是合理的。

編寫指令碼

編寫指令碼的第一步是列出指令碼需要執行的步驟。以backup_server1.sh為例:

  • 建立/etc目錄的tar檔案。
  • 壓縮tar檔案。
  • 將檔案傳輸到伺服器archive1

指令碼內容如下:

#!/bin/bash
# 建立/etc的tar檔案
sudo tar cvf server1_etc.tar /etc
# 壓縮tar檔案
gzip -9 server1_etc.tar
# 將檔案傳輸到archive1的/server1/backups目錄
scp server1_etc.tar.gz archive1:/server1/backups

內容解密:

  1. #!/bin/bash 指定了用於執行該指令碼的shell。
  2. sudo tar cvf server1_etc.tar /etc 建立了一個名為server1_etc.tar的tar檔案,包含了/etc目錄的所有內容。
  3. gzip -9 server1_etc.tar 使用最高壓縮率對tar檔案進行壓縮。
  4. scp server1_etc.tar.gz archive1:/server1/backups 將壓縮後的檔案安全地複製到archive1伺服器的指定目錄中。

設定備份使用者和排程任務

為了提高安全性,建議建立一個專門的備份使用者(例如bur),並為該使用者設定無密碼SSH金鑰認證。同時,設定cron作業來定期執行備份指令碼。

設定範例:

# 為bur使用者設定crontab
0 2 * * * /home/bur/backup_server1.sh

這將每天凌晨2點執行備份指令碼,將/etc目錄備份到archive1伺服器上。

結語

自動化不僅能夠提升工作效率、減少錯誤,還能提高系統管理員的工作滿意度。透過編寫簡單的指令碼,可以實作備份、檔案傳輸等任務的自動化,從而節省寶貴的時間,專注於更重要的工作。建議從備份任務開始,逐步實作更多工的自動化,以提升整體的工作效率和系統管理的可靠性。

使用 cron 進行任務排程

cron 是一種用於在特定時間執行命令的工具,能夠自動化重複性任務,無論是每天、每週還是每月的特定時間。它是 Linux 系統中的一項基本工具,用於處理那些需要在特定時間執行的任務。

瞭解 cron 的工作原理

cron 的語法看似複雜,但實際上非常有規律:

# ┌───────────── 分鐘 (0 - 59)
# │ ┌───────────── 小時 (0 - 23)
# │ │ ┌───────────── 日期 (1 - 31)
# │ │ │ ┌───────────── 月份 (1 - 12)
# │ │ │ │ ┌───────────── 星期幾 (0 - 6),0 和 7 都代表星期日
# │ │ │ │ │
# * * * * * 要執行的命令

這種格式定義了何時執行特定的命令或指令碼。

實際應用範例

每 5 分鐘執行一次指令碼

如果需要在每天的每 5 分鐘執行一次指令碼,可以這樣設定:

0,5,10,15,20,25,30,35,40,45,50,55 * * * * /path/to/script.sh

每週一、三、五下午 2:00 執行指令碼

若要在每週一、三、五的下午 2:00 執行指令碼,設定如下:

0 14 * * 1,3,5 /path/to/script.sh

每月 15 日早上 6:00 執行指令碼

要在每月的 15 日早上 6:00 執行指令碼,可以這樣寫:

0 6 15 * * /path/to/script.sh

注意事項

  • 設定 * * * * * /path/to/script.sh 將會使指令碼每分鐘執行一次,通常這不是我們想要的結果。
  • 大多數監控場景下,每五分鐘執行一次已經足夠捕捉到需要的資訊。

使用網路時間協定(NTP)防止時間漂移

當多個系統需要協同工作時,保持它們的時間同步至關重要。為此,可以使用 chronyntp 這類別工具來同步系統時間。

安裝與設定 chrony

  1. 安裝 chrony
    $ sudo yum -y install chrony  # 在 RHEL/CentOS 上
    $ sudo apt install chrony     # 在 Debian/Ubuntu 上
    
  2. 啟動並設定 chrony 開機自啟
    $ sudo systemctl enable chronyd
    $ sudo systemctl start chronyd
    
  3. 檢查 chrony 狀態
    $ chronyc activity
    
    此命令會顯示目前的時間同步狀態。

設定 chrony 為本地時間伺服器

  1. 編輯 /etc/chrony.conf,取消註解以下兩行,並修改為你的網路設定:
    # Allow NTP client access from local network.
    allow 192.168.0.0/16
    # Serve time even if not synchronized to a time source.
    local stratum 10
    
  2. 重啟 chronyd 服務:
    $ sudo systemctl restart chronyd
    

設定客戶端使用本地時間伺服器

在客戶端的 /etc/chrony.conf 中加入以下行:

server 192.168.1.80 prefer iburst

然後重啟客戶端的 chronyd 服務,並檢查時間同步狀態:

$ chronyc sources

此設定將確保你的本地網路中的所有系統保持時間同步。

Samba在Windows相容性中的佈署

在現代資料中心中,不同系統之間的互操作性是不可或缺的。Windows、Linux和Unix系統需要能夠共存並協同工作。Samba是一個重要的工具,它使Linux和Unix系統能夠與Windows系統實作互操作,提供穩定的檔案和列印服務。

Samba的功能與優勢

Samba提供了一套實用程式,使Linux和Unix系統能夠與Windows系統分享檔案和資源。使用Samba,Linux系統可以:

  • 與Windows電腦分享目錄、檔案系統和印表機
  • 掛載Windows共用資料夾
  • 瀏覽網路上的共用資源
  • 參與Windows網域驗證和授權
  • 使用Windows名稱解析服務
  • 使用共用印表機

同時,Windows電腦也可以:

  • 瀏覽Linux共用資源
  • 使用共用印表機
  • 將網路磁碟機對映到Linux共用資料夾

規劃Samba環境

在佈署Samba之前,需要考慮幾個重要的問題:

  1. 是否需要限制共用空間的存取許可權?
  2. 是否允許所有使用者在共用空間中建立和複製檔案?
  3. 是否需要設定預設的檔案許可權?
  4. 是否需要唯讀資料夾?
  5. 共用空間是永久還是臨時的?

假設設施部門請求建立一個共用檔案空間,以下是可能的答案:

  1. 是的,僅限設施部門員工存取。
  2. 是的,所有人都可以複製和建立檔案。
  3. 所有人都有讀寫所有檔案的許可權。
  4. 是的,需要一個唯讀的「Policies」資料夾。
  5. 這是一個永久的共用空間。

根據這些答案,可以開始設定Samba環境。首先,建立一個名為「facilities」的群組,並將相關使用者加入其中。然後,建立一個共用目錄(如/opt/facilities),並設定適當的群組擁有權和許可權。

$ sudo groupadd -g 9001 facilities
$ sudo usermod -g facilities atran
$ sudo usermod -g facilities areed
$ sudo usermod -g facilities akumar
$ sudo mkdir /opt/facilities
$ sudo chgrp facilities /opt/facilities
$ sudo chmod 770 /opt/facilities

設定細節解析:

  • groupadd命令用於建立一個新的群組。
  • usermod命令用於將使用者新增到指定的群組。
  • mkdir命令用於建立新的目錄。
  • chgrp命令用於更改目錄的群組擁有權。
  • chmod命令用於更改目錄的許可權。

接下來,建立一個唯讀的子目錄「Policies」。

$ sudo mkdir /opt/facilities/Policies
$ sudo chmod 740 /opt/facilities/Policies

設定細節解析:

  • /opt/facilities下建立了一個名為「Policies」的子目錄。
  • 將「Policies」目錄的許可權設定為740,確保只有擁有者和群組可以讀取,而其他人無法存取。

這樣,共用空間的設定就完成了,接下來就可以進行Samba的組態,使其能夠與Windows系統協同工作。