導讀
雲信公有云系列產品已經穩定運行數年,隨着企業對信息安全和數據隔離越發重視,雲信產品私有化課題必然成爲雲信發展過程當中一個的重要分支。依賴虛擬化和容器技術的日臻成熟,雲信業務系統已經全面完成私有化,而且在多家企業內部穩定運行,成爲雲信產品線重要的一部分。
在公有云的服務中,雲信日誌信息採集和系統監控報警是依賴網易多年技術沉澱下來的自研平臺,然而對於雲信私有化產品來講這套自研平臺顯得過於繁雜,同時相對於公有云,私有化產品因爲搭建在企業內部的特殊性每每具備網絡上的隔離,雲信技術支持人員不易直接訪問私有化環境,而企業運維人員對雲信系統瞭解程度又相對有限。所以私有化產品須要搭建一套更輕量級同時又具有高可用的日誌和監控平臺來向企業內部的運維人員實時展現服務狀態和運行數據並做出預警。
本文將詳述雲信私有化日誌監控服務端架構,若是你須要爲本身的產品搭建日誌採集和監控平臺,這篇文章能夠做爲參考。
雲信私有化主要技術
在開始介紹日誌監控平臺,咱們先初步瞭解一下雲信私有化總體方案以及所使用的技術棧。如今雲信公有云產品自己涉及的模塊衆多,技術架構和編程語言不一樣,依賴的環境和網絡也有所區別,所以咱們在雲信私有化中使用docker來實現各個模塊的封裝和運行時資源隔離;在容器的部署和管理上咱們沒有選擇常常在大型容器雲平臺中出現的Kubernetes,而採用了更輕量級的運維部署工具ansible,主要有兩個緣由:
一是私有化企業用戶量級絕大大多數在10w如下級別,這對於企業和企業延伸服務已是很是大規模,所以在私有化過程當中,企業能提供的資源每每有限,可能只有幾臺甚至一臺服務器,而部署一套Kubernetes會爲企業帶來額外的資源開銷;
二是服務集羣實時動態調整在私有化交付後對於企業自身運維人員每每並不須要,企業須要的只是在約定規模下雲信可以高效運行,Kubernetes所提供的資源調度和節點控制對於私有化顯得過於複雜和沉重。所以咱們選擇經過Ansible協同的多機同步控制處理框架並結合python擴展開發可視化部署管理平臺,實現雲信私有化的統一快速部署和管理。
日誌和監控平臺主要需求
1.高性能:知足雲信私有化方案中運行數據和日誌收集;
2.高可用保障:日誌平臺具有必定高可用能力,單一節點或網絡出現故障,業務系統有能力繼續採集和監控;
3.平臺實時監控和報警:可視化的系統和模塊信息監控,當系統網絡資源,服務狀態出現異常時及時作出報警;
ELK基本組件簡介
下面是經過一張基本的ELK最基本架構圖來講明一下ELK Stack的主要組件和架構
Elasticsearch是個開源分佈式搜索引擎,具備分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等特色。做爲ELK的核心組件負責日誌存儲、檢索和分析
Logstash 是一個具備實時渠道能力的數據收集引擎,在filter中能夠很好的對數據進行預處理。
Kibana 是一款專門爲 Elasticsearch 提供分析和可視化的 Web 平臺。它能夠在 Elasticsearch 的索引中查找,交互數據,並生成各類維度的表圖。
Beats負責ELK協議棧中數據採集部分,收集系統信息和日誌向 Logstash 或 Elasticsearch 發送數據。Filebeat主要收集日誌文件,能夠初步檢索和過濾日誌信息,Metricbeat從系統和服務收集指標。
私有化日誌平臺架構
私有化全部模塊均爲容器化部署。因爲部署在企業內部,技術支持維護不便,所以每一個模塊都要具有高可用特性。ElasticSearch採用集羣化部署,es集羣部署已經有成熟的解決方案,可參照官網或簡書等網上內容。在nginx的部署上採用keeplived經過虛擬IP地址(VIP)實現高可用,備用服務的keepalived在主機宕機的狀況會作出檢測並自動接管VIP資源繼續提供服務。
在大型企業中或使用場景中有明顯業務高峯的企業,在實施部署時可增長高性能消息中間件kafka在logstash以前做爲消息隊列緩衝。
使用Supervisor管理elk進程
除了在部署方案中支持組件高可用方案,私有化採用Supervisor做爲進程管理,並隨elk組件一同封裝在鏡像中。當所管理的進程意外掛掉,Supervisor會自動將其從新拉起,很方便的作到進程自動恢復的功能。
使用nginx 的IP白名單實現訪問控制
Elk三大組件自己並不具備太多的安全相關設置,官方的相關的X-pack組件目前雖然已經開源,可是免費版功能使用上有不少限制,所以咱們須要經過引入Nginx控制訪問IP白名單來對日誌平臺進行安全加固。這一點也能夠經過宿主機配置防火牆來實現,可是在私有化服務中,企業對於宿主機的防火牆管理差別很大,有些企業對防火牆管理基本一片空白,所以在鏡像中使用Nginx做爲反向代理在服務層進行白名單管理,使容器中的elk組件和Nginx做爲總體提供服務是一個不錯的選擇,ELK組件均綁定本機的IP地址,Nginx做爲對外訪問出口,至關於爲組件提供了白名單管理功能。
容器結構以下,與上一段內容相比加入nginx管理IP白名單,一樣是使用supervior對進程進行管理。
除了管理白名單,elasticsearch還有一些其餘工做能夠加固安全
開發定製化的系統信息收集工具
經過對Metricbeat進行功能擴展是一個私有化中收集模塊信息的好途徑。Metricbeat做爲ELK Stack用來採集和統計系統和應用信息的工具,已經整合包括系統信息,經常使用中間件信息,進程級別資源使用數據等模塊,而且集成了精美的kibana圖表。Metricbeat使用GO語言編寫,接口清晰,適合經過二次開發增長個性化業務信息採集模塊。
咱們在二次開發過程當中很好的利用公有云服務原有的服務監控接口和信息採集腳本以及系統指令,在模塊中只封裝了幾個不一樣類型的指令調用接口,經過配置文件來配置模塊具體調用腳本或指令並解析數據結果,把二次開發代碼量降到最低。
在容器化過程當中,metricbeat和filebeat兩個採集模塊均被集成在基礎鏡像中,其餘鏡像均基於基礎鏡像構建。在部署建立容器時,根據業務來生成的配置控制不一樣的採集指標
使用ElastAlert做爲平臺報警
私有化報警內容涵蓋四大方面,第一部分是服務器報警,主要有宿主機負載、cpu、網卡流量、磁盤、內存等指標;第二部分是中間件數據庫基礎服務層報警,例如mysql主從同步不一致,rabbitmq隊列超限等內容;第三部是進程和JVM層,好比進程意外終止或重啓,JVM gc頻率太高;第四部分涉及到具體業務,自定義模塊採集數據異常。
總結
企業私有云因爲運維方面的因素對總體服務的高可用性提出了更高的要求,所以系統的監控和報警在私有化中就更顯得重要。基於成熟的ELK Stack的搭建的日誌收集和報警平臺,承擔了雲信私有化中的日誌和運行數據收集和保存,實時監控雲信服務和系統狀況,向運維負責人發送異常報警,爲雲信系統運行提供重要保障。
同時Elasticsearch做爲高效的搜索引擎做用不只於此,咱們基於es的海量數據搜索統計能力,對平臺平常運行數據進行二次分析和整理,經過kibana出色的圖表展現,快速開發出一套的平常運行數據大盤,爲決策者在企業產品研發方向提供了數據依據。