[RHCE] System Monitor

DISK SPACE

在Linux系統中從磁碟到檔案之間的關係,用比較簡單的方法解釋是磁碟會被切割為分割區,分割區會被格式化為檔案系統,例如我們常看到的EXT4, FAT, NTFS等,作業系統只能使用固定的檔案系統去儲存檔案、檔案的屬性、以及其他的資訊,然後再將檔案系統掛載到某個目錄,如此使用者才可以利用這個目錄的路經去存取這個檔案系統。

管理檔案系統最基本的作業就是要先了解檔案系統的狀況,使用 #df [參數] [檔案或目錄] 可以查詢這個檔案或目錄所存放的檔案系統的使用狀況,例如輸入 #df /etc/cron.d 可以查詢到/etc/cron.d這個目錄所屬的檔案系統的資訊。


Filesystem: 這個檔案系統所屬的分割區的裝置名稱。
1K-blocks: 說明1K-blocks, Used, Available的單位是1KB。
Used: 已經使用的磁碟空間。Available: 還可以使用的磁碟空間。
Use%: 磁碟空間使用量百分比。
Mount on: 磁碟的掛載目錄。

可以使用的參數有:
-a: 列出包含系統特有的所有檔案系統。
-k: 以KB為單位計算容量。
-m: 以MB為單位計算容量。
-h: 依照容量大小自動選擇以GB, MB, KB等單位顯示。
-T: 顯示該分割區的檔案系統名稱。
-i: 使用inode數量取代檔案容量顯示。

而當管理者想查詢某個檔案或目錄的容量時,可以使用 #du [參數] [檔案或目錄],例如 #du /dev 會將/dev底下所有的目錄的使用容量列出來,預設的單位是KB。


可使用的參數有:
-a: 將目錄下的檔案也個別列出。
-h: 依照容量大小自動選擇以GB, MB, KB等單位顯示。
-s: 查詢目錄時僅列出該目錄總使用容量。
-S: 計算目錄容量時,不計算子目錄的容量。
-k: 以KB為單位計算容量。
-m: 以MB為單位計算容量。

當檔案系統出現問題時,在Windows作業系統中會出現scandisk協助使用者檢查並修復檔案系統,在Linux系統中,可以使用 #fsck [參數] [裝置名稱] 進行同樣的作業,需要注意的是如果在系統狀況正常下使用這個指令,可能會損害系統運作;指令可用的參數如下:
-p: 指令在作業時不會有任何詢問。
-y: 類似-p,對於系統的詢問自動回答yes。
-f: 強制檢查檔案系統細部。
-b [superblock編號]: 修復檔案系統的superblock,可用 # dumpe2fs -h [磁碟名稱] | grep 'Blocks per group' 查詢一個block group有幾個block,然後推算出superblock的block編號。

IO STATUS

當管理者想要知道目前系統磁碟的讀寫狀況時,可以使用 #iostat [參數] [磁碟名稱] [查詢間隔秒數] [查詢報告次數];例如每五秒查詢sda1狀況,共查詢三次,輸入 #iostat –d sda1 5 3


tps: 該磁碟每秒傳輸的次數。
kB_read/s: 該磁碟每秒被讀取的資料量。
kB_wrtn/s: 該磁碟每秒被寫入的資料量。
kB_read: 該磁碟被讀取的總資料量。
kB_wrtn: 該磁碟被寫入的總資料量。

可用的參數有:
-d: 只查詢磁碟狀況。
-N: 只查詢LVM狀況。
-k: 以KB為顯示單位。
-m: 以MB為顯示單位。

SWAP STATUS

與iostat的使用方式類似,使用 #vmstat [查詢間隔時間] [查詢報告次數] 可以查詢swap(虛擬記憶體)的使用狀況。


r: 佇列中運行的程序數量。
b: 等待其他設備IO的程序數量。
swpd: 已使用的虛擬記憶體大小。
free: 空閒的虛擬記憶體大小。
buff: 用作系統緩衝的虛擬記憶體大小。
cache: 用作系統暫存的虛擬記憶體大小。
si: 每秒從磁碟寫入虛擬記憶體的數量。
so: 每秒從虛擬記憶體寫入磁碟的數量。
bi: 每秒block device寫入虛擬記憶體的數量。
bo: 每秒虛擬記憶體寫入block device的數量。
in: 每秒interrupt request的數量。
cs: 每秒context switches的數量。
us: 執行來自使用者的程序的時間花費百分比。
sy: 執行系統程序的時間花費百分比。
id: 閒置時間百分比。
wa: 等待IO的時間百分比。
st: 一個跟虛擬機有關的時間百分比,在Linux 2.6.11版後,CPU可以將任務分配給虛擬機去運行。


SYSTEM CHANGE

為了避免系統被有意或無意的修改,管理者可以利用AIDE建立系統的特徵資料庫,當系統出現異常時,可以利用現在的特徵資料去比對正常系統的特徵資料,了解那些設定已經被修改。

