摘要:本文由美團點評研發工程師孫夢瑤分享,主要介紹 Flink 的指標監控和報警的內容,分爲如下四部分:前端
監控告警鏈路:基於美團點評實時計算平臺的實踐
緩存經常使用的監控項:哪些指標能夠高效地衡量做業
微信指標的聚合方式:橫當作嶺側成峯
restful指標監控的應用:有哪些常見的表達方式供參考
網絡
Tips:點擊「閱讀原文」連接可查看做者原版 PPT 及分享視頻~架構
爲何咱們關注指標監控app
指標:衡量和描述對象的方式
-
可量化: 好比最近天氣很熱。今天比昨天熱嗎?北京的溫度比上海更熱嗎?你們就沒有辦法評判,因此溫度就是這樣一個指標,來量化咱們天熱的程度。 -
標準化: 咱們習慣說的溫度是攝氏溫度,若是有人跟你講華氏溫度,說今天77度,你就會以爲很奇怪,氣溫怎麼會有這麼高的數值,所以,咱們的指標還須要是標準化的,須要有一個統一的標準。 -
多維度: 南方的同窗以爲35度悶得喘不過氣來;北方的同窗以爲35度好像也就那樣。由於咱們除了氣溫這個指標會影響人體的溫馨度以外,還有一個指標叫空氣溼度。因此衡量天氣須要結合多個維度的指標。
監控:對指標進行監測和控制
-
實時:好比天氣預報,實時的預報纔是咱們須要的監控內容。 -
易用: 相比於電視機裏固定時間播報的天氣信息,手機 App 就是易用的天氣監控軟件。 -
可查詢歷史: 好比前幾天某地一直在下雨,河流湍急,可能影響我出行的選擇。
-
監控報警的鏈路——基於美團點評實時計算平臺的實踐 -
經常使用的監控報警項——哪些指標能夠高效地衡量個人做業 -
指標的聚合方式——橫當作嶺側成峯 -
指標監控的應用——有哪些常見的表達方式供參考
1. 監控報警的鏈路運維
1.1 監控報警鏈路
-
日誌收集 部分,咱們首先是要把這些日誌和指標進行統一化、集中化的收集。對於這一環,以前兩個講師也講過, Flink 如今提供的方式有三種:一個是在 Flink UI 上能夠直接看到這個做業的一些指標;第二種 REST API 從做業上獲取指標;第三種就是配各類第三方的 Reporter 。美團這邊是在 slf4j 的基礎上增長本身的維度信息格式化後往下發。 -
解析展現 部分,使用一些 Flink 做業去解析聚合平臺全部做業的指標數據,展現給用戶,也提供給下游使用。 -
監控和報警 部分,對於聚合完成了的指標,作一些個性化的可配置的規則報警。
1.2 指標展現:Grafana
2. 經常使用的監控項微服務
2.1 經常使用的指標
對於系統指標最常關注的是做業的可用性,如 uptime (做業持續運行的時間)、fullRestarts (做業重啓的次數)。工具
第二個關注的是做業的流量,能夠經過 numRecordsIn、numBytesInLocal 等相關指標來關注做業天天處理的消息數目及高峯時間段的流量,經過關注這些指標能夠觀察做業的流量表現是否正常。
而後是 CPU(如:CPU.Load)、內存(如:Heap.Used )、GC ( 如:GarbageCollector.Count、GarbageCollector.Time )及網絡 ( inputQueueLength、outputQueueLength) 相關指標,這些指標通常是用來排查做業的故障信息。
另外是 checkpoint 相關信息,例如最近完成的 checkpoint 的時長( lastCheckpointDuration )、最近完成的 checkpoint 的大小( lastCheckpointSize )、做業失敗後恢復的能力( lastCheckpointRestoreTimestamp )、成功和失敗的 checkpoint 數目( numberOfCompletedCheckpoints、numberOfFailedCheckpoints )以及在 Exactly once 模式下 barrier 對齊時間( checkpointAlignmentTime )。
還有就是 connector 的指標,例如經常使用的 Kafka connector ,Kafka 自身提供了一些指標,能夠幫助咱們瞭解到做業最新消費的消息的情況、做業是否有延遲等。
好比處理邏輯耗時打點,例如包含複雜邏輯的業務系統,能夠經過在邏輯先後進行打點,這樣能夠查看每條消息處理完這個邏輯的耗時。
另外一塊是外部服務調用的性能, 在 Flink 做業中可能須要訪問外部存儲(如 Redis ), 能夠經過打點來查看請求的耗時、請求的成功率等。
還有是緩存命中率,有時候因爲數據集過大,咱們只訪問熱數據,此時會在內存中緩存一部分信息,咱們能夠監控緩存命中率,若是緩存命中率很是高說明緩存有效,若是緩存命中率很是低,一直在訪問外部存儲,就須要考慮緩存設計的是否合理。
2.2 如何肯定哪些指標須要關注?
第一點是做業狀態相關的, 如做業是否出故障、做業是否存活、做業是否穩定運行、影響做業可用性的風險因素(如上次 checkpoint 是否成功、最近成功的 checkpoint 的時間)。
第二點是做業性能相關的,如做業的處理延遲、數據傾斜、性能瓶頸(如外部訪問)等。
第三點是業務邏輯相關,如上游數據質量、新上的邏輯是否存在問題、數據是否存在丟失( Exactly once 語義中數據是否容許丟失)。
3. 指標的聚合方式
4. 指標監控的應用
4.1 做業異常報警
-
做業狀態異常: 包括做業任務的異常狀態如 failing,也包括 uptime 等指標的異常。 -
做業無指標上報: 做業無指標上報會給做業的負責人發報警;當上報的做業多到必定程度了,達到預值的時候會直接給平臺的管理員發報警。 -
指標達到閾值: 是你們最經常使用的報警項。好比: -
處理量跌0 -
消費延遲(落後必定數量、持續必定時間) -
失敗率、丟失率等 -
個性化: 實時計算平臺中有不少類任務,不一樣的任務它會有不一樣的特性。好比: 報警時段:不一樣的時間段報警,可能須要有不一樣的域值,或者不一樣的報警方式(公司通信軟件報警、電話報警等)
-
聚合方式:不一樣的業務可能會有不一樣的報警的聚合的方式,這個也是須要儘可能的兼容的。 -
錯誤日誌、關鍵詞日誌: 當錯誤日誌到達必定量或者日誌出現某關鍵詞時,觸發報警。
4.2 指標大盤
-
反映平臺總體的現狀: -
異常值高亮 -
多維度聚合 -
時間線對比等 -
及時發現並快速定位到故障 -
給出平臺可優化的方向 -
便於統籌資源分配
4.3 自動化運維
-
沒法運維: 沒有指標,做業狀態是個黑盒,出了問題一羣人查代碼。 -
手動運維: 重啓,擴容,回滾、遷移,降級,糾正錯誤代碼,優化處理邏輯。手動運維表示不管在幹什麼,當報警電話一來,你須要掏出電腦、手機去排查問題。 -
輔助運維: 當手動運維作多了,把你們的業務做業的各項指標都進行標準化,咱們就能夠獲得一些參考值。把這些經驗彙總,做爲其餘同窗的運維的時候參考的建議,這樣即便是新人也能夠快速藉助這些輔助工具進行處理,下降學習成本。 -
智能運維: 智能運維是不須要人處理,當發生故障的時候,自動操做的運維方式。執行做業的機器掛了,自動拉起,自動把做業啓動起來。資源不足了,自動去擴容。線上的做業有問題,自動切換到備用的做業……固然目前能作到的這些只能解決一部分問題,一些代碼問題帶來的故障仍是須要人爲介入修復 bug。
Q&A
在設計整套系統的架構時,須要有必定的兼容性,不能只關注一類指標。
設計初期須要考慮有哪些類型的指標,每一個類型的指標有什麼樣的特徵,可能有哪些聚合的維度,用什麼樣的方式去聚合。
搭建模型。
設計,先把指標的特徵提取出來,而後對這些特徵去進行設計,最後作一個能兼容的系統,這樣對於已知類型的指標,就只需修改配置就能夠擴展了。
關注 Flink 中文社區,獲取更多技術乾貨
你在看」嗎?
本文分享自微信公衆號 - Flink 中文社區(gh_5efd76d10a8d)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。