<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          詳解 Flink 指標(biāo)、監(jiān)控與告警

          共 5687字,需瀏覽 12分鐘

           ·

          2020-07-28 13:21

          整理:李培殿 & 楊偉海(Flink 社區(qū)志愿者)
          校對:楊偉海(Flink 社區(qū)志愿者)
          ?

          摘要:本文由美團(tuán)點(diǎn)評研發(fā)工程師孫夢瑤分享,主要介紹 Flink 的指標(biāo)監(jiān)控和報警的內(nèi)容,分為以下四部分:


          1. 監(jiān)控告警鏈路:基于美團(tuán)點(diǎn)評實時計算平臺的實踐

          2. 常用的監(jiān)控項:哪些指標(biāo)可以高效地衡量作業(yè)

          3. 指標(biāo)的聚合方式:橫看成嶺側(cè)成峰

          4. 指標(biāo)監(jiān)控的應(yīng)用:有哪些常見的表達(dá)方式供參考

          ?

          為什么我們關(guān)注指標(biāo)監(jiān)控


          我們將以天氣舉例。

          指標(biāo):衡量和描述對象的方式


          • 可量化:比如最近天氣很熱。今天比昨天熱嗎?北京的溫度比上海更熱嗎?大家就沒有辦法評判,所以溫度就是這樣一個指標(biāo),來量化我們天熱的程度。
          • 標(biāo)準(zhǔn)化:我們習(xí)慣說的溫度是攝氏溫度,如果有人跟你講華氏溫度,說今天77度,你就會覺得很奇怪,氣溫怎么會有這么高的數(shù)值,因此,我們的指標(biāo)還需要是標(biāo)準(zhǔn)化的,需要有一個統(tǒng)一的標(biāo)準(zhǔn)。
          • 多維度:南方的同學(xué)覺得35度悶得喘不過氣來;北方的同學(xué)覺得35度好像也就那樣。因為我們除了氣溫這個指標(biāo)會影響人體的舒適度之外,還有一個指標(biāo)叫空氣濕度。所以衡量天氣需要結(jié)合多個維度的指標(biāo)。

          監(jiān)控:對指標(biāo)進(jìn)行監(jiān)測和控制


          • 實時:比如天氣預(yù)報,實時的預(yù)報才是我們需要的監(jiān)控內(nèi)容。
          • 易用:相比于電視機(jī)里固定時間播報的天氣信息,手機(jī) App 就是易用的天氣監(jiān)控軟件。
          • 可查詢歷史:比如前幾天某地一直在下雨,河流湍急,可能影響我出行的選擇。

          今天的分享從以下四個方面展開:

          • 監(jiān)控報警的鏈路——基于美團(tuán)點(diǎn)評實時計算平臺的實踐
          • 常用的監(jiān)控報警項——哪些指標(biāo)可以高效地衡量我的作業(yè)
          • 指標(biāo)的聚合方式——橫看成嶺側(cè)成峰
          • 指標(biāo)監(jiān)控的應(yīng)用——有哪些常見的表達(dá)方式供參考

          1.?監(jiān)控報警的鏈路


          1.1 監(jiān)控報警鏈路


          美團(tuán)點(diǎn)評的指標(biāo)監(jiān)控報警的鏈路如下圖所示。首先是我們對日志和指標(biāo)都會進(jìn)行統(tǒng)一的集中化的收集。Reporter (2.8和3.1中有介紹)把 Flink 作業(yè)的指標(biāo)作為一條條日志打出來。然后再通過日志收集收上去,收到 Kafka 里面。接下來會通過實時作業(yè)做解析和聚合,再將得到的指標(biāo)落到 Kafka 里,作為實時數(shù)據(jù)源。

          下游會根據(jù)不同的需求,對不同的數(shù)據(jù)做不同的處理和展示。日志數(shù)據(jù)會落到 ES 里供查詢使用,同時也會根據(jù)關(guān)鍵字接實時作業(yè)進(jìn)行處理,做日志相關(guān)報警;數(shù)值指標(biāo)會落到 OpenTSDB 里供大家查詢,同時也支持各類的指標(biāo)報警。最終這些內(nèi)容還是會集中到我們的實時計算平臺里,給用戶做一個統(tǒng)一的展示。

          整個鏈路下來,主要分為三個關(guān)鍵環(huán)節(jié)。

          1. 日志收集部分,我們首先是要把這些日志和指標(biāo)進(jìn)行統(tǒng)一化、集中化的收集。對于這一環(huán),之前兩個講師也講過, Flink 現(xiàn)在提供的方式有三種:一個是在 Flink UI 上可以直接看到這個作業(yè)的一些指標(biāo);第二種 REST API 從作業(yè)上獲取指標(biāo);第三種就是配各種第三方的 Reporter 。美團(tuán)這邊是在 slf4j 的基礎(chǔ)上增加自己的維度信息格式化后往下發(fā)。
          2. 解析展示部分,使用一些 Flink 作業(yè)去解析聚合平臺所有作業(yè)的指標(biāo)數(shù)據(jù),展示給用戶,也提供給下游使用。
          3. 監(jiān)控和報警部分,對于聚合完成了的指標(biāo),做一些個性化的可配置的規(guī)則報警。


          1.2 指標(biāo)展示:Grafana


          Grafana 支持比較多的數(shù)據(jù)源格式,比如 ES、OpenTSDB 等;它有個變量的功能,可以看某個作業(yè)的指標(biāo),也可以一起對比看。


          相比于自研的指標(biāo)展示工具,Grafana 配置界面會比較方便,省時省力,性價比高。如果是只是想簡單的展示一下所有的作業(yè)的指標(biāo)的話,Grafana 是個很好的選擇,它也可以被外嵌在其他的頁面上。但是 Grafana 圖的類型比較單一,在實際的直接使用過程中可能還會有一些局限性。

          2. 常用的監(jiān)控項


          下面我們來關(guān)注下一般會使用哪些指標(biāo)來衡量作業(yè)運(yùn)行的狀況。

          2.1 常用的指標(biāo)


          ■?系統(tǒng)指標(biāo)

          系統(tǒng)指標(biāo)在 Flink 官網(wǎng)有相應(yīng)的說明。

          • 對于系統(tǒng)指標(biāo)最常關(guān)注的是作業(yè)的可用性,如 uptime (作業(yè)持續(xù)運(yùn)行的時間)、fullRestarts (作業(yè)重啟的次數(shù))。

          • 第二個關(guān)注的是作業(yè)的流量,可以通過 numRecordsIn、numBytesInLocal 等相關(guān)指標(biāo)來關(guān)注作業(yè)每天處理的消息數(shù)目及高峰時間段的流量,通過關(guān)注這些指標(biāo)可以觀察作業(yè)的流量表現(xiàn)是否正常。

          • 然后是 CPU(如:CPU.Load)、內(nèi)存(如:Heap.Used )、GC ( 如:GarbageCollector.Count、GarbageCollector.Time )及網(wǎng)絡(luò) ( inputQueueLength、outputQueueLength) 相關(guān)指標(biāo),這些指標(biāo)一般是用來排查作業(yè)的故障信息。

          • 另外是 checkpoint 相關(guān)信息,例如最近完成的 checkpoint 的時長( lastCheckpointDuration )、最近完成的 checkpoint 的大小( lastCheckpointSize )、作業(yè)失敗后恢復(fù)的能力( lastCheckpointRestoreTimestamp )、成功和失敗的 checkpoint 數(shù)目( numberOfCompletedCheckpoints、numberOfFailedCheckpoints )以及在 Exactly once 模式下 barrier 對齊時間( checkpointAlignmentTime )。

          • 還有就是 connector 的指標(biāo),例如常用的 Kafka connector ,Kafka 自身提供了一些指標(biāo),可以幫助我們了解到作業(yè)最新消費(fèi)的消息的狀況、作業(yè)是否有延遲等。


          ■?自定義指標(biāo)

          自定義指標(biāo)是指用戶可以在自己的作業(yè)邏輯中進(jìn)行埋點(diǎn),這樣可以對自己的業(yè)務(wù)邏輯進(jìn)行監(jiān)控。

          正如其他講師所提到的,現(xiàn)在的 Flink 作業(yè)更像是一種微服務(wù),不僅關(guān)心作業(yè)是否把所有數(shù)據(jù)都處理完了,還希望作業(yè)可以7×24小時不間斷的運(yùn)行來處理數(shù)據(jù)。因此在業(yè)務(wù)邏輯中重要的指標(biāo)在 Flink 中也會很重要。

          • 比如處理邏輯耗時打點(diǎn),例如包含復(fù)雜邏輯的業(yè)務(wù)系統(tǒng),可以通過在邏輯前后進(jìn)行打點(diǎn),這樣可以查看每條消息處理完這個邏輯的耗時。

          • 另一塊是外部服務(wù)調(diào)用的性能, 在 Flink 作業(yè)中可能需要訪問外部存儲(如 Redis ), 可以通過打點(diǎn)來查看請求的耗時、請求的成功率等。

          • 還有是緩存命中率,有時候由于數(shù)據(jù)集過大,我們只訪問熱數(shù)據(jù),此時會在內(nèi)存中緩存一部分信息,我們可以監(jiān)控緩存命中率,如果緩存命中率非常高說明緩存有效,如果緩存命中率非常低,一直在訪問外部存儲,就需要考慮緩存設(shè)計的是否合理。


          另外還有幾類是關(guān)于作業(yè)的處理邏輯,如果處理邏輯拋出異常將會導(dǎo)致作業(yè) fullRestarts,此時一般會將這些異常進(jìn)行 catch 住,如果涉及復(fù)雜計算的可以通過重試機(jī)制多試幾次,如果重試后未成功則丟棄數(shù)據(jù) 。此時可以將處理數(shù)據(jù)的占比或者數(shù)據(jù)的某些特征作為指標(biāo)上報,這樣可以觀察此類數(shù)據(jù)的占比來觀測數(shù)據(jù)處理是否存在異常。又如 filter 過濾的數(shù)據(jù)占比可以觀測 filter 的邏輯是否正常,還有窗口等涉及時間的算子需要監(jiān)測超時丟棄的數(shù)據(jù)的占比等。


          2.2 如何確定哪些指標(biāo)需要關(guān)注?


          1. 第一點(diǎn)是作業(yè)狀態(tài)相關(guān)的, 如作業(yè)是否出故障、作業(yè)是否存活、作業(yè)是否穩(wěn)定運(yùn)行、影響作業(yè)可用性的風(fēng)險因素(如上次 checkpoint 是否成功、最近成功的 checkpoint 的時間)。

          2. 第二點(diǎn)是作業(yè)性能相關(guān)的,如作業(yè)的處理延遲、數(shù)據(jù)傾斜、性能瓶頸(如外部訪問)等。

          3. 第三點(diǎn)是業(yè)務(wù)邏輯相關(guān),如上游數(shù)據(jù)質(zhì)量、新上的邏輯是否存在問題、數(shù)據(jù)是否存在丟失( Exactly once 語義中數(shù)據(jù)是否允許丟失)。



          3. 指標(biāo)的聚合方式


          在上面介紹了常用的監(jiān)控指標(biāo),接下來介紹下這些指標(biāo)應(yīng)該怎么看。同一個指標(biāo)可能在機(jī)器的角度去看,也可能在作業(yè)的角度去看,不同的角度會得出不同的結(jié)果。

          首先是作業(yè)的聚合維度,細(xì)粒度的如 Task、Operator 維度,稍微大點(diǎn)的粒度如 Job、機(jī)器、集群或者是業(yè)務(wù)維度(如每個區(qū)域)。當(dāng)查問題時從大的粒度著手,向細(xì)粒度進(jìn)行排查。如果想看全局的現(xiàn)狀則需要比較粗的粒度。可以將原始指標(biāo)進(jìn)行上報然后根據(jù)不同場景進(jìn)行聚合。如果要做性能測試則需要細(xì)粒度的查詢,如 task 粒度。


          另一方面是聚合的方式,如總和、均值、最大值、最小值、變化率等,需要注意是要消除統(tǒng)計誤差,對數(shù)據(jù)取移動平均或者固定時間的平均來使曲線變得更加平滑。還有是差值,如上游數(shù)據(jù)量與下游數(shù)據(jù)量的差值、最新 offset 與消費(fèi)的 offset 的差值。另外對于衡量 xx 率、xx 耗時可以使用 99 線。最后還有一點(diǎn)需要關(guān)注的,也是我們在實際工作中遇到的坑,即指標(biāo)的缺失,如果沒有拿到指標(biāo),作業(yè)狀態(tài)則變成了黑盒,需要去關(guān)注作業(yè)的指標(biāo)收集是否正常,需要監(jiān)測是否存在指標(biāo)丟失,是單個指標(biāo)丟失還是整個作業(yè)的指標(biāo)丟失。


          最后是在觀察指標(biāo)的時候可能需要多個指標(biāo)復(fù)雜聚合查詢,如常見的時間線對比,例如之前正常的作業(yè)在今天出現(xiàn)反壓,可以通過查詢今天數(shù)據(jù)量的同比昨天數(shù)據(jù)量的增長。另外不同的業(yè)務(wù)有不同的趨勢,例如外賣存在高峰時間段,可以對比數(shù)據(jù)量在高峰時間段的環(huán)比增長來進(jìn)行衡量。還有關(guān)注的指標(biāo)的持續(xù)時間,如作業(yè)的數(shù)據(jù)延遲,如果延遲時間較長則作業(yè)可能存在異常;還有指標(biāo)的周期性,如果指標(biāo)的變化存在周期性,則考慮是否因為時間窗口的影響。

          還有需要考慮的是結(jié)合外部系統(tǒng)進(jìn)行計算,例如上游為消費(fèi) Kafka ,除了想知道當(dāng)前消費(fèi)的狀況,還想查看上游的數(shù)據(jù)量。例如該圖中,藍(lán)線為上游 Kafka 的數(shù)據(jù)量,紅線為作業(yè)的 source 算子的 output 數(shù)據(jù)量,可以看到在午高峰和晚高峰基本上是持平的狀態(tài), 上游數(shù)據(jù)在午高峰及晚高峰有較高的增長,雖然在高峰時刻有反壓,但主要原因是由于上游數(shù)據(jù)量的增長而不是由于作業(yè)的處理能力不足。如果上游有多個算子可以將多個算子的數(shù)據(jù)量進(jìn)行相加,這也是我們除了使用 Grafana 外還自研的前端進(jìn)行展示的原因,自研前端可以將指標(biāo)更加靈活的進(jìn)行展示。


          4. 指標(biāo)監(jiān)控的應(yīng)用


          4.1 作業(yè)異常報警


          • 作業(yè)狀態(tài)異常:包括作業(yè)任務(wù)的異常狀態(tài)如 failing,也包括 uptime 等指標(biāo)的異常。
          • 作業(yè)無指標(biāo)上報:作業(yè)無指標(biāo)上報會給作業(yè)的負(fù)責(zé)人發(fā)報警;當(dāng)上報的作業(yè)多到一定程度了,達(dá)到預(yù)值的時候會直接給平臺的管理員發(fā)報警。
          • 指標(biāo)達(dá)到閾值:是大家最常用的報警項。比如:
            • 處理量跌0
            • 消費(fèi)延遲(落后一定數(shù)量、持續(xù)一定時間)
            • 失敗率、丟失率等
          • 個性化:實時計算平臺中有很多類任務(wù),不同的任務(wù)它會有不同的特性。比如:
            • 報警時段:不同的時間段報警,可能需要有不同的域值,或者不同的報警方式(公司通訊軟件報警、電話報警等)

            • 聚合方式:不同的業(yè)務(wù)可能會有不同的報警的聚合的方式,這個也是需要盡量的兼容的。
          • 錯誤日志、關(guān)鍵詞日志:當(dāng)錯誤日志到達(dá)一定量或者日志出現(xiàn)某關(guān)鍵詞時,觸發(fā)報警。

          注意:報警系統(tǒng)本身的穩(wěn)定性,放到第1位,避免出現(xiàn)誤報、漏報、延遲。否則會影響業(yè)務(wù)方的準(zhǔn)確判斷。

          4.2 指標(biāo)大盤


          • 反映平臺整體的現(xiàn)狀:
            • 異常值高亮
            • 多維度聚合
            • 時間線對比等
          • 及時發(fā)現(xiàn)并快速定位到故障
          • 給出平臺可優(yōu)化的方向
          • 便于統(tǒng)籌資源分配


          4.3 自動化運(yùn)維


          運(yùn)維的幾種階段:

          • 無法運(yùn)維:沒有指標(biāo),作業(yè)狀態(tài)是個黑盒,出了問題一群人查代碼。
          • 手動運(yùn)維:重啟,擴(kuò)容,回滾、遷移,降級,糾正錯誤代碼,優(yōu)化處理邏輯。手動運(yùn)維表示無論在干什么,當(dāng)報警電話一來,你需要掏出電腦、手機(jī)去排查問題。
          • 輔助運(yùn)維:當(dāng)手動運(yùn)維做多了,把大家的業(yè)務(wù)作業(yè)的各項指標(biāo)都進(jìn)行標(biāo)準(zhǔn)化,我們就可以得到一些參考值。把這些經(jīng)驗匯總,作為其他同學(xué)的運(yùn)維的時候參考的建議,這樣即使是新人也可以快速借助這些輔助工具進(jìn)行處理,降低學(xué)習(xí)成本。
          • 智能運(yùn)維:智能運(yùn)維是不需要人處理,當(dāng)發(fā)生故障的時候,自動操作的運(yùn)維方式。執(zhí)行作業(yè)的機(jī)器掛了,自動拉起,自動把作業(yè)啟動起來。資源不足了,自動去擴(kuò)容。線上的作業(yè)有問題,自動切換到備用的作業(yè)……當(dāng)然目前能做到的這些只能解決一部分問題,一些代碼問題帶來的故障還是需要人為介入修復(fù) bug。


          Q&A


          Q1:構(gòu)建一整套指標(biāo)系統(tǒng),指標(biāo)庫如何維護(hù)?需要去對程序進(jìn)行代碼級別的修改,還是修改配置即可?

          A:既然想做一整套的監(jiān)控系統(tǒng)自然希望這個指標(biāo)盡可能是一個可適配的方式,那么我們需要做什么?

          • 在設(shè)計整套系統(tǒng)的架構(gòu)時,需要有一定的兼容性,不能只關(guān)注一類指標(biāo)。

          • 設(shè)計初期需要考慮有哪些類型的指標(biāo),每個類型的指標(biāo)有什么樣的特征,可能有哪些聚合的維度,用什么樣的方式去聚合。

          • 搭建模型。

          • 設(shè)計,先把指標(biāo)的特征提取出來,然后對這些特征去進(jìn)行設(shè)計,最后做一個能兼容的系統(tǒng),這樣對于已知類型的指標(biāo),就只需修改配置就可以擴(kuò)展了。


          Q2:Grafana 平臺的展示效果很好,但是報警不友好;報警這塊有比較成熟的工具嗎?

          A:可以看看 Prometheus,報警還是挺成熟的。報警比指標(biāo)聚合更需要個性化的東西,如果需要功能非常完善的話,可能都需要考慮自研。

          Q3:算子內(nèi)部可以獲取到 taskManager 的指標(biāo)嗎?

          A:通過 restful API 去拿,不推薦在算子內(nèi)部做,指標(biāo)這個東西本身不應(yīng)該影響你作業(yè)本身的處理邏輯,監(jiān)控應(yīng)該是一個比較外圍的東西。

          Q4: ? 如何根據(jù)指標(biāo)發(fā)現(xiàn)作業(yè)問題的根源?

          A: ?按照指標(biāo)從粗到細(xì),可以參考 2.8 節(jié)和 3.1 節(jié)老師的教程。

          Q5: ?指標(biāo)數(shù)據(jù)量比較大,如何選擇存儲?

          A:??可以選擇 openTSDB,其他 TSDB 也是可以的,像其他 Hive 或者 OLAP引擎 也是可以考慮的,指標(biāo)數(shù)據(jù)作為一種時序數(shù)據(jù),目前已有很多成熟的方案可以選擇。

          --end--


          掃描下方二維碼
          添加好友,備注【交流群
          拉你到學(xué)習(xí)路線和資源豐富的交流群
          瀏覽 50
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  婷婷www | ww超碰| 日韩欧美视频 | 欧美精品福利视频 | 大屌操肥逼 |