linux系統日常管理--監控系統的狀態+排查是否正被攻擊

概述

工作中有時領導會說明天有業務,讓你去檢查下服務器,監控下系統的狀態是不是正常的,這時候我們需要查看哪些信息呢?下面從負載、進程、內存、網絡、網卡等幾個方面來介紹下怎麼去監控>


1. w查看當前系統的負載

linux系統日常管理--監控系統的狀態+排查是否正被攻擊

參數說明:

第一行從左面開始顯示的信息依次為:時間,系統運行時間,登錄用戶數,平均負載。

第二行開始以及下面所有的行,告訴我們的信息是,當前登錄的都有哪些用戶,以及他們是從哪裡登錄的等等。其實,在這些信息當中,我們最應該關注的應該是第一行中的 ‘load average:’ 後面的三個數值。

第一個數值表示1分鐘內系統的平均負載值;
第二個數值表示5分鐘內系統的平均負載值;
第三個數值表示15分鐘系統的平均負載值。

這個值的意義是,單位時間段內CPU活動進程數。

當然這個值越大就說明你的服務器壓力越大。一般情況下這個值只要不超過服務器的cpu數量就沒有關係。

2. vmstat 監控系統的狀態

linux系統日常管理--監控系統的狀態+排查是否正被攻擊

上面講的 w 查看的是系統整體上的負載,通過看那個數值可以知道當前系統有沒有壓力,但是具體是哪裡(CPU, 內存,磁盤等)有壓力就無法判斷了。通過 vmstat 就可以知道具體是哪裡有壓力。vmstat命令打印的結果共分為6部分:procs, memory, swap, io, system, cpu. 請重點關注一下r b si so bi bo幾列。

2.1、procs 顯示進程相關信息

r :表示運行和等待cpu時間片的進程數,如果長期大於服務器cpu的個數,則說明cpu不夠用了;
b :表示等待資源的進程數,比如等待I/O, 內存等,這列的值如果長時間大於1,則需要關注一下了;

2.2、memory 內存相關信息

swpd :表示切換到交換分區中的內存數量 ;
free :當前空閒的內存數量;
buff :緩衝大小,(即將寫入磁盤的);
cache :緩存大小,(從磁盤中讀取的);

2.3、swap 內存交換情況

si :由交換區寫入到內存的數據量;
so :由內存寫入到交換區的數據量;

2.4、io 磁盤使用情況

bi :從塊設備讀取數據的量(讀磁盤);
bo: 從塊設備寫入數據的量(寫磁盤);

2.5、system 顯示採集間隔內發生的中斷次數

in :表示在某一時間間隔中觀測到的每秒設備中斷數;
cs :表示每秒產生的上下文切換次數;

2.6、CPU 顯示cpu的使用狀態

us :顯示了用戶下所花費 cpu 時間的百分比;
sy :顯示系統花費cpu時間百分比;
id :表示cpu處於空閒狀態的時間百分比;
wa :表示I/O等待所佔用cpu時間百分比;
st :表示被偷走的cpu所佔百分比(一般都為0,不用關注);

以上所介紹的各個參數中,我一般主要關注r列,b列,和wa列,三列代表的含義在上邊說得已經很清楚。IO部分的bi以及bo也是要經常參考的對象。如果磁盤io壓力很大時,這兩列的數值會比較高。另外當si, so兩列的數值比較高,並且在不斷變化時,說明內存不夠了,內存中的數據頻繁交換到交換分區中,這往往對系統性能影響極大。

注意:一般使用 vmstat 查看系統狀態的時候,通常都是使用這樣的形式來看的:

# vmstat 1 5


linux系統日常管理--監控系統的狀態+排查是否正被攻擊

說明:每隔一秒鐘打印一次狀態,共打印5次。


3. top 顯示進程所佔系統資源

linux系統日常管理--監控系統的狀態+排查是否正被攻擊

這個命令用於動態監控進程所佔系統資源,每隔3秒變一次。這個命令的特點是把佔用系統資源(CPU,內存,磁盤IO等)最高的進程放到最前面。top命令打印出了很多信息,包括系統負載(loadaverage)、進程數(Tasks)、cpu使用情況、內存使用情況以及交換分區使用情況。其實上面這些內容可以通過其他命令來查看,所以用top重點查看的還是下面的進程使用系統資源詳細狀況。這部分東西反映的東西還是比較多的。

PS:分享下我經常用的一個命令 top -bn1 它表示非動態打印系統資源使用情況,可以用在shell腳本中:

linux系統日常管理--監控系統的狀態+排查是否正被攻擊

和 top 命令唯一的區別就是,它一次性全部把所有信息輸出出來而非動態顯示。

4. sar監控系統狀態

sar 命令很強大,它可以監控系統所有資源狀態,比如平均負載、網卡流量、磁盤狀態、內存使用等等。它不同於其他系統狀態監控工具的地方在於,它可以打印歷史信息,可以顯示當天從零點開始到當前時刻的系統狀態信息。如果你係統沒有安裝這個命令,請使用 yum install -y sysstat (或者apt-get install -y sysstat)命令安裝。初次使用sar命令會報錯,那是因為sar工具還沒有生成相應的數據庫文件(時時監控就不會了,因為不用去查詢那個庫文件)。它的數據庫文件在 “/var/log/sa/” 目錄下,默認保存一個月。因為這個命令太過複雜,所以我只介紹幾個。

linux系統日常管理--監控系統的狀態+排查是否正被攻擊

