監(jiān)控是整個(gè)運(yùn)維乃至整個(gè)產(chǎn)品生命周期中最重要的一環(huán),事前及時(shí)預(yù)警發(fā)現(xiàn)故障,事后提供詳實(shí)的數(shù)據(jù)用于追查定位問題。 一、監(jiān)控目標(biāo) 每個(gè)人由于所在的行業(yè)、公司、業(yè)務(wù)、崗位不同,對監(jiān)控的理解也不盡相同,但是我們需要注意,監(jiān)控是需要站在公司的業(yè)務(wù)角度去考慮,而不是針對某個(gè)監(jiān)控技術(shù)的使用。
二、監(jiān)控方法 1.了解監(jiān)控對象:我們要監(jiān)控的對象你是否了解呢?比如CPU到底是如何工作的? 2.性能基準(zhǔn)指標(biāo):我們要監(jiān)控這個(gè)東西的什么屬性?比如CPU的使用率、負(fù)載、用戶態(tài)、內(nèi)核態(tài)、上下文切換。 3.報(bào)警閾值定義:怎么樣才算是故障,要報(bào)警呢?比如CPU的負(fù)載到底多少算高,用戶態(tài)、內(nèi)核態(tài)分別跑多少算高? 4.故障處理流程:收到了故障報(bào)警,我們怎么處理呢?有什么更高效的處理流程嗎? 三、監(jiān)控核心
四、監(jiān)控工具 下面我們需要選擇一款適合公司業(yè)務(wù)的監(jiān)控工具進(jìn)行監(jiān)控,。這里我對監(jiān)控工具進(jìn)行了簡單的分類。 1、老牌監(jiān)控
2、王牌監(jiān)控
3、三方監(jiān)控 現(xiàn)在市場上有很多不錯(cuò)的第三方監(jiān)控,比如:監(jiān)控寶、監(jiān)控易、聽云、還有很多云廠商自帶監(jiān)控,但在這里我不打算著重介紹,如果想了解三方監(jiān)控可自行上官網(wǎng)咨詢。(避免說廣告植入) 五、監(jiān)控流程 上面介紹了這么多,到底選擇什么監(jiān)控工具最合適呢?我這里推薦幾款開源監(jiān)控工具:Zabbix、Open-Falcon、LEPUS天兔(專用于監(jiān)控?cái)?shù)據(jù)庫)。
六、監(jiān)控指標(biāo) 上面了解了監(jiān)控方法、目標(biāo)、流程、也了解了監(jiān)控有哪些工具,可能有人會疑惑,我們具體要監(jiān)控些什么東西,在這里我進(jìn)行了分類整理,包含硬件監(jiān)控、系統(tǒng)監(jiān)控、應(yīng)用監(jiān)控、網(wǎng)絡(luò)監(jiān)控、流量分析、日志監(jiān)控、安全監(jiān)控、API監(jiān)控、性能監(jiān)控、業(yè)務(wù)監(jiān)控。 1、硬件監(jiān)控 早期我們通過機(jī)房巡檢的方式,查看硬件設(shè)備燈光閃爍情況判斷是否故障,這樣非常浪費(fèi)人力,并且是重復(fù)性無技術(shù)含量的工作,大家懂得。 IPMI監(jiān)控硬件服務(wù)參考資料:Zabbix IPMI Interface 2、系統(tǒng)監(jiān)控 中小型企業(yè)基本全是Linux服務(wù)器,那么我們肯定是要監(jiān)控起系統(tǒng)資源的使用情況,系統(tǒng)監(jiān)控是監(jiān)控體系的基礎(chǔ)。 監(jiān)控主要對象: CPU有幾個(gè)重要的概念:上下文切換、運(yùn)行隊(duì)列和使用率。這也是我們CPU監(jiān)控的幾個(gè)重點(diǎn)指標(biāo)。 通常情況,每個(gè)處理器的運(yùn)行隊(duì)列不要高于3,CPU 利用率中用“戶態(tài)/內(nèi)核態(tài)”比例維持在70/30,空閑狀態(tài)維持在50%,上下文切換要根據(jù)系統(tǒng)繁忙程度來綜合考量。 針對CPU常用的工具有:htop、top、vmstat、mpstat、dstat、glances。Zabbix提供系統(tǒng)監(jiān)控模板:Zabbix Agent Interface。 CPU整體狀態(tài) 上下文切換 負(fù)載狀態(tài) 內(nèi)存:通常我們需要監(jiān)控內(nèi)存的使用率、SWAP使用率、同時(shí)可以通過Zabbix描繪內(nèi)存使用率的曲線圖形發(fā)現(xiàn)某服務(wù)內(nèi)存溢出等。 針對內(nèi)存常用的工具有:free、top、vmstat、glances。 內(nèi)存使用率 IO分為磁盤IO和網(wǎng)絡(luò)IO。除了在做性能調(diào)優(yōu)我們要監(jiān)控更詳細(xì)的數(shù)據(jù)外,日常監(jiān)控只關(guān)注磁盤使用率、磁盤吞吐量、磁盤寫入繁忙程度,網(wǎng)絡(luò)也是監(jiān)控網(wǎng)卡流量即可。常用工具有:iostat、iotop、df、iftop、sar、glances。 磁盤使用率 磁盤讀/寫吞吐 網(wǎng)卡進(jìn)出口流量 TCP11種狀態(tài)信息 其它系統(tǒng)監(jiān)控還有運(yùn)行的進(jìn)程端口、進(jìn)程數(shù)、登陸用戶、Open File等(詳細(xì)查看Zabbix自帶OS Linux模板)。 其它相關(guān)監(jiān)控 3、應(yīng)用監(jiān)控 把硬件監(jiān)控和系統(tǒng)監(jiān)控研究明白后,我們進(jìn)一步操作是需要登陸到服務(wù)器上查看服務(wù)器運(yùn)行了哪些服務(wù),都需要監(jiān)控起來。 應(yīng)用服務(wù)監(jiān)控也是監(jiān)控體系中比較重要的內(nèi)容,例如: nginx_status PHP-FPM_status Redis_status JVM監(jiān)控 筆者之前寫過服務(wù)監(jiān)控詳細(xì)的操作過程,這里就不一一展示,詳情訪問:Zabbix監(jiān)控各種應(yīng)用服務(wù)。
4、網(wǎng)絡(luò)監(jiān)控 作為一個(gè)針對全國用戶的電商網(wǎng)站,時(shí)刻掌握各地到機(jī)房的網(wǎng)絡(luò)狀態(tài)也是必須的。 網(wǎng)絡(luò)監(jiān)控是我們構(gòu)建監(jiān)控平臺是必須要考慮的,尤其是針對有多個(gè)機(jī)房的場景,各個(gè)機(jī)房之間的網(wǎng)絡(luò)狀態(tài),機(jī)房和全國各地的網(wǎng)絡(luò)狀態(tài)都是我們需要重點(diǎn)關(guān)注的對象,那如何掌握這些狀態(tài)信息呢?我們需要借助于網(wǎng)絡(luò)監(jiān)控工具Smokeping。 Smokeping 是rrdtool的作者Tobi Oetiker的作品,是用Perl寫的,主要是監(jiān)視網(wǎng)絡(luò)性能,www服務(wù)器性能,DNS查詢性能等,使用rrdtool繪圖,而且支持分布式,直接從多個(gè)agent進(jìn)行數(shù)據(jù)的匯總。 同時(shí),由于自己監(jiān)控點(diǎn)比較少,還可以借助很多商業(yè)的監(jiān)控工具,比如監(jiān)控寶、基調(diào)、博瑞等。同時(shí)這些服務(wù)提供商還可以幫助你監(jiān)控CDN的狀態(tài)。 smokeping 監(jiān)控寶 5、流量分析 網(wǎng)站流量分析對于運(yùn)維人員來說,更是一門必須掌握的知識了。比如對于一家電商公司來說:通過對訂單來源的統(tǒng)計(jì)和分析,可以了解我們在某個(gè)網(wǎng)站上的廣告投入有沒有收到預(yù)期的效果。 可以區(qū)分不同地區(qū)的訪問人數(shù)、甚至商品交易額等。百度統(tǒng)計(jì)、Google分析、站長工具等,只需要在頁面嵌入一個(gè)js即可。 但是,數(shù)據(jù)始終是在對方手中,個(gè)性化定制不方便,于是Google出一個(gè)叫Piwik的開源分析工具。 piwik 百度統(tǒng)計(jì) 6、日志監(jiān)控 通常情況下,隨著系統(tǒng)的運(yùn)行,操作系統(tǒng)會產(chǎn)生系統(tǒng)日志,應(yīng)用程序會產(chǎn)生應(yīng)用程序的訪問日志、錯(cuò)誤日志,運(yùn)行日志,網(wǎng)絡(luò)日志,我們可以使用ELK來進(jìn)行日志監(jiān)控。 對于日志監(jiān)控來說,最見的需求就是收集、存儲、查詢、展示,開源社區(qū)正好有相對應(yīng)的開源項(xiàng)目:Logstash(收集)+ElasticSearch(存儲+搜索)+Kibana(展示)。 我們將這三個(gè)組合起來的技術(shù)稱之為ELK Stack,所以說ELK Stack指的是Elasticsearch、Logstash、Kibana技術(shù)棧的結(jié)合。 如果收集了日志信息,部署更新有異常出現(xiàn),可以立即在Kibana上看到。 ELK日志展示 當(dāng)然也可以通過Zabbix過濾錯(cuò)誤日志來進(jìn)行告警。 Zabbix日志展示 7、安全監(jiān)控 雖然Linux開源的安全產(chǎn)品不少,比如四層iptables,七層WEB防護(hù)Nginx+Lua實(shí)現(xiàn)WAF,最后將相關(guān)的日志都收至ELkstack,通過圖形化進(jìn)行不同的攻擊類型展示。但是始終是一件比較耗費(fèi)時(shí)間,并且個(gè)人效果并不是很好。這個(gè)時(shí)候我們可以選擇接入第三方服務(wù)廠商。 某某三方安全 三方廠商提供全面的漏洞庫,涵蓋服務(wù)、后門、數(shù)據(jù)庫、配置檢測、CGI、SMTP等多種類型。 全面檢測主機(jī)、Web應(yīng)用漏洞自主挖掘和行業(yè)共享相結(jié)合第一時(shí)間更新0-day漏洞,杜絕最新安全隱患。 8、API監(jiān)控 由于API變得越來越重要,很顯然我們也需要這樣的數(shù)據(jù)來分辨我們提供的 API是否能夠正常運(yùn)作。 監(jiān)控API接口GET、POST、PUT、DELETE、HEAD、OPTIONS的請求??捎眯浴⒄_性、響應(yīng)時(shí)間為三大重性能指標(biāo)。 API監(jiān)控 三方API監(jiān)控 響應(yīng)時(shí)間 9、性能監(jiān)控 全面監(jiān)控網(wǎng)頁性能,DNS響應(yīng)時(shí)間、HTTP建立連接時(shí)間、頁面性能指數(shù)、響應(yīng)時(shí)間、可用率、元素大小等。Zabbix提供URL監(jiān)控:Zabbix Web 監(jiān)控。 Zabbix站點(diǎn)監(jiān)控 終端響應(yīng)時(shí)間 第三方監(jiān)控監(jiān)控大盤。各類圖表一目了然,全面體現(xiàn)網(wǎng)頁性能健康狀況。 10、業(yè)務(wù)監(jiān)控 沒有業(yè)務(wù)指標(biāo)監(jiān)控的監(jiān)控平臺,不是一個(gè)完善的監(jiān)控平臺,通常在我們的監(jiān)控系統(tǒng)中,必須將我們重要的業(yè)務(wù)指標(biāo)進(jìn)行監(jiān)控,并設(shè)置閾值進(jìn)行告警通知。比如電商行業(yè): 每分鐘產(chǎn)生多少訂單、每分鐘注冊多少用戶、每天有多少活躍用戶、每天有多少推廣活動(dòng)、推廣活動(dòng)引入多少用戶、推廣活動(dòng)引入多少流量、推廣活動(dòng)引入多少利潤等,重要指標(biāo)都可以加入Zabbix上,然后通過Screen展示。 注:由于業(yè)務(wù)監(jiān)控圖表,涉及到隱私的數(shù)據(jù)太多,就不截圖了。 七、監(jiān)控報(bào)警 故障報(bào)警通知的方式有很多種,當(dāng)然最常用的還是短信和郵件。 短信報(bào)警 郵件報(bào)警 八、報(bào)警處理 一般報(bào)警后故障如何處理,首先我們可以通過告警升級機(jī)制先自動(dòng)處理,比如Nginx服務(wù)down了,可以設(shè)置告警升級自動(dòng)啟動(dòng)Nginx。 但是如果一般業(yè)務(wù)出現(xiàn)了嚴(yán)重故障,我們通常根據(jù)故障的級別、業(yè)務(wù),來指派不同的運(yùn)維人員進(jìn)行處理。 當(dāng)然不同業(yè)務(wù)形態(tài)、不同架構(gòu)、不同服務(wù)可能采用的方式都不同,這個(gè)沒有一個(gè)固定的模式套用。 九、面試監(jiān)控 在運(yùn)維面試中,常常會被問題監(jiān)控相關(guān)的問題,這個(gè)問題到底該如何來回答,我針對本文給大家提供了一個(gè)簡單的回答思路 1、硬件監(jiān)控 通過SNMP來進(jìn)行路由器交換機(jī)的監(jiān)控(這些可以跟一些廠商溝通來了解如何做)、服務(wù)器的溫度以及其它,可以通過IPMI來實(shí)現(xiàn)。當(dāng)然如果沒有硬件全都是云,直接跳過這一步驟。 2、系統(tǒng)監(jiān)控 如CPU的負(fù)載,上下文切換、內(nèi)存使用率、磁盤讀寫、磁盤使用率、磁盤inode使用率。當(dāng)然這些都是需要配置觸發(fā)器,因?yàn)槟J(rèn)太低會頻繁報(bào)警。 3、服務(wù)監(jiān)控 比如公司用的LNMP架構(gòu),Nginx自帶Status模塊、PHP也有相關(guān)的Status、MySQL的話可以通過Percona官方工具來進(jìn)行監(jiān)控。Redis這些通過自身的info獲取信息進(jìn)行過濾等。方法都類似。要么服務(wù)自帶。要么通過腳本來實(shí)現(xiàn)想監(jiān)控的內(nèi)容,以及報(bào)警和圖形功能。 4、網(wǎng)絡(luò)監(jiān)控 如果是云主機(jī)又不是跨機(jī)房,那么可以選擇不監(jiān)控網(wǎng)絡(luò)。當(dāng)然你說我們是跨機(jī)房以及如何如何,推薦使用smokeping來做網(wǎng)絡(luò)相關(guān)的監(jiān)控,或者直接交給你們的網(wǎng)絡(luò)工程師來做,因?yàn)樾g(shù)業(yè)有專攻。 5、安全監(jiān)控 如果是云主機(jī)可以考慮使用自帶的安全防護(hù)。當(dāng)然也可以使用iptables。如果是硬件,那么推薦使用硬件防火墻。使用云可以購買防DDOS,避免出現(xiàn)故障導(dǎo)致down機(jī)一天。如果是系統(tǒng),那么權(quán)限、密碼、備份、恢復(fù)等基礎(chǔ)方案要做好。Web同時(shí)也可以使用Nginx+Lua來實(shí)現(xiàn)一個(gè)Web層面的防火墻。當(dāng)然也可以使用集成好的OpenResty。 6、Web監(jiān)控 Web監(jiān)控的話題其實(shí)還是很多。比如可以使用自帶的Web監(jiān)控來監(jiān)控頁面相關(guān)的延遲、js響應(yīng)時(shí)間、下載時(shí)間、等等。這里我推薦使用專業(yè)的商業(yè)軟件監(jiān)控寶或聽云來實(shí)現(xiàn)。畢竟人家全國各地都有機(jī)房(如果本身是多機(jī)房那就另說了)。 7、日志監(jiān)控 如果是Web的話可以使用監(jiān)控Nginx的50x、40x的錯(cuò)誤日志,PHP的ERROR日志。其實(shí)這些需求無非是,收集、存儲、查詢、展示,我們其實(shí)可以使用開源的ELKStack來實(shí)現(xiàn)。Logstash(收集)、Elasticsearch(存儲+搜索)、Kibana(展示)。 8、業(yè)務(wù)監(jiān)控 上面做了那么多,其實(shí)最終還是保證業(yè)務(wù)的運(yùn)行。這樣我們做的監(jiān)控才有意義。所以業(yè)務(wù)層面這塊的監(jiān)控需要和開發(fā)以及總監(jiān)開會討論,監(jiān)控比較重要的業(yè)務(wù)指標(biāo),(需要開會確認(rèn))然后通過簡單的腳本就可以實(shí)現(xiàn),最后設(shè)置觸發(fā)器即可 。 9、流量分析 平時(shí)我們分析日志都是拿awk sed xxx一堆工具來實(shí)現(xiàn)。這樣對我們統(tǒng)計(jì)IP、PV、UV不是很方便。那么可以使用百度統(tǒng)計(jì)、Google統(tǒng)計(jì)、商業(yè),讓開發(fā)嵌入代碼即可。為了避免隱私也可以使用Piwik來做相關(guān)的流量分析。 10、可視化 通過Screen以及引入一些第三方的庫來美化界面,同時(shí)我們也需要知道,訂單量突然增加、突然減少?;蛘哒f突然來了一大波流量,這流量從哪兒來,是不是推廣了,還是被攻擊了??梢越Y(jié)合監(jiān)控平來梳理各個(gè)系統(tǒng)之間的業(yè)務(wù)關(guān)系。 11、自動(dòng)化監(jiān)控 如上我們做了那么多的工作,當(dāng)然不能是一臺一臺的來加key實(shí)現(xiàn)??梢酝ㄟ^Zabbix的主動(dòng)模式以及被動(dòng)模式來實(shí)現(xiàn)。當(dāng)然最好還是通過API來實(shí)現(xiàn)。 總結(jié) 真正想做到更完整的監(jiān)控體系,目前的開源軟件確實(shí)無法很好地滿足,有條件的公司都開始自己開發(fā)自己的監(jiān)控系統(tǒng),比如小米開源的Open-Falcon。 也有比較好的開源的監(jiān)控框架如Sensu等,再加上InfluxDB、Grafana可以用來定制符合自己企業(yè)的監(jiān)控平臺。 |
|