使用 #yum install aide 安裝AIDE後,輸入 #/usr/sbin/aide --init 建立目前系統的特徵資料庫,這會因系統大小需要花一點時間。


然後將初始資料庫/var/lib/aide/aide.db.new.gz變更為基準資料庫/var/lib/aide/aide.db.gz;最後當管理者發現主機可能被修改時,輸入 #aide --check 比對現行特徵資料庫與初始資料庫的差異,比對的時間也會因資料庫的大小而多花點時間。


SYSTEM INFO

sar, iostat, mpstat, vmstst等同屬於sysstat這個套件,其中sar包括了其他所有軟體的功能,可以同時監控CPU、記憶體、磁碟機、網路;輸入 #sar [參數] [查詢間隔時間] [查詢報告次數] 可以查詢系統的各項使用量紀錄,若不帶任何參數則顯示CPU的使用率報告。


sar可用的參數非常多,可參考sar的man page,這邊僅列出常用的參數:
-A: 列出CPU、記憶體、磁碟、網路等所有的報告。
-b: 列出IO與傳輸速率的報告。
-d: 列出每個block device的報告。
-f: 讀取log檔。
-r: 列出記憶體使用率報告。
-u: 列出CPU使用率報告。


TEMP FILE CLEAR

系統運行時會產生許多暫存檔,Linux系統可以利用tmpwatch定時清除這些暫存檔,利用 #yum install tmpwatch 安裝後,可在排程中加入tmpwatch的指令定時清除,或者利用 #tmpwatch [參數] [時間] [目錄] 手動清除檔案,時間可以指定超過幾個小時未使用的檔案,而其他可用的參數有:
-a: 刪除目錄中所有檔案。
-f: 強制刪除目錄中所有檔案
-q: 不顯示執行過程。
-v: 詳細顯示執行過程。
-test: 測試刪除指令。

SYSTEM LOG

系統紀錄對於管理者來說是相當重要的資料,不僅日常時可以判斷系統是否正常,當系統異常時也可以藉由系統紀錄找尋可能異常的原因;使用rsyslog可以產生系統各項服務的紀錄檔,rsyslog的設定檔在/etc/rsyslog.conf,開啟該檔案後,找到rule的段落,可以在此設定哪些服務需要紀錄哪些等級訊息,而這些紀錄又要儲存在哪。


例如第二行的意思就是記錄所有服務info等級的訊息,但是mail, authpriv,.cron這三個服務不要紀錄,紀錄檔儲存在/vat/log/messages。

訊息等級有以下幾種,越往下表示訊息嚴重性越高:
debug: 除錯等級,程式除錯時產生的訊息。
info: 訊息等級,基本說明的訊息。
notice: 注意等級,服務還是正常,但是比info更要被注意的訊息。
warning(warn): 警告等級,可能會有問題,但是不嚴重。
err(error): 錯誤等級,不是很緊急但某些服務可能會無法啟動。
crit: 臨界等級,異常的狀況已經到達臨界點了,可能會開始影響整個系統。
alert: 警報等級,某些異常需要馬上處理。
emerg(panic): 疼痛等級,整個系統幾乎要當機了。

在儲存紀錄檔的地方可以看到兩個比較特殊的,一個是-/var/log/maillog,「-」表示非同步儲存,紀錄會先儲存在buffer中,等到了一定的量再寫入檔案;:omusrmsg:*表示傳送訊息給所有的使用者;或者使用@IP:port與@@IP:port發送至遠端的log server,@表示使用UDP,@@表示使用TCP。


或者可以安裝logwatch用來寄送紀錄檔,使用 #yum install logwatch 安裝服務後,編輯/etc/logwatch/conf/logwatch.conf設定服務,可以參考/usr/share/logwatch/default.conf/logwatch.conf的範例檔,包括接收人、輸出格式、儲存格示、是否加密等;或者使用 #logwatch [參數] 以指令的方式設定。

另外,Linux系統預設會安裝logrotate這個工具,可以定期幫管理者整理紀錄檔,它的排成設定在/etc/cron.daily/logrotate中,而設定檔在/etc/logrotate.conf,其中可以看到這段:


這段的意思是針對/var/log/wtmp每個月整理一次,整理時會新建檔案,所有者為root,群組為utmp,權限為664,記錄檔要超過1MB才整理,只保留一個整理後的檔案;設定上相當直觀簡單,其他可用的設定參數有:
daily: 每天整理一次。
weekly: 每周整理一次。
dateext: 整理後的檔案檔名加上時間戳記。
compress: 使用gzip壓縮整理後的檔案。
delaycompress: 下次產生整理後的檔案時,壓縮這次整理的檔案。
notifempty: 如果log檔是空的,就不整理。
copytruncate: 整理檔案後會清空原本的紀錄檔。

留言