從初創型到獨角獸企業,監控架構演進的那些事兒

weixin_34253539發表於2019-02-20

一、業務背景

運滿滿創立於2013年,致力於為公路運輸行業提供高效管理配貨的app。在5年時間內從初創型公司發展到獨角獸企業,我們經歷了很多次的技術架構調整。

今天給大家分享下不同時期,在運維監控方面做的多次架構升級。希望給大家在技術選型階段,提供一些參考和借鑑。

二、架構演進

運滿滿監控整體可以分為三個階段:全家桶套餐時代、DevOps時代、定製AIOps時代

創業期:全家桶套餐

在2015年以前,公司業務發展的不確定性,伺服器數量規模較少。大部分都是靠運維人工監控、每日指令碼巡檢。

和大部分創業公司一樣,當時的運維人員控制在3人以下,每天都在處理各類開發需求,完全沒有空閒去開發系統,做整體的監控告警。這個階段,我們急需一款開源的、功能齊全的、入門成本低的監控系統。

Zabbix是我們當時的選擇,簡單的配置頁面,豐富的agent資料採集,支援簡訊、郵件及微信告警,在一個星期內,我們就完成了全站的基礎監控。

Zabbix開箱即用的使用方式,適合初創型公司。即使是現在,Zabbix還線上上執行,監控網路裝置的執行狀態。

\"\"

發展期:DevOps時代

到了2016年,隨著業務高速發展,研發的需求越來越複雜,同時也暴露出Zabbix的很多缺點。

  1. Zabbix效能瓶頸,監控資料儲存在Mysql中,隨著監控資料越來越多,Zabbix響應時間變慢。

  2. Zabbix只支援metric型別監控,對於日誌類監控,支援並不友好。

  3. Zabbix監控大盤頁面不美觀,無法滿足業務方定製的需求。

基於以上問題,我們開始尋求專業領域內的各類監控。

CAT

CAT(Central Application Tracking)是基於Java開發的實時監控平臺,主要包括移動端監控,應用側監控,核心網路層監控,系統層監控等。

CAT的優點是功能豐富,支援釘釘告警,95線99線計算,可展示程式碼級別監控,在程式碼層故障定位提供了強有力的工具。

\"\"

LEPUS

Lepus(天兔)資料庫企業監控系統是一套由專業DBA針對網際網路企業開發的一款強大的企業資料庫監控管理系統。Lepus後端採用Python語言開發,對於運維非常友好,可以很方便地作出一些個性化的修改。

Lepus的優點是無需安裝agent,賬號集中管理,適合作為資料庫的CMDB使用。

\"\"

ELK監控生態

ELK(Elasticsearch,Logstash,Kibana)是Elastic公司提供的三個開源元件。在日常工作中,我們需要進行日誌分析場景:直接對日誌檔案進行grep、awk等正則操作,獲取我們想要的資訊。在大規模的場景中,日誌檔案分佈在不同的伺服器上,且檔案非常大,逐臺操作效能非常低。比如Nginx日誌,Mysql慢查詢日誌,應用log日誌等。ELK提供一整套的解決方案,可以幫助我們快速全站查詢。

下圖是Mysql慢查詢的截圖,通過python指令碼,可以實時讀取Mysql慢查詢日誌,並寫入ES,方便檢視線上問題。

\"\"

下圖是伺服器的dashboard,通過模糊匹配,可以快速查詢相關伺服器組的效能指標。

\"\"

Open-Falcon

Open-Falcon是小米開源的監控系統,靈活的資料採集,水平擴充套件能力以及高效的告警策略幫助我們快速監控servers的資訊。在實際的環境中,我們僅採用了falcon-agent、falcon-transfer元件,幫助我們採集資料,具體的儲存及展示由更專業的元件處理。

\"\"

資料儲存及展示

隨著業務的發展,資料量越來越大,需要一款通用的時序資料庫提供資料儲存,當時有Prometheus、OpenTSDB、InfluxDB三大選擇。

Prometheus提供了豐富的資料模型和查詢語句,容易上手,很容易整合到現有的環境中,但是Prometheus的叢集和HA架構並不成熟,需要額外的開發,並不適合。

InfluxDB是在Prometheus之後才提出的,並且提供商業的伸縮和叢集化服務,相比Prometheus的metrics儲存,InfluxDB還能處理事件型別的資料,對於大部分公司而言,商業化基本不會考慮。

OpenTSDB是一個基於Hadoop和Hbase的分散式事件序列資料庫,相比Prometheus和InfluxDB,OpenTSDB的橫向擴縮容很容易(需要有豐富的Hadoop/HBase維護經驗),同時官方Open-falcon支援OpenTSDB,結合公司現有的技術棧,綜合考慮後最終選擇了OpenTSDB作為我們的儲存。

關於資料展示的選型,在沒有自研能力的情況下,Grafana是不二選擇。Grafana的告警功能強大方便,同時支援釘釘,Webhook等,滿足公司所有的需求。與此同時,我們將Grafana和Docker技術結合,實現了Grafana高可用、自愈和無限擴充套件能力。

資料庫監控

\"\"

Nginx監控

\"\"

專線監控

\"\"

Kubernetes監控
\"\"

獨角獸期:定製AIOps時代

在2017年底,運滿滿與貨車幫合併,底層資料量翻倍,人員翻倍。我們碰到了以下幾個問題:

  1. 問題排查,需要開啟多套監控系統,效率低。

  2. 每套監控都有學習成本,對研發不友好。

  3. 一個故障,多套監控工具同時告警形成簡訊風暴,擾亂視聽。

基於以上問題,我們提出了建設一套大而全的監控理念,主要包括以下幾個要素:

  • 同時支援基礎監控與業務監控;

  • 事件日誌與metric指標關聯:

  • 告警介面統一;

  • 支援多種語言接入。

監控架構圖如下:

\"\"

在資料採集階段,保留了Open-Faclon、CAT、 客戶端SDK、Logstash等入口,通過Kafka進行匯聚,引入大資料實時計算平臺Flink,提煉metric指標,並最終入庫。

在告警方面,開發了Alert Manager元件,對接多種告警渠道:釘釘、簡訊、微信等,並且自動建立Jira,告警閉環。

我們的最終目標是實現AI自愈的功能,比如自動降級、限流、流量切換等,目前該部分的功能還在探索中。


作者簡介

葉聖賢,滿幫集團運滿滿公司技術保障部負責人。長期關注運維、DB、容器等領域,推崇DevOps理念,善於開發工具解決日常運維工作,提高運維效率。

相關文章