簡析Uber的可伸縮監控:uMonitor和Neris
Uber的基礎設施由數千個移動應用微服務、基礎設施和內部服務組成。為了獲得這些服務的高可觀察性,Uber的Observability團隊構建了兩個內部監控解決方案:uMonitor(用於基於時間序列指標的警報和Neris(用於主機級別的檢查和指標)。這兩個系統都使用了通用管道來修改資料和去重。
Observability團隊高階軟體工程師Shreyas Srivatsan說,Uber的業務規模擴充套件很快就超過了他們初始監控和警報平臺的應對能力。最開始,他們採用了Nagios,並使用指令碼對Carbon指標進行閾值檢查。但是,Nagios需要為每個度量指標編寫和部署程式碼,隨著團隊和產品的增長,這些種方式無法進行很好的擴充套件。大約在同一時間,他們的Carbon叢集也遇到了可擴充套件性問題。於是,Observability團隊決定構建自己的度量資料庫M3。
為了處理M3中的指標,該團隊構建了uMonitor,這是一個基於時間序列指標的警報系統。在釋出時,uMonitor有125,000個警報配置,每秒檢查140多萬個時間序列的7億個資料點。uMonitor中的警報配置包含了一個查詢(Graphite或M3QL)和一個閾值。查詢從M3返回一個或多個時間序列,並將閾值應用於每個時間序列上。如果查詢違反了閾值,就會觸發警報。
uMonitor由三個獨立的元件組成:提供了警報管理API的儲存服務、排程程式和工作程式。儲存服務對Cassandra資料庫進行了包裝,用於儲存警報定義和警報的狀態機。排程程式負責跟蹤警報,並以分鐘為間隔排程警報檢查。工作程式針對底層指標執行警報檢查,同時將狀態儲存到Cassandra中,以確保它們不會過度警報。
uMonitor會自動生成標準指標,如端點錯誤或CPU/記憶體消耗。其他警報可以由每個團隊手動建立。目前,uMonitor支援兩種型別的警報閾值:靜態和異常。靜態閾值對於穩定狀態度量標準非常有用,例如總是返回一致值的查詢。異常閾值由Uber的異常檢測平臺Argos提供支援。這個系統基於歷史資料生成動態閾值。
Uber維護著第二個系統Neris,用於跟蹤不存在M3指標系統中的主機指標。Srivatsan說,他們發現在一個集中式資料庫中儲存“資料中心40,000臺主機每分鐘產生的150萬個主機指標”非常低效,所以他們選擇直接查詢主機。Neris在每臺主機上執行一個代理,對該主機執行警報檢查。在啟動時,代理從Uber的中央配置儲存(稱為Object Config)中獲取配置。配置將決定主機的角色,主機負責設定適當的檢查。代理將這些檢查的結果傳送到聚合層,然後聚合層將資料傳送到Origami。Origami負責根據一系列規則來決定應該傳送哪些警報,並對警報進行去重。
Srivatsan表示,“基數太高一直是我們警報平臺面臨的最大挑戰”。正如Aaron Sun所寫的,“監控系統環境中的基數是指儲存在時序資料庫中唯一的指標時序的數量”。最初,Uber通過讓警報查詢返回多個時序並且只有在足夠的時序超過閾值時才觸發警報來解決高基數問題。這種情況適用於返回有限數量的時序查詢。但是,當團隊需要針對每個城市、每個產品和每個應用程式版本查詢警報時,就不再適合使用這種方式了。
該團隊開始使用Origami來解決這些更復雜的問題。如上所述,Origami能夠進行資料去重和警報彙總。它還能夠針對城市、產品和應用程式版本的組合建立警報,然後基於彙總策略觸發警報。這些警報定義儲存在各個團隊的git儲存庫中,然後同步到Object Config。
隨著平臺的發展,警報已經從簡單地通知輪班待命的工程師演變成可以自動觸發回滾和其他緩解活動。uMonitor為回滾提供了完全支援,也可以POST到路由以觸發更復雜的緩解策略。進一步的路線圖改進包括更有效的度量收集、簡化警報執行基礎設施,以及建立UI以便於跨多個源關聯資料。
檢視英文原文:
相關文章
- Node.js的可伸縮性Node.js
- 可伸縮聚類演算法綜述(可伸縮聚類演算法開篇)聚類演算法
- CSS 可伸縮圓角導航選單CSS
- 可伸縮的微服務告警系統設計指南微服務
- 大型網站的可伸縮性架構如何設計?網站架構
- 【原創】Ingress-Nginx-Controller的Metrics監控原始碼改造簡析NginxController原始碼
- 一個簡單的可展開和收縮的tableviewView
- capital許可監控工具API
- CSS-伸縮佈局CSS
- Redis 叢集伸縮原理Redis
- windows NLB+ARR實現Web負載均衡高可用/可伸縮的方法WindowsWeb負載
- 淺析badjs原始碼(前端監控方案)JS原始碼前端
- CSS3 伸縮佈局CSSS3
- 可觀測性與傳統監控的區別和聯絡
- 兩欄佈局,左側可伸縮,右側寬度自適應
- 數字體驗監控和網路可觀察性
- 支援自動伸縮的消費者模式模式
- 監控影片儲存壓縮解決方案
- INFORMIX的監控和管理命令ORM
- redis自學(37)叢集伸縮Redis
- 彈性佈局(伸縮佈局)
- Knative Autoscaler 自定義彈性伸縮
- RDS for MySQL Serverless公測上線:彈性伸縮,最高可降成本超80%MySqlServer
- Kubernetes彈性伸縮全場景解讀(五) - 定時伸縮元件釋出與開源元件
- Sentry(v20.12.1) K8S 雲原生架構探索,玩轉前/後端監控與事件日誌大資料分析,高效能+高可用+可擴充套件+可伸縮叢集部署K8S架構後端事件大資料套件
- zabbix的主動模式監控和zabbix-proxy分散式監控模式分散式
- Flutter異常監控 - 肆 | Rollbar原始碼賞析Flutter原始碼
- 影片壓縮技術助力邊防影片監控
- stepci:讓 API 測試和監控變得簡單
- 如何用Uber JVM Profiler等視覺化工具監控Spark應用程式?JVM視覺化Spark
- AutoScaling彈性伸縮配置重大升級
- 雲空間影片監控的可擴充套件性:適應不斷增長的監控需求套件
- AI智慧分析影片監控行業的發展趨勢和市場發展淺析AI行業
- Java 監控基礎 - 使用 JMX 監控和管理 Java 程式Java
- 濃縮的才是精華:淺析GIF格式圖片的儲存和壓縮
- 簡單瞭解前端效能監控前端
- 001.常見監控簡介
- jQuery實現的表格展開伸縮效果例項jQuery