天天看點

談談監控(轉)

目錄

<a href="http://192.168.6.2/journal/monitor.html#background">1. 背景</a>

<a href="http://192.168.6.2/journal/monitor.html#overview">2. 概述</a>

<a href="http://192.168.6.2/journal/monitor.html#how">3. 怎樣監控</a>

<a href="http://192.168.6.2/journal/monitor.html#idp50309520">3.1. 衛星監測</a>

<a href="http://192.168.6.2/journal/monitor.html#idp50311952">3.2. 逐級診斷</a>

<a href="http://192.168.6.2/journal/monitor.html#idp50315024">3.3. 模拟人工</a>

<a href="http://192.168.6.2/journal/monitor.html#idp50318112">3.4. 資料分析</a>

<a href="http://192.168.6.2/journal/monitor.html#idp50319984">3.5. 監控與開發</a>

<a href="http://192.168.6.2/journal/monitor.html#summary">4. 總結</a>

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

什麼事初級階段呢?

被動監控,故障發生運維人員永遠不是第一個發現故障的人

監控IP位址與TCP端口,很多時候HTTP 80端口正常接受請求,但WEB伺服器不能正常工作。

人肉監控(人肉運維),采用人海戰術,桌面擺放很多顯示器,甚至投影儀,要求監控者盯着各種儀表闆界面,制定各種工作流程以及KPI考核監控人員。

人肉測試,要求監控人員每間隔幾分鐘人工操作一次,以确認系統正常工作,例如(沒15分鐘登陸一次,下一筆頂單,做一次支付等等)。

萬能的重新開機,定其重新開機所有的伺服器。

什麼事中級階段呢?

報警:手機短信更靠譜,因為手機随身攜帶(郵件不算,郵件到達速度慢,各種因素不穩定)

監控服務:探測服務的可用性,而不是僅僅監控端口,注意我是指私有協定的監控(HTTP,SMTP,FTP,MySQL 不算在内)

故障分析:通過日志與調試工具分析軟體BUG,指導開發人員改善軟體品質,使其故障不會再次發生,達到不用restart重新開機方式解決故障

半自動化測試

什麼事進階階段呢? 我認為進階階段是監控與災備系統打通融合一體。除此之外監控與開發密切相關,在開發階段需要為監控資料采集做鋪墊,每開發一個新功能就要想到未來這個功能是否需要監控,怎樣監控。資料前期采集與資料挖掘非常重要,監控不僅能做軟體與硬體的性能分析,還能提供決策支援。

你在百度上搜尋監控多半是一些開源或商業軟體的安裝配置指南。這些文章中會告訴你怎樣監控CPU、記憶體、硬碟空間以及網絡IP位址與端口号碼。

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

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

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

通常是通過IP位址通路遠端主機,實施監控,常用方法是SNMP,SSH,以及各種Agent(代理),方式是請求然後接收傳回結果,通過結果判斷主機狀态。

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

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

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

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

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

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

Windows 監控可以通過 Windows Automation API實作,通過程式控制,能夠模拟人工操作軟體,實作操作比對傳回結果實作自動化監控

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

通過資料分析,将故障消滅在故障發生前。舉一個例子,開發人員忘記設定redis 時間,雖然程式一直完好工作,但redis記憶體不斷增長,總一天會出現故障。

我們通過采集redis狀态資訊,分析一段時間内資料變化發現了這個問題。

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

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

你可以通過日志形式或者管道,再或者Socket将程式的運作狀态提供給監控采集程式。

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

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

繼續閱讀