云信私有化方案中如何搭建高可用的日志和监控平台?
導(dǎo)讀
云信公有云系列產(chǎn)品已經(jīng)穩(wěn)定運行數(shù)年,隨著企業(yè)對信息安全和數(shù)據(jù)隔離愈加重視,云信產(chǎn)品私有化課題必然成為云信發(fā)展過程中一個的重要分支。依賴虛擬化和容器技術(shù)的日臻成熟,云信業(yè)務(wù)系統(tǒng)已經(jīng)全面完成私有化,并且在多家企業(yè)內(nèi)部穩(wěn)定運行,成為云信產(chǎn)品線重要的一部分。
在公有云的服務(wù)中,云信日志信息采集和系統(tǒng)監(jiān)控報警是依賴網(wǎng)易多年技術(shù)沉淀下來的自研平臺,然而對于云信私有化產(chǎn)品來說這套自研平臺顯得過于繁雜,同時相對于公有云,私有化產(chǎn)品由于搭建在企業(yè)內(nèi)部的特殊性往往具有網(wǎng)絡(luò)上的隔離,云信技術(shù)支持人員不易直接訪問私有化環(huán)境,而企業(yè)運維人員對云信系統(tǒng)了解程度又相對有限。因此私有化產(chǎn)品需要搭建一套更輕量級同時又具備高可用的日志和監(jiān)控平臺來向企業(yè)內(nèi)部的運維人員實時展示服務(wù)狀態(tài)和運行數(shù)據(jù)并作出預(yù)警。
本文將詳述云信私有化日志監(jiān)控服務(wù)端架構(gòu),如果你需要為自己的產(chǎn)品搭建日志采集和監(jiān)控平臺,這篇文章可以作為參考。
云信私有化主要技術(shù)
在開始介紹日志監(jiān)控平臺,我們先初步了解一下云信私有化整體方案以及所使用的技術(shù)棧。現(xiàn)在云信公有云產(chǎn)品本身涉及的模塊眾多,技術(shù)架構(gòu)和編程語言不同,依賴的環(huán)境和網(wǎng)絡(luò)也有所區(qū)別,因此我們在云信私有化中使用docker來實現(xiàn)各個模塊的封裝和運行時資源隔離;在容器的部署和管理上我們沒有選擇經(jīng)常在大型容器云平臺中出現(xiàn)的Kubernetes,而采用了更輕量級的運維部署工具ansible,主要有兩個原因:
一是私有化企業(yè)用戶量級絕大大多數(shù)在10w以下級別,這對于企業(yè)和企業(yè)延伸服務(wù)已經(jīng)是非常大規(guī)模,因此在私有化過程中,企業(yè)能提供的資源往往有限,可能只有幾臺甚至一臺服務(wù)器,而部署一套Kubernetes會為企業(yè)帶來額外的資源開銷;
二是服務(wù)集群實時動態(tài)調(diào)整在私有化交付后對于企業(yè)自身運維人員往往并不需要,企業(yè)需要的只是在約定規(guī)模下云信能夠高效運行,Kubernetes所提供的資源調(diào)度和節(jié)點控制對于私有化顯得過于復(fù)雜和沉重。因此我們選擇通過Ansible協(xié)同的多機同步控制處理框架并結(jié)合python擴展開發(fā)可視化部署管理平臺,實現(xiàn)云信私有化的統(tǒng)一快速部署和管理。
日志和監(jiān)控平臺主要需求
1.高性能:滿足云信私有化方案中運行數(shù)據(jù)和日志收集;
2.高可用保障:日志平臺具備一定高可用能力,單一節(jié)點或網(wǎng)絡(luò)出現(xiàn)故障,業(yè)務(wù)系統(tǒng)有能力繼續(xù)采集和監(jiān)控;
3.平臺實時監(jiān)控和報警:可視化的系統(tǒng)和模塊信息監(jiān)控,當系統(tǒng)網(wǎng)絡(luò)資源,服務(wù)狀態(tài)出現(xiàn)異常時及時做出報警;
4.日志系統(tǒng)安全性:保障平臺日志和運營數(shù)據(jù)安全;
ELK基本組件簡介
下面是通過一張基本的ELK最基本架構(gòu)圖來說明一下ELK Stack的主要組件和架構(gòu)
Elasticsearch是個開源分布式搜索引擎,具有分布式,零配置,自動發(fā)現(xiàn),索引自動分片,索引副本機制,restful風(fēng)格接口,多數(shù)據(jù)源,自動搜索負載等特點。作為ELK的核心組件負責(zé)日志存儲、檢索和分析
Logstash 是一個具有實時渠道能力的數(shù)據(jù)收集引擎,在filter中可以很好的對數(shù)據(jù)進行預(yù)處理。
Kibana 是一款專門為 Elasticsearch 提供分析和可視化的 Web 平臺。它可以在 Elasticsearch 的索引中查找,交互數(shù)據(jù),并生成各種維度的表圖。
Metricbeat&Filebeat
Beats負責(zé)ELK協(xié)議棧中數(shù)據(jù)采集部分,收集系統(tǒng)信息和日志向 Logstash 或 Elasticsearch 發(fā)送數(shù)據(jù)。Filebeat主要收集日志文件,可以初步檢索和過濾日志信息,Metricbeat從系統(tǒng)和服務(wù)收集指標。
私有化日志平臺架構(gòu)
私有化所有模塊均為容器化部署。由于部署在企業(yè)內(nèi)部,技術(shù)支持維護不便,因此每個模塊都要具備高可用特性。ElasticSearch采用集群化部署,es集群部署已經(jīng)有成熟的解決方案,可參照官網(wǎng)或簡書等網(wǎng)上內(nèi)容。在nginx的部署上采用keeplived通過虛擬IP地址(VIP)實現(xiàn)高可用,備用服務(wù)的keepalived在主機宕機的情況會做出檢測并自動接管VIP資源繼續(xù)提供服務(wù)。
在大型企業(yè)中或使用場景中有明顯業(yè)務(wù)高峰的企業(yè),在實施部署時可增加高性能消息中間件kafka在logstash之前作為消息隊列緩沖。
使用Supervisor管理elk進程
除了在部署方案中支持組件高可用方案,私有化采用Supervisor作為進程管理,并隨elk組件一同封裝在鏡像中。當所管理的進程意外掛掉,Supervisor會自動將其重新拉起,很方便的做到進程自動恢復(fù)的功能。
Supervisor配置文件實例
使用nginx 的IP白名單實現(xiàn)訪問控制
Elk三大組件本身并不具有太多的安全相關(guān)設(shè)置,官方的相關(guān)的X-pack組件目前雖然已經(jīng)開源,但是免費版功能使用上有很多限制,因此我們需要通過引入Nginx控制訪問IP白名單來對日志平臺進行安全加固。這一點也可以通過宿主機配置防火墻來實現(xiàn),但是在私有化服務(wù)中,企業(yè)對于宿主機的防火墻管理差異很大,有些企業(yè)對防火墻管理基本一片空白,因此在鏡像中使用Nginx作為反向代理在服務(wù)層進行白名單管理,使容器中的elk組件和Nginx作為整體提供服務(wù)是一個不錯的選擇,ELK組件均綁定本機的IP地址,Nginx作為對外訪問出口,相當于為組件提供了白名單管理功能。
容器結(jié)構(gòu)如下,與上一段內(nèi)容相比加入nginx管理IP白名單,同樣是使用supervior對進程進行管理。
除了管理白名單,elasticsearch還有一些其他工作可以加固安全
- 修改默認elasticsearch的集群名;
- 過期索引自動清理,確保使用磁盤空間;
- ES配置綁定內(nèi)網(wǎng)ip,防止多網(wǎng)卡時數(shù)據(jù)走外網(wǎng)網(wǎng)卡;
- 關(guān)閉ES中使用接口通過正則表達式批量刪除索引,配置項如下;
開發(fā)定制化的系統(tǒng)信息收集工具
通過對Metricbeat進行功能擴展是一個私有化中收集模塊信息的好途徑。Metricbeat作為ELK Stack用來采集和統(tǒng)計系統(tǒng)和應(yīng)用信息的工具,已經(jīng)整合包括系統(tǒng)信息,常用中間件信息,進程級別資源使用數(shù)據(jù)等模塊,并且集成了精美的kibana圖表。Metricbeat使用GO語言編寫,接口清晰,適合通過二次開發(fā)增加個性化業(yè)務(wù)信息采集模塊。
我們在二次開發(fā)過程中很好的利用公有云服務(wù)原有的服務(wù)監(jiān)控接口和信息采集腳本以及系統(tǒng)指令,在模塊中只封裝了幾個不同類型的指令調(diào)用接口,通過配置文件來配置模塊具體調(diào)用腳本或指令并解析數(shù)據(jù)結(jié)果,把二次開發(fā)代碼量降到最低。
在容器化過程中,metricbeat和filebeat兩個采集模塊均被集成在基礎(chǔ)鏡像中,其他鏡像均基于基礎(chǔ)鏡像構(gòu)建。在部署創(chuàng)建容器時,根據(jù)業(yè)務(wù)來生成的配置控制不同的采集指標
使用ElastAlert作為平臺報警
ElastAlert是一款開源的使用python開發(fā)的elasticsearch報警工具,部署使用時需要注意所對應(yīng)elasticsearch版本。使用過程中推薦一個elastalert的擴展API模塊,搭配kibana可視插件可以在kibana直接編輯報警規(guī)則。
私有化報警內(nèi)容涵蓋四大方面,第一部分是服務(wù)器報警,主要有宿主機負載、cpu、網(wǎng)卡流量、磁盤、內(nèi)存等指標;第二部分是中間件數(shù)據(jù)庫基礎(chǔ)服務(wù)層報警,例如mysql主從同步不一致,rabbitmq隊列超限等內(nèi)容;第三部是進程和JVM層,比如進程意外終止或重啟,JVM gc頻率過高;第四部分涉及到具體業(yè)務(wù),自定義模塊采集數(shù)據(jù)異常。
總結(jié)
企業(yè)私有云由于運維方面的因素對整體服務(wù)的高可用性提出了更高的要求,因此系統(tǒng)的監(jiān)控和報警在私有化中就更顯得重要。基于成熟的ELK Stack的搭建的日志收集和報警平臺,承擔了云信私有化中的日志和運行數(shù)據(jù)收集和保存,實時監(jiān)控云信服務(wù)和系統(tǒng)情況,向運維負責(zé)人發(fā)送異常報警,為云信系統(tǒng)運行提供重要保障。
同時Elasticsearch作為高效的搜索引擎作用不僅于此,我們基于es的海量數(shù)據(jù)搜索統(tǒng)計能力,對平臺日常運行數(shù)據(jù)進行二次分析和整理,通過kibana出色的圖表展示,快速開發(fā)出一套的日常運行數(shù)據(jù)大盤,為決策者在企業(yè)產(chǎn)品研發(fā)方向提供了數(shù)據(jù)依據(jù)。
?
總結(jié)
以上是生活随笔為你收集整理的云信私有化方案中如何搭建高可用的日志和监控平台?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小议IndexedDB中的主要对象
- 下一篇: Hi Table定义未来电视!祝贺海信发