<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>

          基于Prometheus+Grafana打造企業(yè)級(jí)Flink監(jiān)控系統(tǒng)

          共 7301字,需瀏覽 15分鐘

           ·

          2021-01-18 15:55

          點(diǎn)擊上方藍(lán)色字體,選擇“設(shè)為星標(biāo)

          回復(fù)”資源“獲取更多資源


          在進(jìn)入本文之前,我先問大家一個(gè)問題,你們公司或者業(yè)務(wù)系統(tǒng)上是如何對(duì)生產(chǎn)集群上的數(shù)據(jù)同步任務(wù)、實(shí)時(shí)計(jì)算任務(wù)或者是調(diào)度任務(wù)本身的執(zhí)行情況和日志進(jìn)行監(jiān)控的呢?可能你會(huì)回答是自研或者ELK系統(tǒng)或者Zabbix系統(tǒng)。
          今天我們要介紹的主角可能會(huì)吊打上面的監(jiān)控系統(tǒng)哦。
          隨著容器技術(shù)的發(fā)展,Kubernetes 已然成為大家追捧的容器集群管理系統(tǒng)。Prometheus 作為生態(tài)圈 Cloud Native Computing Foundation(簡稱:CNCF)中的重要一員,其活躍度僅次于 Kubernetes,現(xiàn)已廣泛用于 Kubernetes 集群的監(jiān)控系統(tǒng)中。
          在 Flink 任務(wù)的監(jiān)控上,本文將簡要介紹 Prometheus 體系中的組件如何使用,實(shí)例演示 Prometheus 的安裝,配置及使用。并最終形成一套 Flink 任務(wù)監(jiān)控的解決方案。

          Prometheus來龍去脈

          Prometheus 是由前 Google 工程師從 2012 年開始在 Soundcloud 以開源軟件的形式進(jìn)行研發(fā)的系統(tǒng)監(jiān)控和告警工具包,自此以后,許多公司和組織都采用了 Prometheus 作為監(jiān)控告警工具。Prometheus 的開發(fā)者和用戶社區(qū)非常活躍,它現(xiàn)在是一個(gè)獨(dú)立的開源項(xiàng)目,可以獨(dú)立于任何公司進(jìn)行維護(hù)。為了證明這一點(diǎn),Prometheus 于 2016 年 5 月加入 CNCF 基金會(huì),成為繼 Kubernetes 之后的第二個(gè) CNCF 托管項(xiàng)目。
          最初,Prometheus 被用在微服務(wù)系統(tǒng)的監(jiān)控上,微服務(wù)的落地一直都是業(yè)界重點(diǎn)關(guān)注的問題,其中除了部署難外,最大的問題就是集群監(jiān)控、系統(tǒng)配置和系統(tǒng)治理等方面的帶來的挑戰(zhàn)。
          2019 年 Flink 橫空出世后,隨之而來的運(yùn)維、監(jiān)控成為大家關(guān)注的重點(diǎn)。作為新一代的監(jiān)控框架,就像網(wǎng)易在實(shí)踐過程提出的一樣,Prometheus 具有以下特點(diǎn):
          • 靈活的數(shù)據(jù)模型:在Prometheus里,監(jiān)控?cái)?shù)據(jù)是由值、時(shí)間戳和標(biāo)簽表組成的,其中監(jiān)控?cái)?shù)據(jù)的源信息是完全記錄在標(biāo)簽表里的;同時(shí)Prometheus支持在監(jiān)控?cái)?shù)據(jù)采集階段對(duì)監(jiān)控?cái)?shù)據(jù)的標(biāo)簽表進(jìn)行修改,這使其具備強(qiáng)大的擴(kuò)展能力;

          • 強(qiáng)大的查詢能力:Prometheus提供有數(shù)據(jù)查詢語言PromQL。從表現(xiàn)上來看,PromQL提供了大量的數(shù)據(jù)計(jì)算函數(shù),大部分情況下用戶都可以直接通過PromQL從Prometheus里查詢到需要的聚合數(shù)據(jù);

          • 健全的生態(tài): Prometheus能夠直接對(duì)常見操作系統(tǒng)、中間件、數(shù)據(jù)庫、硬件及編程語言進(jìn)行監(jiān)控;同時(shí)社區(qū)提供有Java/Golang/Ruby語言客戶端SDK,用戶能夠快速實(shí)現(xiàn)自定義監(jiān)控項(xiàng)及監(jiān)控邏輯;

          • 良好的性能:在性能方面來看,Prometheus提供了PromBench基準(zhǔn)測試,從最新測試結(jié)果來看,在硬件資源滿足的情況下,Prometheus單實(shí)例在每秒采集10w條監(jiān)控?cái)?shù)據(jù)的情況下,在數(shù)據(jù)處理和查詢方面依然有著不錯(cuò)的性能表現(xiàn);

          • 更契合的架構(gòu):采用推模型的監(jiān)控系統(tǒng),客戶端需要負(fù)責(zé)在服務(wù)端上進(jìn)行注冊及監(jiān)控?cái)?shù)據(jù)推送;而在Prometheus采用的拉模型架構(gòu)里,具體的數(shù)據(jù)拉取行為是完全由服務(wù)端來決定的。服務(wù)端是可以基于某種服務(wù)發(fā)現(xiàn)機(jī)制來自動(dòng)發(fā)現(xiàn)監(jiān)控對(duì)象,多個(gè)服務(wù)端之間能夠通過集群機(jī)制來實(shí)現(xiàn)數(shù)據(jù)分片。推模型想要實(shí)現(xiàn)相同的功能,通常需要客戶端進(jìn)行配合,這在微服務(wù)架構(gòu)里是比較困難的;

          • 成熟的社區(qū):Prometheus是CNCF組織第二個(gè)畢業(yè)的開源項(xiàng)目,擁有活躍的社區(qū);成立至今,社區(qū)已經(jīng)發(fā)布了一百多個(gè)版本,項(xiàng)目在 GitHub 上獲得的star數(shù)超過了3.8萬。

          可以這么說,Prometheus 天生為監(jiān)控而生。

          Prometheus架構(gòu)和組件

          Prometheus 的整體架構(gòu)以及生態(tài)系統(tǒng)組件如下圖所示:

          Prometheus Server 直接從監(jiān)控目標(biāo)中或者間接通過推送網(wǎng)關(guān)來拉取監(jiān)控指標(biāo),它在本地存儲(chǔ)所有抓取到的樣本數(shù)據(jù),并對(duì)此數(shù)據(jù)執(zhí)行一系列規(guī)則,以匯總和記錄現(xiàn)有數(shù)據(jù)的新時(shí)間序列或生成告警。可以通過 Grafana 或者其他工具來實(shí)現(xiàn)監(jiān)控?cái)?shù)據(jù)的可視化。
          Prometheus 生態(tài)圈中包含了多個(gè)組件,Prometheus 的主要模塊包括:Prometheus server, exporters, Pushgateway, PromQL, Alertmanager 以及圖形界面。其中許多組件是可選的:
          • Prometheus Server: 用于收集和存儲(chǔ)時(shí)間序列數(shù)據(jù)。

          • Client Library: 客戶端庫,為需要監(jiān)控的服務(wù)生成相應(yīng)的 metrics 并暴露給 Prometheus server。當(dāng) Prometheus server 來 pull 時(shí),直接返回實(shí)時(shí)狀態(tài)的 metrics。

          • Push Gateway: 主要用于短期的 jobs。由于這類 jobs 存在時(shí)間較短,可能在 Prometheus 來 pull 之前就消失了。為此,這次 jobs 可以直接向 Prometheus server 端推送它們的 metrics。這種方式主要用于服務(wù)層面的 metrics,對(duì)于機(jī)器層面的 metrices,需要使用 node exporter。

          • Exporters: 用于暴露已有的第三方服務(wù)的 metrics 給 Prometheus。

          • Alertmanager: 從 Prometheus server 端接收到 alerts 后,會(huì)進(jìn)行去除重復(fù)數(shù)據(jù),分組,并路由到對(duì)收的接受方式,發(fā)出報(bào)警。常見的接收方式有:電子郵件,pagerduty,OpsGenie, webhook 等。

          • 一些其他的工具。

          Prometheus 的工作流程如下:
          • Prometheus通過配置文件中指定的服務(wù)發(fā)現(xiàn)方式來確定要拉取監(jiān)控指標(biāo)的目標(biāo)(Target)。

          • 接著從要拉取的目標(biāo)(應(yīng)用容器和Pushgateway),發(fā)起HTTP請求到特定的端點(diǎn)(Metric Path),將指標(biāo)持久化至本身的TSDB中,TSDB最終會(huì)把內(nèi)存中的時(shí)間序列壓縮落到硬盤。

          • Prometheus會(huì)定期通過PromQL計(jì)算設(shè)置好的告警規(guī)則,決定是否生成告警到Alertmanager,后者接收到告警后會(huì)負(fù)責(zé)把通知發(fā)送到郵件或企業(yè)內(nèi)部群聊中。

          Prometheus的數(shù)據(jù)模型和核心概念

          Prometheus 所有采集的監(jiān)控?cái)?shù)據(jù)均以指標(biāo)(metric)的形式保存在內(nèi)置的時(shí)間序列數(shù)據(jù)庫當(dāng)中(TSDB):屬于同一指標(biāo)名稱,同一標(biāo)簽集合的、有時(shí)間戳標(biāo)記的數(shù)據(jù)流。除了存儲(chǔ)的時(shí)間序列,Prometheus 還可以根據(jù)查詢請求產(chǎn)生臨時(shí)的、衍生的時(shí)間序列作為返回結(jié)果。
          上面這段話是不是聽起來十分拗口?我們用人話來解釋一下:
          Prometheus 所采集到的數(shù)據(jù)被定義為【指標(biāo)】。存儲(chǔ)的數(shù)據(jù)為【時(shí)間序列】,所謂時(shí)間序列(或稱動(dòng)態(tài)數(shù)列)是指將同一統(tǒng)計(jì)指標(biāo)的數(shù)值按其發(fā)生的時(shí)間先后順序排列而成的數(shù)列。而存儲(chǔ)的數(shù)據(jù)庫為自帶的時(shí)序數(shù)據(jù)庫TSDB。
          指標(biāo)名稱和標(biāo)簽
          Prometheus 中每一條時(shí)間序列由指標(biāo)名稱(Metrics Name)以及一組標(biāo)簽(鍵值對(duì))唯一標(biāo)識(shí)。其中指標(biāo)的名稱(metric name)可以反映被監(jiān)控樣本的含義(例如,http_requests_total — 表示當(dāng)前系統(tǒng)接收到的 HTTP 請求總量),指標(biāo)名稱只能由 ASCII 字符、數(shù)字、下劃線以及冒號(hào)組成,同時(shí)必須匹配正則表達(dá)式 [a-zA-Z_:][a-zA-Z0-9_:]*。
          標(biāo)簽的名稱只能由 ASCII 字符、數(shù)字以及下劃線組成并滿足正則表達(dá)式 [a-zA-Z_][a-zA-Z0-9_]*。其中以 _作為前綴的標(biāo)簽,是系統(tǒng)保留的關(guān)鍵字,只能在系統(tǒng)內(nèi)部使用。標(biāo)簽的值則可以包含任何 Unicode 編碼的字符。
          樣本
          在時(shí)間序列中的每一個(gè)點(diǎn)稱為一個(gè)樣本(sample),樣本由以下三部分組成:
          • 指標(biāo)(metric):指標(biāo)名稱和描述當(dāng)前樣本特征的 labelsets;

          • 時(shí)間戳(timestamp):一個(gè)精確到毫秒的時(shí)間戳;

          • 樣本值(value):一個(gè) folat64 的浮點(diǎn)型數(shù)據(jù)表示當(dāng)前樣本的值。

          指標(biāo)類型
          Prometheus 的客戶端庫中提供了四種核心的指標(biāo)類型。
          • Counter:代表一種樣本數(shù)據(jù)單調(diào)遞增的指標(biāo),即只增不減,通常用來統(tǒng)計(jì)如服務(wù)的請求數(shù),錯(cuò)誤數(shù)等。

          • Gauge:代表一種樣本數(shù)據(jù)可以任意變化的指標(biāo),即可增可減,通常用來統(tǒng)計(jì)如服務(wù)的CPU使用值,內(nèi)存占用值等。

          • Histogram 和 Summary:用于表示一段時(shí)間內(nèi)的數(shù)據(jù)采樣和點(diǎn)分位圖統(tǒng)計(jì)結(jié)果,通常用來統(tǒng)計(jì)請求耗時(shí)或響應(yīng)大小等。

          講到這里,讀者是不是有所頓悟?還記得 Flink 中的指標(biāo)類型嗎?Flink 也提供了四種類型的監(jiān)控指標(biāo),分別是:Counter、Gauge、Histogram、Meter。

          Prometheus的安裝

          我們可以在官網(wǎng)下載Prometheus的安裝包:https://prometheus.io/download/ 。這里我們同時(shí)安裝Prometheus和Grafana,然后進(jìn)行解壓:
          tar xvfz prometheus-*.tar.gz
          cd prometheus-*
          啟動(dòng):
          $ cd prometheus/
          // 查看版本
          $ ./prometheus --version
          // 運(yùn)行server
          $ ./prometheus --config.file=prometheus.yml
          訪問本地的http://localhost:9090/ 即可以看到Prometheus的graph頁面。
          安裝grafana
          rpm -ivh grafana-6.5.2-1.x86_64.rpm
          啟動(dòng):
          service grafana-server start
          訪問http://localhost:3000/ 可以看到grafana 界面。
          當(dāng)然,Prometheus還有很多其他組件服務(wù)于不同的場景,例如pushgateway和nodeexporter。他們各自的作用可以在官網(wǎng)查看。我們暫時(shí)不做介紹。
          這里假設(shè)我們要監(jiān)控每一個(gè)服務(wù)器的狀態(tài),這時(shí)候我們就需要node_manager這個(gè)組件。
          我們也是直接安裝啟動(dòng):
          $ tar xvfz node_exporter-xxx.tar.gz
          // 進(jìn)入解壓出的目錄
          $ cd node_exporter-xxx
          // 運(yùn)行監(jiān)控采集服務(wù)
          $ ./node_exporter
          將node_exporter添加到Prometheus服務(wù)器,我們請求一下本地的http://localhost:9090/ 可以看到當(dāng)前機(jī)器的一些指標(biāo):

          總之,如果你要監(jiān)控不同的目標(biāo),那么就需要安裝Prometheus體系中不同的組件。關(guān)于詳細(xì)的安裝過程和配置過程我們不做過多展開,大家可以網(wǎng)上搜索有非常多的教程。

          Prometheus+Grafana+nodeManager+pushgateway打造企業(yè)級(jí)Flink平臺(tái)監(jiān)控系統(tǒng)

          我們先來看一下整體的監(jiān)控架構(gòu):

          這里面有幾個(gè)核心的組件:
          • Flink App :這是我們需要監(jiān)控的數(shù)據(jù)來源

          • Pushgateway+nodeManger : 都是Prometheus 生態(tài)中的組件,pushGateway服務(wù)收集Flink的指標(biāo),nodeMnager負(fù)責(zé)監(jiān)控運(yùn)行機(jī)器的狀態(tài)

          • Prometheus : 我們監(jiān)控系統(tǒng)的主角

          • Grafana:可視化展示

          關(guān)于這四個(gè)組建的安裝,我們不在仔細(xì)描述,大家可以參考網(wǎng)上的資源,我們重點(diǎn)講述一下配置文件。
          首先,flink.yaml文件的配置:
          metrics.reporter.promgateway.class: org.apache.flink.metrics.prometheus.PrometheusPushGatewayReporter
          metrics.reporter.promgateway.host: node1
          metrics.reporter.promgateway.port: 9091
          metrics.reporter.promgateway.jobName: flinkjobs
          metrics.reporter.promgateway.randomJobNameSuffix: false
          metrics.reporter.promgateway.deleteOnShutdown: true
          prometheus.yml中的配置:
          scrape_configs:
          - job_name: 'prometheus'
          static_configs:
          - targets: ['localhost:9090']
          labels:
          instance: 'prometheus'
          - job_name: 'linux'
          static_configs:
          - targets: ['localhost:9100']
          labels:
          instance: 'localhost'
          - job_name: 'pushgateway'
          static_configs:
          - targets: ['localhost:9091']
          labels:
          instance: 'pushgateway'
          然后我們把 Flink集群、nodeManager、pushGateway、Prometheus、Grafana分別啟動(dòng)起來。
          由于上面一句配置好Flink、 nodeManager、pushGateway,并且在Grafana中已經(jīng)添加了prometheus 數(shù)據(jù)源,所以Grafana中會(huì)自動(dòng)獲取到 flink job的metrics 。我們進(jìn)入 Grafana 首頁,點(diǎn)擊New dashboard,創(chuàng)建一個(gè)新的dashboard。

          選中之后,即會(huì)出現(xiàn)對(duì)應(yīng)的監(jiān)控指標(biāo)

          對(duì)于 Flink 任務(wù),我們需要監(jiān)控的指標(biāo)包括JobManager 服務(wù)器狀態(tài)、Checkpoint情況、程序運(yùn)行時(shí)長、Taskmanager內(nèi)存,流量。甚至可以加上operator的進(jìn)出流量用來定位反壓問題。

          業(yè)界典型應(yīng)用

          事實(shí)上Prometheus自從一出世,便受到了關(guān)注,我們用同程藝龍數(shù)據(jù)庫監(jiān)控系統(tǒng)的實(shí)踐來看一下生產(chǎn)上是如何使用Prometheus的。
          目前同程的整體監(jiān)控架構(gòu)設(shè)計(jì)如下圖所示:

          其中幾個(gè)關(guān)鍵的組件如下:
          Agent
          這是同程用 golang 開發(fā)的監(jiān)控信息采集 agent,負(fù)責(zé)采集監(jiān)控指標(biāo)和實(shí)例日志。監(jiān)控指標(biāo)包括了該宿主機(jī)的相關(guān)信息(實(shí)例、容器)。
          Pushgateway
          官方提供的組件,因?yàn)?Prometheus 是通過 pull 的方式獲取數(shù)據(jù)的,如果讓 Prometheus Server 去每個(gè)節(jié)點(diǎn)拉數(shù)據(jù),那么監(jiān)控服務(wù)的壓力就會(huì)很大,我們是在監(jiān)控幾千個(gè)實(shí)例的情況下做到 10s 的采集間隔(當(dāng)然采用聯(lián)邦集群的模式也可以,但是這樣就要需要部署 Prometheus Server。再加上告警相關(guān)的東西以后,整個(gè)架構(gòu)會(huì)變的比較復(fù)雜。)。所以 agent 采取數(shù)據(jù)推送至 pushgateway,然后由 Prometheus Server 去 pushgateway 上面 pull 數(shù)據(jù)。這樣在 Prometheus Server 在寫入性能滿足的情況下,單臺(tái)機(jī)器就可以承載整個(gè)系統(tǒng)的監(jiān)控?cái)?shù)據(jù)。考慮到跨機(jī)房采集監(jiān)控?cái)?shù)據(jù)的問題,可以在每個(gè)機(jī)房都部署 pushgateway 節(jié)點(diǎn),同時(shí)還能緩解單個(gè) pushgateway 的壓力。
          Prometheus Server
          Prometheus Server 去 pushgateway 上面拉數(shù)據(jù)的時(shí)間間隔設(shè)置為 10s。多個(gè) pushgateway 的情況下,就配置多個(gè)組即可。為了確保 Prometheus Server 的高可用,可以再加一個(gè) Prometheus Server 放到異地容災(zāi)機(jī)房,配置和前面的 Prometheus Server 一樣。如果監(jiān)控需要保留時(shí)間長的話,也可以配置一個(gè)采集間隔時(shí)間較大的 Prometheus Server,比如 5 分鐘一次,數(shù)據(jù)保留 1 年。
          Alertmanager
          使用 Alertmanager 前,需要先在 Prometheus Server 上面定義好告警規(guī)則。支持郵件、微信、webhook 多種類型,告警是通過 webhook 的方式,將觸發(fā)的告警推送至指定 API,然后通過這個(gè)接口的服務(wù)進(jìn)行二次加工。
          Grafana
          Prometheus 完美支持 Grafana,可以通過 PromQL 語法結(jié)合 Grafana,快速實(shí)現(xiàn)監(jiān)控圖的展示。為了和運(yùn)維平臺(tái)關(guān)聯(lián),通過 url 傳參的方式,實(shí)現(xiàn)了運(yùn)維平臺(tái)直接打開指定集群和指定實(shí)例的監(jiān)控圖。

          目前同程基于 Prometheus 的監(jiān)控系統(tǒng),承載了整個(gè)平臺(tái)所有實(shí)例、宿主機(jī)、容器的監(jiān)控。采集周期 10S,Prometheus 一分鐘內(nèi)每秒平均攝取樣本數(shù) 9-10W。僅僅使用一臺(tái)物理機(jī)(不包括高可用容災(zāi)資源)就可以承載當(dāng)前的流量,并且還有很大的容量空間(CPU\Memory\Disk)。如果未來單機(jī)無法支撐的情況下,可以擴(kuò)容成聯(lián)邦集群模式。



          利用InfluxDB+Grafana搭建Flink on YARN作業(yè)監(jiān)控大屏

          干掉ELK | 使用Prometheus+Grafana搭建監(jiān)控平臺(tái)

          一篇文章全面了解監(jiān)控知識(shí)體系


          歡迎點(diǎn)贊+收藏+轉(zhuǎn)發(fā)朋友圈素質(zhì)三連


          文章不錯(cuò)?點(diǎn)個(gè)【在看】吧!?
          瀏覽 106
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  日本黄色视频一区 | 欧美日成人久久久久手机版 | 青草娱乐视频分类 | 簧片天堂| 91香蕉在线视频 |