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

7.3. 怎樣監控

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

7.3.1. 衛星監測

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

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

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

7.3.2. 逐級診斷

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

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

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

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

7.3.3. 模擬人工

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

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

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

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

7.3.4. 數據分析

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

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

7.3.5. 監控與開發

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

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

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