概要
為什么要做監(jiān)控
線上發(fā)布了服務(wù),怎么知道它一切正常,比如發(fā)布5臺(tái)服務(wù)器袭艺,如何直觀了解是否有請(qǐng)求進(jìn)來,訪問一切正常奶栖。
當(dāng)年有一次將線上的庫配置到了Beta匹表,這么低級(jí)的錯(cuò)誤,排錯(cuò)花了一個(gè)通宵宣鄙,十幾個(gè)人袍镀。
某個(gè)核心服務(wù)掛了,導(dǎo)致大量報(bào)錯(cuò)冻晤,如何確定到底是哪里出了問題苇羡。
SOA帶來的問題,調(diào)用XX服務(wù)出問題鼻弧,很慢设江,是否可以衡量?
由于業(yè)務(wù)系統(tǒng)數(shù)量大攘轩,每天都會(huì)產(chǎn)生大量的系統(tǒng)日志和業(yè)務(wù)日志叉存,單流式業(yè)務(wù)的一臺(tái)服務(wù)器產(chǎn)生的日志達(dá)400M 想直接查看內(nèi)容打開可能幾分鐘,而且內(nèi)容之多根本無法查看度帮,給開發(fā)和運(yùn)維帶來諸多不便歼捏,現(xiàn)業(yè)務(wù)都是分布式的,日志也是分布在每臺(tái)服務(wù)器上笨篷,所以查看日志和統(tǒng)計(jì)更是效率低下瞳秽。實(shí)時(shí)收集分布在不同節(jié)點(diǎn)或機(jī)器上的日志,供離線或在線查閱及分析來提升工作效率的需求異常迫切率翅,在此背景下练俐,特對(duì)公司統(tǒng)一日志平臺(tái)進(jìn)行初步架構(gòu)設(shè)計(jì)。
在信息化時(shí)代冕臭,日志的價(jià)值是無窮的腺晾。為了對(duì)系統(tǒng)進(jìn)行有效的監(jiān)控、維護(hù)辜贵、優(yōu)化丘喻、改進(jìn),都離不開對(duì)日志的收集和分析念颈,接下來我們來看看秉著“短平快”的互聯(lián)網(wǎng)精神,構(gòu)建的這套適合現(xiàn)有業(yè)務(wù)系統(tǒng)的統(tǒng)一日志平臺(tái)连霉,總體分為業(yè)務(wù)日志監(jiān)控平臺(tái)和軟硬件服務(wù)監(jiān)控平臺(tái)榴芳。
業(yè)務(wù)日志平臺(tái)總體設(shè)計(jì)
以上是最終的一個(gè)最終的一個(gè)架構(gòu)規(guī)劃嗡靡,統(tǒng)一日志監(jiān)控系統(tǒng)負(fù)責(zé)將所有系統(tǒng)日志和業(yè)務(wù)日志集中,再通過flume或logstash上傳到日志中心(kafka集群)窟感,然后供Storm讨彼、Spark及其它系統(tǒng)實(shí)時(shí)分析處理日志,或直接將日志持久化存儲(chǔ)到HDFS供離線數(shù)據(jù)分析處理柿祈,或?qū)懭隕lasticSearch提供數(shù)據(jù)查詢哈误,或直接發(fā)起異常報(bào)警或提供指標(biāo)監(jiān)控查詢。
根據(jù)現(xiàn)有業(yè)務(wù)量來看躏嚎,以上架構(gòu)有點(diǎn)“重”蜜自,可以作為以后的目標(biāo),現(xiàn)階段來說可以參考以下架構(gòu):
以上內(nèi)容皆以配置為主卢佣,對(duì)現(xiàn)有業(yè)務(wù)沒有影響重荠,針對(duì)于Windows環(huán)境可以用FileBeat監(jiān)控本地日志全量、增量的上傳日志虚茶,對(duì)于一些穩(wěn)定的日志戈鲁,比如系統(tǒng)日志或框架日志(如HAproxy訪問日志、系統(tǒng)異常日志等)嘹叫,通過rsyslog寫到本地目錄local0婆殿,然后logstash根據(jù)其配置,會(huì)將local0中的增量日志上傳到日志中心罩扇。Java環(huán)境下可以采用log4j直接發(fā)送到Logstash婆芦。
日志處理層
可以在Logstash中對(duì)日志作簡單的分類加工處理再發(fā)送出去。
我們可以將日志聚合暮蹂,根據(jù)業(yè)務(wù)不同寞缝,建立不同的索引,存入ElasticSearch提供查詢仰泻。 發(fā)現(xiàn)異常日志時(shí)荆陆,發(fā)往監(jiān)控中心,向?qū)?yīng)的業(yè)務(wù)方發(fā)起報(bào)警集侯,發(fā)現(xiàn)和預(yù)發(fā)問題的實(shí)時(shí)性提高了被啼。統(tǒng)計(jì)一些訪問日志或調(diào)用日志等指標(biāo)信息,發(fā)往監(jiān)控中心來掌握相關(guān)調(diào)用趨勢棠枉。調(diào)用鏈開始做起來了浓体,系統(tǒng)性能瓶頸一目了然了。
日志存儲(chǔ)層
ElosticSearch中按照不同業(yè)務(wù)建索引主題(數(shù)據(jù)庫)辈讶,業(yè)務(wù)里面再按照需求建類型(表)命浴,不需要的歷史數(shù)據(jù)可按需要持久化到HDFS,以減少ES的壓力。
展示層Kibana
Kibana是ELK中的組件生闲,是一個(gè)針對(duì)Elasticsearch的開源分析及可視化平臺(tái)媳溺,用來搜索、查看交互存儲(chǔ)在Elasticsearch索引中的數(shù)據(jù)碍讯。使用Kibana悬蔽,可以通過各種圖表進(jìn)行高級(jí)數(shù)據(jù)分析及展示。
Kibana讓海量數(shù)據(jù)更容易理解捉兴。它操作簡單蝎困,基于瀏覽器的用戶界面可以快速創(chuàng)建儀表板(dashboard)實(shí)時(shí)顯示Elasticsearch查詢動(dòng)態(tài)。
Kibana可以非常方便地把來自Logstash倍啥、ES-Hadoop禾乘、Beats或第三方技術(shù)的數(shù)據(jù)整合到Elasticsearch,支持的第三方技術(shù)包括Apache?Flume逗栽、Fluentd等盖袭。
監(jiān)控ES的整體健康狀態(tài)
直接查詢ES索引內(nèi)容
簡單的查詢過濾日志數(shù)據(jù)窗口
可實(shí)時(shí)的圖形統(tǒng)計(jì)展示
采用ElastAlert實(shí)現(xiàn)日志監(jiān)控告警
平臺(tái)缺失針對(duì)mysql連接數(shù)的告警,指定業(yè)務(wù)如流式服務(wù)數(shù)據(jù)異常彼宠,當(dāng)異常觸發(fā)時(shí)能夠及時(shí)通過短信鳄虱、郵件等方式通知相關(guān)負(fù)責(zé)人員
如故障信息:
以上說的“日志”不僅限于日志信息,也可以是業(yè)務(wù)數(shù)據(jù)凭峡。
軟硬件服務(wù)監(jiān)控平臺(tái)設(shè)計(jì)
當(dāng)業(yè)務(wù)層日志發(fā)現(xiàn)異常時(shí)如保存數(shù)據(jù)到Mysql時(shí)經(jīng)常性報(bào)連接數(shù)據(jù)庫超時(shí)拙已,只有當(dāng)業(yè)務(wù)人中發(fā)現(xiàn)再通知我們時(shí)已經(jīng)過了一段時(shí)間才發(fā)現(xiàn)問題,但已無法重現(xiàn)當(dāng)時(shí)的生產(chǎn)環(huán)境摧冀,也就靠經(jīng)驗(yàn)來猜原因是服務(wù)器的網(wǎng)絡(luò)問題還是數(shù)據(jù)庫的真實(shí)連接滿了還是程序的寫法出現(xiàn)問題倍踪,因此就需要監(jiān)控當(dāng)時(shí)生產(chǎn)環(huán)境的軟硬件監(jiān)控?cái)?shù)據(jù)。
經(jīng)過多方咨詢參考各大廠的監(jiān)控方案和對(duì)比在此采用Zabbix作監(jiān)控索昂。
最近各服務(wù)整體問題一覽
針對(duì)Web服務(wù)器和API的訪問性能建车、HAproxy、IIS椒惨、Tomcat
實(shí)時(shí)繪圖監(jiān)控服務(wù)器所有TCP端口的數(shù)量和 MySql數(shù)據(jù)庫連接數(shù)缤至、Redis性能
自定義聚合展示服務(wù)器各指表最近的狀態(tài),CPU、內(nèi)存康谆、流量领斥。
顯示所有服務(wù)器的一個(gè)健康狀況,一目了然
自動(dòng)注冊監(jiān)控新的服務(wù)器
報(bào)警機(jī)制沃暗,Email月洛、微信、短信等
其它特性
可監(jiān)控Linux孽锥、Windows嚼黔、打印機(jī)细层、文件系統(tǒng)、網(wǎng)卡設(shè)備唬涧、 SNMP OID今艺、數(shù)據(jù)庫等平臺(tái)服務(wù)狀態(tài)。
允許靈活地自定義問題閥值爵卒, Zabbix 中稱為觸發(fā)器(trigger), 存儲(chǔ)在后端數(shù)據(jù)庫中。
高級(jí)告警配置撵彻,可以自定義告警升級(jí)(escalation)钓株、接收者及告警方式。
數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫中? 歷史數(shù)據(jù)可配置 內(nèi)置數(shù)據(jù)清理機(jī)制陌僵。
web 前端采用 php 訪問無障礙轴合。
Zabbix API 提供程序級(jí)別的訪問接口,第三方程序可以很快接入碗短。
靈活的權(quán)限系統(tǒng)受葛。
結(jié)合以上業(yè)務(wù)和軟硬件上的日志方便開發(fā)和運(yùn)維實(shí)時(shí)查找問題提高解決問題的效率,而且前期均可只通過配置0代碼就可實(shí)現(xiàn)監(jiān)控和報(bào)表展示偎谁。
擴(kuò)展性
可用Spark對(duì)數(shù)據(jù)實(shí)時(shí)分析总滩,智能攔截異常數(shù)據(jù)和直接發(fā)送異常警報(bào)。
在Zabbix上結(jié)合自己的業(yè)務(wù)需求二次開發(fā)應(yīng)用系統(tǒng)層面上的預(yù)警監(jiān)控系統(tǒng)巡雨。
以后可加入Kafka將日志集中闰渔,至于為什么選用kafka集群來構(gòu)建日志中心,理由主要如下:
1铐望、分布式架構(gòu)冈涧,可支持水平擴(kuò)展。
2正蛙、高吞吐量督弓,在普通的服務(wù)器上每秒鐘也能處理幾十萬條消息(遠(yuǎn)高于我們的峰值1.5萬條/秒)。
3乒验、消息持久化愚隧,按topic分區(qū)存儲(chǔ),支持可重復(fù)消費(fèi)徊件。
4奸攻、可根據(jù)broker配置定期刪除過期數(shù)據(jù)。