雲信私有化方案中如何搭建高可用的日誌和監控平臺?

導讀

雲信公有云系列產品已經穩定運行數年,隨着企業對信息安全和數據隔離愈加重視,雲信產品私有化課題必然成爲雲信發展過程中一個的重要分支。依賴虛擬化和容器技術的日臻成熟,雲信業務系統已經全面完成私有化,並且在多家企業內部穩定運行,成爲雲信產品線重要的一部分。

在公有云的服務中,雲信日誌信息採集和系統監控報警是依賴網易多年技術沉澱下來的自研平臺,然而對於雲信私有化產品來說這套自研平臺顯得過於繁雜,同時相對於公有云,私有化產品由於搭建在企業內部的特殊性往往具有網絡上的隔離,雲信技術支持人員不易直接訪問私有化環境,而企業運維人員對雲信系統瞭解程度又相對有限。因此私有化產品需要搭建一套更輕量級同時又具備高可用的日誌和監控平臺來向企業內部的運維人員實時展示服務狀態和運行數據並作出預警。

本文將詳述雲信私有化日誌監控服務端架構,如果你需要爲自己的產品搭建日誌採集和監控平臺,這篇文章可以作爲參考。

雲信私有化主要技術

在開始介紹日誌監控平臺,我們先初步瞭解一下雲信私有化整體方案以及所使用的技術棧。現在雲信公有云產品本身涉及的模塊衆多,技術架構和編程語言不同,依賴的環境和網絡也有所區別,因此我們在雲信私有化中使用docker來實現各個模塊的封裝和運行時資源隔離;在容器的部署和管理上我們沒有選擇經常在大型容器雲平臺中出現的Kubernetes,而採用了更輕量級的運維部署工具ansible,主要有兩個原因:

一是私有化企業用戶量級絕大大多數在10w以下級別,這對於企業和企業延伸服務已經是非常大規模,因此在私有化過程中,企業能提供的資源往往有限,可能只有幾臺甚至一臺服務器,而部署一套Kubernetes會爲企業帶來額外的資源開銷;

二是服務集羣實時動態調整在私有化交付後對於企業自身運維人員往往並不需要,企業需要的只是在約定規模下雲信能夠高效運行,Kubernetes所提供的資源調度和節點控制對於私有化顯得過於複雜和沉重。因此我們選擇通過Ansible協同的多機同步控制處理框架並結合python擴展開發可視化部署管理平臺,實現雲信私有化的統一快速部署和管理。

日誌和監控平臺主要需求

1.高性能:滿足雲信私有化方案中運行數據和日誌收集;

2.高可用保障:日誌平臺具備一定高可用能力,單一節點或網絡出現故障,業務系統有能力繼續採集和監控;

3.平臺實時監控和報警:可視化的系統和模塊信息監控,當系統網絡資源,服務狀態出現異常時及時做出報警;

4.日誌系統安全性:保障平臺日誌和運營數據安全;

ELK基本組件簡介

下面是通過一張基本的ELK最基本架構圖來說明一下ELK Stack的主要組件和架構

Elasticsearch是個開源分佈式搜索引擎,具有分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等特點。作爲ELK的核心組件負責日誌存儲、檢索和分析

Logstash 是一個具有實時渠道能力的數據收集引擎,在filter中可以很好的對數據進行預處理。

Kibana 是一款專門爲 Elasticsearch 提供分析和可視化的 Web 平臺。它可以在 Elasticsearch 的索引中查找,交互數據,並生成各種維度的表圖。

Metricbeat&Filebeat

Beats負責ELK協議棧中數據採集部分,收集系統信息和日誌向 Logstash Elasticsearch 發送數據。Filebeat主要收集日誌文件,可以初步檢索和過濾日誌信息,Metricbeat從系統和服務收集指標。

私有化日誌平臺架構

私有化所有模塊均爲容器化部署。由於部署在企業內部,技術支持維護不便,因此每個模塊都要具備高可用特性。ElasticSearch採用集羣化部署,es集羣部署已經有成熟的解決方案,可參照官網或簡書等網上內容。在nginx的部署上採用keeplived通過虛擬IP地址(VIP)實現高可用,備用服務的keepalived在主機宕機的情況會做出檢測並自動接管VIP資源繼續提供服務。

