前言
偉大領袖毛主席說過——手中有糧,心就不慌。服務器的日常管理,離不開關鍵指標的監控,無論是防患於未然,還是意外發生之後儘快還原故障真相,靠的便是完善的監控體系。只有對系統實現了360°監控,才能對線上的業務放心,而不是當問題發生時,手忙腳亂,只會說“我擦,怎麼又掛了”。接下來,我們一起來學習下哪些指標是需要關心的、各自代表啥意思、如何監控這些指標及發現不良運行狀態後如何處理。
服務器常用監控指標
服務器常用的監控項有CPU、Memory、Load、Disk、Disk I/O、Network等。這是通用的監控指標,除此之外,各自業務的監控系統也很重要,需要精通業務的開發人員diy監控項了,僅作提醒。下面是對每種類型的介紹:
-
CPU相關
計算方法:通過查看/proc/stat來得到,可以參考sar命令的統計輸出來理解。cpu.idle:CPU或CPU空閒且系統沒有未完成的磁盤I / O請求的時間百分比。 cpu.busy:與cpu.idle相對,他的值等於100減去cpu.idle。 cpu.guest:CPU或CPU運行虛擬處理器所花費的時間百分比。 cpu.iowait:CPU或CPU空閒的時間百分比,在此期間系統具有未完成的磁盤I / O請求。 cpu.irq:CPU或CPU爲硬件中斷服務所花費的時間百分比。 cpu.softirq:CPU或CPU用於服務軟件中斷所花費的時間百分比。 cpu.nice:在具有良好優先級的用戶級別執行時發生的CPU利用率百分比。 cpu.steal:虛擬機管理程序爲另一個虛擬處理器提供服務時虛擬CPU或CPU無意中等待所花費的時間百分比。 cpu.system:在系統級別(內核)執行時發生的CPU利用率百分比。 cpu.user:在用戶級別(應用程序)執行時發生的CPU利用率百分比。 cpu.cnt:cpu核數。 cpu.switches:cpu上下文切換次數,計數器類型。
-
內存相關
計算方法:讀取/proc/meminfo 中的內容,其中的mem.memfree是free+buffers+cached,mem.memused=mem.memtotal-mem.memfree。可以參考free命令的輸出和幫助文檔來理解每個metric的含義。root@iZ2zeic9ggky8lb31din1gZ:~# cat /proc/meminfo MemTotal: 2048124 kB MemFree: 208772 kB MemAvailable: 1286472 kB Buffers: 196852 kB Cached: 939116 kB SwapCached: 0 kB Active: 1020548 kB Inactive: 603520 kB Active(anon): 488732 kB Inactive(anon): 37648 kB Active(file): 531816 kB Inactive(file): 565872 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 0 kB SwapFree: 0 kB Dirty: 0 kB Writeback: 0 kB AnonPages: 488144 kB Mapped: 207928 kB Shmem: 38280 kB Slab: 187916 kB SReclaimable: 168004 kB SUnreclaim: 19912 kB KernelStack: 3680 kB PageTables: 7440 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 1024060 kB Committed_AS: 1557344 kB VmallocTotal: 34359738367 kB VmallocUsed: 0 kB VmallocChunk: 0 kB HardwareCorrupted: 0 kB AnonHugePages: 6144 kB CmaTotal: 0 kB CmaFree: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 59264 kB DirectMap2M: 2037760 kB DirectMap1G: 0 kB
-
負載相關
計算方法:讀取/proc/loadavg,都是原始值類型的:
load.1min load.5min load.15min,分別表示系統在過去1分鐘、5分鐘、15分鐘內運行進程隊列中的平均負載。
具體來說:
0.00-1.00 之間的數字表示此時路況非常良好,沒有擁堵,車輛可以毫無阻礙地通過。
1.00 表示道路還算正常,但有可能會惡化並造成擁堵。此時系統已經沒有多餘的資源了,管理員需要進行優化。
1.00-*** 表示路況不太好了,如果到達2.00表示有橋上車輛一倍數目的車輛正在等待。這種情況你必須進行檢查了。
如果是多核CPU - 多車道 - 數字/CPU核數 在0.00-1.00之間正常
多核CPU的話,滿負荷狀態的數字爲 “1.00 * CPU核數”,即雙核CPU爲2.00,四核CPU爲4.00。 -
磁盤相關
計算方法:先讀取/proc/mounts拿到所有掛載點,然後通過syscall.Statfs_t拿到blocks和inode的使用情況。每個metric都會附加一組tag描述,類似mount=mount,fstype=mount,fstype=fstype,其中mount是掛載點,比如/home,mount是掛載點,比如/home,fstype是文件系統,比如ext4。df.bytes.free:磁盤可用量,int64 df.bytes.free.percent:磁盤可用量佔總量的百分比,float64,比如32.1 df.bytes.total:磁盤總大小,int64 df.bytes.used:磁盤已用大小,int64 df.bytes.used.percent:磁盤已用大小佔總量的百分比,float64 df.inodes.total:inode總數,int64 df.inodes.free:可用inode數目,int64 df.inodes.free.percent:可用inode佔比,float64 df.inodes.used:已用的inode數據,int64 df.inodes.used.percent:已用inode佔比,float64
-
磁盤 I/O 相關
計算方法:每秒讀取一次/proc/diskstats,計算差值,都是計數器類型的。每個metric都會有一組tag描述,形如device=$device,用來表示具體的設備,比如sda1、sdb。可以參考iostat的幫助文檔來理解具體的metric含義。disk.io.ios_in_progress:當前正在進行的實際I / O請求數。 disk.io.msec_read:所有讀取花費的總ms數。 disk.io.msec_total:ios_in_progress> = 1的時間。 disk.io.msec_weighted_total:衡量最近的I / O完成時間和積壓。 disk.io.msec_write:所有寫入花費的總ms數。 disk.io.read_merged:在單個req中合併的相鄰讀取請求。 disk.io.read_requests:成功完成的讀取總數。 disk.io.read_sectors:成功讀取的扇區總數。 disk.io.write_merged:在單個req中合併相鄰的寫入請求。 disk.io.write_requests:成功完成的寫入總數。 disk.io.write_sectors:成功寫入的扇區總數。 disk.io.read_bytes:單位是字節的數字 disk.io.write_bytes:單位是字節的數字 disk.io.avgrq_sz:下面幾個值就是iostat -x 1看到的值 disk.io.avgqu-SZ disk.io.await disk.io.svctm disk.io.util:磁盤IO利用百分數,比如56.43,56.43表示%。
-
網絡相關
計算方法:讀取/proc/net/dev的內容,每個metric都附加有一組tag,形如iface=$iface,標明具體那個interface,比如eth0。metric中帶有in的表示流入情況,out表示流出情況,total是總量in+out,支持的metric如下:net.if.in.bytes net.if.in.compressed net.if.in.dropped net.if.in.errors net.if.in.fifo.errs net.if.in.frame.errs net.if.in.multicast net.if.in.packets ==net.if.out.bytes== 網卡每秒向外傳輸的數據量 net.if.out.carrier.errs net.if.out.collisions net.if.out.compressed net.if.out.dropped net.if.out.errors net.if.out.fifo.errs net.if.out.packets ==net.if.total.bytes== 網卡每秒發送和接收的數據量 net.if.total.dropped net.if.total.errors net.if.total.packets
常用監控工具介紹
linux服務器上,可用的監控工具非常非常多,大家只要挑選一種比較全面的,適合自己的,用熟練即可。這裏我推薦幾款的監控工具:
- 命令行的
- nmon
Nmon是Nigel’s Monitor縮寫,它最早開發用來作爲AIX的系統監控工具。如果使用在線模式,可以使用光標鍵在屏幕上操作實時顯示在終端上的監控信息。使用捕捉模式能夠將數據保存爲CSV格式,方便進一步的處理和圖形化展示。它能提供實施全面的系統參數情況,非常不錯。
下面是nmoon對系統實時採集的數據監控:
2. top類
top類提供了各種各樣的相關監控,例如:監控流量的iftop、磁盤I/O的iotop、apache的apachetop、ftp上傳和下載的ftptop、mysql的mytop等等。
- 圖形化的
專業化的監控工具不僅提供了指標的監控,而且具備完整的生態圈,自定義觸發器和自定義監控告警等等,例如下面兩個非常著名的監控工具:
- Nagios
Nagios提供對多種操作系統和發行版的完整監控 - 包括操作系統指標,服務狀態,進程狀態,文件系統使用情況等。當您使用Nagios監控Linux環境時,您正在使用地球上最強大的Linux監控工具之一。 - Zabbix
Zabbix 是一個免費的企業級分佈式開源監控解決方案。
Zabbix 軟件能夠監控衆多網絡參數和服務器的健康度、完整性。Zabbix 使用靈活的告警機制,允許用戶爲幾乎任何事件配置基於郵件的告警。這樣用戶可以快速響應服務器問題。Zabbix 基於存儲的數據提供出色的報表和數據可視化功能。這些功能使得 Zabbix 成爲容量規劃的理想選擇。
Zabbix 支持主動輪詢和被動捕獲。所有的 Zabbix 報告、統計信息和配置參數都可以通過基於 Web 的前端頁面進行訪問。基於 Web 的前端頁面確保您的網絡狀態和服務器健康狀況等可以從任何地方訪問。在經過適當的配置後,Zabbix 可以在監控 IT 基礎設施方面發揮重要作用。無論是對於擁有少量服務器的小型組織,還是擁有大量服務器的大型公司而言,同樣適用。
中文文檔地址:https://www.zabbix.com/documentation/4.0/zh/manual/introduction/about
另外,各種層出不窮的監控工具還有很多,大家可以自行去尋找,只要能解決問題的,都是好的。接下來我們將一起看下,各種指標監控觸發閾值之後,應該如何應對和排查問題。