4.1、查看網卡流量 sar -n DEV

linux系統日常管理--監控系統的狀態+排查是否正被攻擊

參數說明: IFACE這列表示設備名稱,rxpck/s 表示每秒進入收取的包的數量,txpck/s 表示每秒發送出去的包的數量,rxbyt/s 表示每秒收取的數據量(單位Byte),txbyt/s表示每秒發送的數據量。後面幾列不需要關注。

如果有一天你所管理的服務器丟包非常嚴重,那麼你就應該看一看這個網卡流量是否異常了,如果rxpck/s 那一列的數值大於4000,或者rxbyt/s那列大於5,000,000則很有可能是被攻擊了,正常的服務器網卡流量不會高於這麼多,除非是你自己在拷貝數據。

上面的命令是查看網卡流量歷史的,如何時時查看網卡流量呢?

linux系統日常管理--監控系統的狀態+排查是否正被攻擊

4.2、查看歷史負載 sar -q

linux系統日常管理--監控系統的狀態+排查是否正被攻擊

這個命令可以查看服務器在過去的某個時間的負載狀況。

大家重點還是用來看是不是丟包和網絡情況吧!

5. free查看內存使用狀況

linux系統日常管理--監控系統的狀態+排查是否正被攻擊

只需要敲一個 free 然後回車就可以當前系統的總內存大小以及使用內存的情況,還可以加-m 或者-g選項分別以M或G為單位打印內存使用狀況:

linux系統日常管理--監控系統的狀態+排查是否正被攻擊

我一般用free -m方式查看內存佔用情況(兆為單位),而系統實際可用內存以及可用內存有如下幾個加減法:

  • used=total-free total=used+free
  • 實際內存佔用:used-buffers-cached total-free-buffers-cached
  • 實際可用內存:buffers+cached+free


6. ps 查看系統進程

監控進程的話這裡介紹一個專門顯示系統進程的命令,主要看下是不是有異常進程:

linux系統日常管理--監控系統的狀態+排查是否正被攻擊

參數說明:

PID :進程的id,這個id很有用,在linux中內核管理進程就得靠pid來識別和管理某一個程,比如我想終止某一個進程,則用 ‘kill 進程的pid 有時並不能殺掉,則需要加一個-9選項了 kill -9 進程pid

STAT :表示進程的狀態,進程狀態分為以下幾種(不要求記住,但要了解)

D 不能中斷的進程(通常為IO)

R 正在運行中的進程

S 已經中斷的進程,通常情況下,系統中大部分進程都是這個狀態

T 已經停止或者暫停的進程,如果我們正在運行一個命令,比如說 sleep 10 如果我們按一下ctrl -z 讓他暫停,那麼我們用ps查看就會顯示T這個狀態

W 這個好像是說,從內核2.6xx 以後,表示為沒有足夠的內存頁分配

X 已經死掉的進程(這個好像從來不會出現)

Z 殭屍進程,殺不掉,打不死的垃圾進程,佔系統一小點資源,不過沒有關係。如果太多,就有問題了。一般不會出現。

< 高優先級進程

N 低優先級進程

L 在內存中被鎖了內存分頁

s 主進程

l 多線程進程

+ 代表在前臺運行的進程

這個ps命令是我在工作中用的非常多的命令之一,必須掌握的。關於ps命令的使用,小編經常會連同管道符一起使用,用來查看某個進程或者它的數量。

linux系統日常管理--監控系統的狀態+排查是否正被攻擊

7. netstat 查看網絡狀況

linux系統日常管理--監控系統的狀態+排查是否正被攻擊

netstat命令用來打印網絡連接狀況、系統所開放端口、路由表等信息。小編最常用的關於netstat的命令就是這個 netstat -nlp (打印當前系統啟動哪些端口)以及 netstat -an (打印網絡連接狀況)這兩個命令非常有用,請一定要記住。

linux系統日常管理--監控系統的狀態+排查是否正被攻擊

如果你所管理的服務器是一臺提供web服務(80端口)的服務器,那麼你就可以使用 netstat -an |grep 80 查看當前連接web服務的有哪些IP了,再進一步可以netstat -an|grep 80|wc -l來查看大概有多少個連接。

8、抓包工具tcpdump

有時候,也許你會有這樣的需求,想監控一下某個網卡上都有哪些數據包,尤其是當你初步判定你的服務器上有流量攻擊。這時,使用抓包工具來抓一下數據包,就可以知道有哪些IP在攻擊你了。

linux系統日常管理--監控系統的狀態+排查是否正被攻擊


如果沒有tcpdump 這個命令,需要用 yum install -y tcpdump 命令去安裝一下。上例中第三列和第四列顯示的信息為哪一個IP+port在連接哪一個IP+port,後面的信息是該數據包的相關信息,如果不懂也沒有關係,畢竟我們不是專門搞網絡的,而這裡需要關注的只是第三列以及第四列。-i 選項後面跟設備名稱,如果你想抓eth1網卡的包,後面則要跟eth1.至於-nn選項的作用是讓第三列和第四列顯示成IP+端口號的形式,如果不加-nn則顯示的是主機名+服務名稱。


篇幅有限,關於這一塊linux監控系統狀態的一些命令就介紹到這了,上面的命令都是很常用的,建議大家多去測試練習下!!

後面會分享更多關於devops和DBA方面內容,感興趣的朋友可以關注下!!

linux系統日常管理--監控系統的狀態+排查是否正被攻擊



分享到:


相關文章: