Home | 簡體中文 | 繁體中文 | 雜文 | 知乎專欄 | Github | OSChina 博客 | 雲社區 | 雲棲社區 | Facebook | Linkedin | 視頻教程 | 打賞(Donations) | About
知乎專欄多維度架構 | 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者”

12.6. 監控的藝術

12.6.1. 背景

每個企業都意識到監控工作的重要性,但80%企業的監控工作仍然處在監控的初級階段。

什麼是初級階段呢?

  1. 被動監控,故障發生運維人員永遠不是第一個發現故障的人
  2. 監控IP地址與TCP連接埠,很多時候HTTP 80連接埠正常接受請求,但WEB伺服器不能正常工作。
  3. 人肉監控(人肉運維),採用人海戰術,桌面擺放很多顯示器,甚至投影儀,要求監控者盯着各種儀表板界面,制定各種工作流程以及KPI考核監控人員。
  4. 人肉測試,要求監控人員每間隔幾分鐘人工操作一次,以確認系統正常工作,例如(沒15分鐘登陸一次,下一筆頂單,做一次支付等等)。
  5. 萬能的重啟,定其重啟所有的伺服器。

什麼是中級階段呢?

  1. 報警:手機短信更靠譜,因為手機隨身攜帶(郵件不算,郵件到達速度慢,各種因素不穩定)
  2. 監控服務:探測服務的可用性,而不是僅僅監控連接埠,注意我是指私有協議的監控(HTTP,SMTP,FTP,MySQL 不算在內)
  3. 故障分析:通過日誌與調試工具分析軟件BUG,指導開發人員改善軟件質量,使其故障不會再次發生,達到不用restart重啟方式解決故障
  4. 半自動化測試

什麼是高級階段呢?

  1. 我認為高級階段是監控與災備系統打通融合一體。
  2. 除此之外監控與開發密切相關,在開發階段需要為監控數據採集做鋪墊,每開發一個新功能就要想到未來這個功能是否需要監控,怎樣監控。
  3. 數據前期採集與數據挖掘非常重要,監控不僅能做軟件與硬件的性能分析,還能提供決策支持,這裡又涉及了BI。
  4. 除了監控,另一個息息相關的是自動故障轉移,有興趣可以看看我的其他文章 http://netkiller.github.io/journal/

監控從初級向中繼再到高級,是轉被動到主動,從人工到自動化。

監控不應該侷限在硬件與服務,還應該延伸到業務領域。

12.6.2. 概述

你在百度上搜索監控多半是一些開源或商業軟件的安裝配置指南。這些文章中會告訴你怎樣監控CPU、內存、硬碟空間以及網絡IP地址與連接埠號碼。

開源軟件無非是 Nagios, Cacti, Mrtg, Zibbix ..... 這些軟件在我的電子出書《Netkiller Monitoring 手札》中都有詳細說明安裝與配置方法。

商業軟件也有很多如 SolarWinds, Whit's Up,PRTG ......

所有的伺服器,網絡設備,監控你都做了,那麼按照我上面的監控分級,你處于監控的那個階段?

12.6.3. 怎樣監控

監控都有哪些手段跟方式呢?

12.6.3.1. 衛星監測

中心衛星站為中心站點向外放射,通常是通過IP地址訪問遠程主機,實施監控,常用方法是SNMP,SSH,以及各種Agent(代理),方式是請求然後接收返回結果,通過結果判斷主機狀態。

			
      Monitor Server
            |
-------------------------------
  |         |           |
[Web]    [Mail]    [Database]
			
			

以監控伺服器為中心,星型散射連接其他監控節點,沒有什麼優點,缺點是Web跟Mail節點的通信沒有監控

12.6.3.2. 逐級診斷

一級一級的向下探測,尋找故障點,需要在各個節點埋探針。

			
      Monitor Server
              |
-------------------------------      
  |           |             |
  V           V             V
  |           |             |
[Web] ---> [Cache] ---> [Database]
  \                         ^
   `------------------------|			
			
			

首先監控伺服器跟星型拓撲一樣監控,再讓Web節點去訪問Cache節點然後返回監控結果,以此類推,讓Cache節點訪問Database, 讓Web訪問Database節點。

將所有業務邏輯都逐一模擬一次,任何一個環節出現問題,立即發出警告。

12.6.3.3. 模擬人工

這裡主要監控服務是否可用,可以檢查軟件的工作情況,涉及測試環節。

通過自動化測試工具輔助監控,例如模擬滑鼠點擊,鍵盤輸入,可以監控圖形界面程序與網頁程序。

Windows 監控可以通過 Windows Automation API實現,通過程序控制,能夠模擬人工操作軟件,實現操作匹配返回結果實現自動化監控

Web頁面監控的方案就太多了,比較經典的是Webdriver衍生出的各種工具Selenium - Web Browser Automation最為出名。我通過這個工具模擬用戶操作,例如用戶註冊,登陸,發帖,下單等等,然後匹配返回結果實現自動化監控與報警

12.6.3.4. 數據分析

通過數據分析,將故障消滅在故障發生前。舉一個例子,開發人員忘記設置redis 時間,雖然程序一直完好工作,但redis內存不斷增長,總一天會出現故障。

我們通過採集redis狀態信息,分析一段時間內數據變化發現了這個問題。

12.6.3.5. 監控與開發

談到監控很多人認為這是運維的事情,實則不然,不懂運維的測試不是好開發。

開發過程中需要考慮到監控,例如Nginx的status模組, MySQL的show status命令, Redis的info命令,都是為監控預留的。那麼你開發的程序是否考慮到了監控這塊呢?

你可以通過日誌形式或者管道,再或者Socket將程序的運行狀態提供給監控採集程序。

12.6.4. 總結

好的監控的能讓你對系統瞭如指掌,做到心裡有數。有數據才好說話。