談談監控(轉)

 

1. 背景

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

什麼事初級階段呢?
  1. 被動監控,故障發生運維人員永遠不是第一個發現故障的人
  2. 監控IP地址與TCP端口,不少時候HTTP 80端口正常接受請求,但WEB服務器不能正常工做。
  3. 人肉監控(人肉運維),採用人海戰術,桌面擺放不少顯示器,甚至投影儀,要求監控者盯着各類儀表板界面,制定各類工做流程以及KPI考覈監控人員。
  4. 人肉測試,要求監控人員每間隔幾分鐘人工操做一次,以確認系統正常工做,例如(沒15分鐘登錄一次,下一筆頂單,作一次支付等等)。
  5. 萬能的重啓,定其重啓全部的服務器。
什麼事中級階段呢?
  1. 報警:手機短信更靠譜,由於手機隨身攜帶(郵件不算,郵件到達速度慢,各類因素不穩定)
  2. 監控服務:探測服務的可用性,而不是僅僅監控端口,注意我是指私有協議的監控(HTTP,SMTP,FTP,MySQL 不算在內)
  3. 故障分析:經過日誌與調試工具分析軟件BUG,指導開發人員改善軟件質量,使其故障不會再次發生,達到不用restart重啓方式解決故障
  4. 半自動化測試

什麼事高級階段呢? 我認爲高級階段是監控與災備系統打通融合一體。除此以外監控與開發密切相關,在開發階段須要爲監控數據採集作鋪墊,每開發一個新功能就要想到將來這個功能是否須要監控,怎樣監控。數據前期採集與數據挖掘很是重要,監控不只能作軟件與硬件的性能分析,還能提供決策支持。ios

除了監控,另外一個息息相關的是自動故障轉移,有興趣能夠看看個人其餘文章 http://netkiller.github.io/journal/git

2. 概述

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

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

商業軟件也有不少如 SolarWinds, Whit's Up,PRTG ......redis

全部的服務器,網絡設備,監控你都作了,那麼按照我上面的監控分級,你處於監控的那個階段?服務器

3. 怎樣監控

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

3.1. 衛星監測

一般是經過IP地址訪問遠程主機,實施監控,經常使用方法是SNMP,SSH,以及各類Agent(代理),方式是請求而後接收返回結果,經過結果判斷主機狀態。運維

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

以監控服務器爲中心,星型散射鏈接其餘監控節點,沒有什麼優勢,缺點是Web跟Mail節點的通訊沒有監控工具

3.2. 逐級診斷

這個詞是我想出來的,不知道是否確切,一級一級的向下探測,尋找故障點

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

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

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

3.3. 模擬人工

這裏主要監控服務是否可用,能夠檢查軟件的工做狀況,涉及測試環節。

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

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

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

3.4. 數據分析

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

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

3.5. 監控與開發

談到監控不少人認爲這是運維的事情,實則否則,不懂運維的測試不是好開發。

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

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

4. 總結

好的監控的能讓你對系統瞭如指掌,作到內心有數。有數據纔好說話。

http://netkiller-github-com.iteye.com/blog/2190593

相關文章
相關標籤/搜索