滴滴開源企業級監控解決方案:夜鶯 Nightingale

近日滴滴基礎平臺聯合滴滴雲開源了他們研發的企業級監控解決方案:夜鶯(Nightingale),Nightingale 是旨在知足雲原生時代企業級的監控需求。Nightingale 在產品完成度、系統高可用、以及用戶體驗方面,達到了企業級的要求,可知足不一樣規模用戶的場景,小到幾臺機器,大到數十萬均可以完美支撐。兼顧雲原生和裸金屬,支持應用監控和系統監控,插件機制靈活,插件豐富完善,具備高度的靈活性和可擴展性。前端

Nightingale 在Open-Falcon的基礎上,結合滴滴內部的最佳實踐,在性能、可維護性、易用性方面作了大量的改進,做爲滴滴統一的監控解決方案,支撐了滴滴內部數十億監控指標,覆蓋了從系統、容器、到應用等各層面的監控需求。mysql

Nightingale 採用樹狀節點導航,咱們稱之爲對象樹。對象樹本質上是一種對監控對象的分組管理機制,方便查找和查看監控對象,以及對監控對象設置監控策略等管理動做。一棵典型的樹可從上到下描述爲組織架構關係、產品服務模塊關係、機房和機器掛載關係,該導航樹可根據用戶需求自行靈活定製。nginx

監控策略應用到某個節點後,該節點下的全部子節點掛載的全部的機器都會應用這個策略,任何一臺機器觸發相關閾值都會產生告警。git

監控大盤的定製作了大幅易用性改進,支持了圖表閾值,支持了圖表分類,新增圖表和排序管理都是可見即所得的方式,巡檢大盤的定製今後再也不是困難。github

Nightingale 是在 Open-Falcon 的基礎上衍化發展而來,Open-Falcon 做爲國內使用最普遍的監控解決方案之一,爲 Nightingale 的設計開發提供了大量的借鑑意義。web

與Open-Falcon的不一樣點redis

  • 告警引擎重構:Open-Falcon 的告警策略,在監控數據推送上來的同時會觸發策略判斷,這種「推」的模式優點是策略的判斷時效性很是高,可是不利於更高級的告警策略的支持和擴展,好比多條件的組合報警就很難支持。Nightingale 轉爲推拉結合模式,經過推模式保證大部分策略判斷的效率,經過拉模式支持了與條件告警和nodata告警;
  • 引入了導航對象樹:將 Open-Falcon 採用的扁平 HostGroup,轉爲 Nightingale 的導航對象樹,對象樹本質上是一種對監控對象的分組管理機制,方便查找和查看監控對象,以及對監控對象設置監控策略等管理動做。同時在 Nightingale 中,去除了告警模板的概念,告警策略直接與樹節點綁定,簡化設計,大幅提高靈活度和易用性;
  • 索引模塊升級換代:Open-Falcon 使用 MySQL 存儲 metrics 的索引數據,在擴展性和靈活性上存在瓶頸。Nightingale 根據監控需求,設計開發了全新的內存索引模塊 index,查詢方式更多樣,查詢效率更高,避免了原來 MySQL 索引數據達到億級別時面臨的維護優化工做;
  • 時序數據庫優化:在 Open-Falcon 存儲模塊 Graph 的基礎上,引入 Facebook 的 Gorilla 壓縮方案,近期幾個小時的數據採用內存存儲,大幅提高數據查詢效率,長期數據仍然使用 rrdtool 數據格式存儲在硬盤上。同時進一步完善了時序數據庫的性能和穩定性;
  • 告警引擎高可用改進:告警引擎 judge 模塊經過心跳機制作到了故障自動摘除,不再用擔憂單個 judge 宕機致使部分策略失效,須要人工介入的問題,index 模塊也是採用相似方式保證可用性;
  • 原生內置日誌監控功能:Nightingale 客戶端原生內置了日誌匹配和指標抽取能力,在 web 控制檯頁面上支持了日誌匹配規則的配置,同時也支持讀取目標機器特定目錄下的配置文件的方式,讓業務指標監控更爲易用;
  • 可運維性加強:將 portal(falcon-plus中的api)、uic、dashboard、hbs、alarm 合併爲一個模塊:monapi,簡化了系統總體部署難度,原來的部分模塊間調用變成進程內方法調用,性能更高;
  • 配置文件中心化:配置文件作了易用性改造,抽取數據庫通用配置到 mysql.yml,抽取端口實例地址等關聯配置到 address.yml,大批配置在代碼裏給了默認值,使得配置文件更清晰,易於維護。

與Open-Falcon的相同點sql

  • 數據模型沒有變化,仍然是 metric、endpoint、tags 的組織方式,agent 基本是能夠複用的,Nightingale 中的 agent 叫 collector,融合了原來 Open-Falcon 的 agent 和 falcon-log-agent 的邏輯,各類監控插件也都是能夠複用的。
  • 數據流向和總體處理邏輯是相似的,仍然使用靈活的推模型,分爲數據存儲和告警判斷兩條鏈路。

Nightingale架構數據庫

若是想了解更細節的內容,能夠參看這個小視頻:夜鶯架構講解segmentfault

  • collector 即 agent,能夠採集機器常見指標,原生支持日誌監控,支持插件機制,支持業務經過接口直接上報數據;
  • transfe r提供 rpc 接口接收 collector 上報的數據,而後經過一致性哈希,將數據轉發給多臺tsdb和多臺judge;
  • tsdb 即 open-falcon 中的 graph 組件,用於存儲歷史數據,支持配置爲雙寫模式提高系統容災能力,tsdb 會把監控數據轉發一份給 index 建索引;
  • index 是內存索引模塊,替換原來的 mysql 方案,在內存裏構建索引,便於後續數據檢索,在檢索的靈活性和檢索性能方面大幅提高;
  • judge 是告警引擎,從 monapi(portal) 同步監控策略,而後對接收到的數據作告警判斷,如知足閾值,則生成告警事件推送到 redis 隊列;
  • monapi(alarm) 從 redis 隊列中讀取 judge 生成的事件,進行二次處理,補充一些元信息,生成告警消息,從新推送回 redis 隊列;
  • 各發送組件,好比 mail-sender、sms-sender 等,從 redis 讀取告警消息,發送告警,抽象出各種 sender 是爲了後續定製方便;
  • monapi 集成了原來多個模塊的功能,提供接口給 js 調用,api 前綴爲 /api/portal,數據查詢走 transfer,去除了 open-falcon 中原來的 query 組件,api 前綴爲 /api/transfer,索引查詢的 api 前綴 /api/index,因而,在前端統一搭建 nginx,便可經過不一樣 location 將請求轉發到不一樣後端;
  • 數據庫仍然使用 MySQL,主要存儲的內容包括:用戶信息、團隊信息、樹節點信息、告警策略、監控大盤、屏蔽策略、採集策略、部分組件心跳信息等。

項目開發文檔地址:https://n9e.didiyun.com/docs/...

image.png

相關文章
相關標籤/搜索