在大型企業中或使用場景中有明顯業務高峯的企業,在實施部署時可增加高性能消息中間件kafkalogstash之前作爲消息隊列緩衝。

使用Supervisor管理elk進程

除了在部署方案中支持組件高可用方案,私有化採用Supervisor作爲進程管理,並隨elk組件一同封裝在鏡像中。當所管理的進程意外掛掉,Supervisor會自動將其重新拉起,很方便的做到進程自動恢復的功能。

Supervisor配置文件實例

使用nginx IP白名單實現訪問控制

Elk三大組件本身並不具有太多的安全相關設置,官方的相關的X-pack組件目前雖然已經開源,但是免費版功能使用上有很多限制,因此我們需要通過引入Nginx控制訪問IP白名單來對日誌平臺進行安全加固。這一點也可以通過宿主機配置防火牆來實現,但是在私有化服務中,企業對於宿主機的防火牆管理差異很大,有些企業對防火牆管理基本一片空白,因此在鏡像中使用Nginx作爲反向代理在服務層進行白名單管理,使容器中的elk組件和Nginx作爲整體提供服務是一個不錯的選擇,ELK組件均綁定本機的IP地址,Nginx作爲對外訪問出口,相當於爲組件提供了白名單管理功能。

容器結構如下,與上一段內容相比加入nginx管理IP白名單,同樣是使用supervior對進程進行管理。

除了管理白名單,elasticsearch還有一些其他工作可以加固安全

  • 修改默認elasticsearch的集羣名;
  • 過期索引自動清理,確保使用磁盤空間;
  • ES配置綁定內網ip,防止多網卡時數據走外網網卡;
  • 關閉ES中使用接口通過正則表達式批量刪除索引,配置項如下;

開發定製化的系統信息收集工具

通過對Metricbeat進行功能擴展是一個私有化中收集模塊信息的好途徑。Metricbeat作爲ELK Stack用來採集和統計系統和應用信息的工具,已經整合包括系統信息,常用中間件信息,進程級別資源使用數據等模塊,並且集成了精美的kibana圖表。Metricbeat使用GO語言編寫,接口清晰,適合通過二次開發增加個性化業務信息採集模塊。

我們在二次開發過程中很好的利用公有云服務原有的服務監控接口和信息採集腳本以及系統指令,在模塊中只封裝了幾個不同類型的指令調用接口,通過配置文件來配置模塊具體調用腳本或指令並解析數據結果,把二次開發代碼量降到最低。

在容器化過程中,metricbeatfilebeat兩個採集模塊均被集成在基礎鏡像中,其他鏡像均基於基礎鏡像構建。在部署創建容器時,根據業務來生成的配置控制不同的採集指標

使用ElastAlert作爲平臺報警

ElastAlert是一款開源的使用python開發的elasticsearch報警工具,部署使用時需要注意所對應elasticsearch版本。使用過程中推薦一個elastalert的擴展API模塊,搭配kibana可視插件可以在kibana直接編輯報警規則。

私有化報警內容涵蓋四大方面,第一部分是服務器報警,主要有宿主機負載、cpu、網卡流量、磁盤、內存等指標;第二部分是中間件數據庫基礎服務層報警,例如mysql主從同步不一致,rabbitmq隊列超限等內容;第三部是進程和JVM層,比如進程意外終止或重啓,JVM gc頻率過高;第四部分涉及到具體業務,自定義模塊採集數據異常。

總結

企業私有云由於運維方面的因素對整體服務的高可用性提出了更高的要求,因此係統的監控和報警在私有化中就更顯得重要。基於成熟的ELK Stack的搭建的日誌收集和報警平臺,承擔了雲信私有化中的日誌和運行數據收集和保存,實時監控雲信服務和系統情況,向運維負責人發送異常報警,爲雲信系統運行提供重要保障。

同時Elasticsearch作爲高效的搜索引擎作用不僅於此,我們基於es的海量數據搜索統計能力,對平臺日常運行數據進行二次分析和整理,通過kibana出色的圖表展示,快速開發出一套的日常運行數據大盤,爲決策者在企業產品研發方向提供了數據依據。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章