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

          斗魚(yú) Juno 監(jiān)控中心的設(shè)計(jì)與實(shí)現(xiàn)

          共 4810字,需瀏覽 10分鐘

           ·

          2020-06-23 23:24

          前言

          伴隨微服務(wù)的推廣,程序粒度的日趨小型化,服務(wù)數(shù)量逐漸增長(zhǎng),需要更多的關(guān)注服務(wù)本身的監(jiān)控,服務(wù)上下游服務(wù)情況,以及相關(guān)數(shù)據(jù)源中間件的狀態(tài)。我們需要更加多維度服務(wù)監(jiān)控,能夠?qū)Ψ?wù)調(diào)用鏈路進(jìn)行可視化、對(duì)目標(biāo)服務(wù)調(diào)用時(shí)客戶(hù)端與服務(wù)端的實(shí)時(shí)監(jiān)控。在 Juno 監(jiān)控中心,我們嘗試解決這些問(wèn)題。


          為什么需要監(jiān)控中心

          ? ?
          在行業(yè)內(nèi)越來(lái)越多的公司需要開(kāi)發(fā)人員懂得服務(wù)器基礎(chǔ)架構(gòu)、操作系統(tǒng)、網(wǎng)絡(luò)、語(yǔ)言特性、業(yè)務(wù)整體架構(gòu)、面對(duì)線上問(wèn)題快速分析快速定位、還包括服務(wù)性能調(diào)優(yōu),對(duì)這些方面的要求就是 Google 倡導(dǎo)的 SRE(站點(diǎn)可靠性工程師)。這項(xiàng)工作依賴(lài)于很多工具才能順利完成,例如日志系統(tǒng)、發(fā)布系統(tǒng)、監(jiān)控系統(tǒng)等等。
          在斗魚(yú)微服務(wù)管理系統(tǒng) Juno,其中的監(jiān)控中心的設(shè)計(jì)就是為協(xié)助開(kāi)發(fā)人員進(jìn)行高效的服務(wù)穩(wěn)定性維護(hù)工作,完成對(duì)微服務(wù)系統(tǒng)的健康支持:

          • 水位瓶頸,在斗魚(yú)進(jìn)行全鏈路壓測(cè),通過(guò)監(jiān)控系統(tǒng)可以找到服務(wù)鏈路中的瓶頸,了解核心項(xiàng)目的具體水位;

          • 故障預(yù)防,采用環(huán)比和同步數(shù)據(jù)進(jìn)行服務(wù)健康波動(dòng)分析,進(jìn)行一定程度上的異常預(yù)防;

          • 故障排查,線上故障快速定位,給出服務(wù)調(diào)用鏈路,從監(jiān)控異常數(shù)據(jù)開(kāi)始分析,排查影響范圍,定位問(wèn)題觸發(fā)點(diǎn)。

          ?

          主流產(chǎn)品差異性

          只針對(duì)市場(chǎng)上的免費(fèi)解決方案進(jìn)行分析,目前分析的 Zabbix、Nagios 都比較偏向于基礎(chǔ)運(yùn)維監(jiān)控工具。Juno 監(jiān)控中心是 Grafana 和 Prometheus 的最佳實(shí)踐之一,更偏向于業(yè)務(wù)監(jiān)控。

          ?優(yōu)點(diǎn)缺點(diǎn)
          Zabbix
          - 數(shù)據(jù)采集方式多樣
          - 可用性高
          - 歷史數(shù)據(jù)可查詢(xún)
          - 安全審計(jì)

          - 性能瓶頸
          - 二次開(kāi)發(fā)難度
          - housekeeping 的數(shù)據(jù)庫(kù)壓力

          Nagios
          - 配置靈活
          - 多樣性的報(bào)警條件設(shè)置


          - 無(wú)歷史數(shù)據(jù)存儲(chǔ)
          - 配置復(fù)雜
          - 控制臺(tái)功能較弱


          Juno 監(jiān)控中心簡(jiǎn)介


          Juno 監(jiān)控中心理念

          Juno 監(jiān)控中心有三個(gè)核心理念:容量水位;監(jiān)控預(yù)警;快速定位。


          容量水位

          容量水位:服務(wù)可以承受多少的 QPS。通過(guò)全鏈路壓測(cè)的方式獲取對(duì)外提供 API 在微服務(wù)體系中的整體鏈路,首先探測(cè)服務(wù)本身可承載的容量是多少,針對(duì)危險(xiǎn)水位進(jìn)行數(shù)據(jù)采集,并以此作為流量變化后的擴(kuò)容依據(jù)。

          4e1528f613ea2fa11afa6ff52b9a20da.webp



          監(jiān)控預(yù)警

          監(jiān)控預(yù)警:多個(gè)維度進(jìn)行監(jiān)控預(yù)警。

          • 服務(wù)響應(yīng)時(shí)間、QPS、成功率這三個(gè)基礎(chǔ)維度進(jìn)行告警配置;

          • 對(duì)各指標(biāo)根據(jù)歷史數(shù)據(jù)進(jìn)行環(huán)比計(jì)算預(yù)警;

          • 進(jìn)一步根據(jù)服務(wù)各自的水位進(jìn)行兜底告警。

          1e3a975c1c76f6bfba383b7e6abca62e.webp



          快速定位

          快速定位:在故障發(fā)生是,通過(guò)響應(yīng)速度來(lái)判斷在哪個(gè)服務(wù)出現(xiàn)了問(wèn)題,通過(guò) TOP 指標(biāo)和上下游鏈路解析快速定位異常點(diǎn),再進(jìn)一步結(jié)合異常服務(wù)上下文監(jiān)控?cái)?shù)據(jù)和日志數(shù)據(jù)進(jìn)行錯(cuò)誤分析。在異常恢復(fù)后也可以通過(guò)監(jiān)控進(jìn)行判斷服務(wù)狀態(tài)。

          8685db92c201e9de6260c8b24e00ba49.webp


          b6a0b134776b7ec77baff8d652e8c92d.webp



          Juno 監(jiān)控中心特點(diǎn)

          部署簡(jiǎn)單依賴(lài) ETCD 和 prometheus 進(jìn)行部署,數(shù)據(jù)采集和服務(wù)治理采用基本一致的組件
          插件支持結(jié)合 Juno Agent 進(jìn)行數(shù)據(jù)采集插件化配置
          管理后臺(tái)在 web 界面進(jìn)行配置定制化加載,定制化的交互
          配置監(jiān)控客戶(hù)端配置信息監(jiān)控;管理后臺(tái)直接展示配置在哪些實(shí)例上被哪些服務(wù)使用
          自動(dòng)發(fā)現(xiàn)基于 Juno Agent 的心跳上報(bào)進(jìn)行監(jiān)控?cái)?shù)據(jù)節(jié)點(diǎn)發(fā)現(xiàn)
          告警配置服務(wù)告警條件配置豐富


          Juno 監(jiān)控中心設(shè)計(jì)

          總體設(shè)計(jì)

          層次設(shè)計(jì)

          下圖描述 Juno 監(jiān)控中心的總體設(shè)計(jì),從下往上分析:

          2dec80c1c5da3affe86db984253130fa.webp


          • 采用 Jupiter 框架構(gòu)建的客戶(hù)端,服務(wù)啟動(dòng)之后會(huì)在 ETCD 中寫(xiě)入監(jiān)控的 KEY;

          • Juno Agent 服務(wù)監(jiān)聽(tīng)到監(jiān)控的 KEY,生成 Prometheus 的 Target 配置;

          • Prometheus 根據(jù) Target 配置讀取 Jupiter Client 的監(jiān)控?cái)?shù)據(jù);

          • 在 Juno Admin 內(nèi)嵌 Grafana 讀取 Prometheus 進(jìn)行監(jiān)控?cái)?shù)據(jù)展示。


          客戶(hù)端設(shè)計(jì)

          下圖簡(jiǎn)要描述 Jupiter 客戶(hù)端(Jupiter Client)的部分:

          2e56bfb977fddc82749ea81dd5426272.webp


          1. 用戶(hù)構(gòu)建 Jupiter Client,在 ETCD 中寫(xiě)入監(jiān)控的 key-value;

          2. 同時(shí) Jupiter Client 提供一個(gè)自建的 Prometheus

            Pushgateway(http://xxx.xxx.xxx.xxx:9999/metrics);

          3. Prometheus 由 Juno Agent 生成 Target 配置后周期性的 pull 監(jiān)控?cái)?shù)據(jù);


          服務(wù)端設(shè)計(jì)

          核心流程就是 Grafana 增加 Prometheus 數(shù)據(jù)源,Prometheus 通過(guò) Juno Agent 生成的配置進(jìn)行監(jiān)控?cái)?shù)據(jù)拉取。這里 Juno Agent 僅僅只用于 Prometheus 配置的生成,不上報(bào)任何的監(jiān)控?cái)?shù)據(jù)。

          52e56dc9d3ac9b8bcb621d2bacf78273.webp

          Juno Agent 生成的 Target 配置如下:


          - targets:
          - "127.0.0.1:9999"
          labels:
          instance: monitor-demo
          job: jupiter

          如果需要增加其他的監(jiān)控?cái)?shù)據(jù),可以不使用 Juno Agent,直接在 Prometheus 中增加期望的 Pushgateway,并且在 Juno Admin 中的 Grafana 配置管理中直接增加模板地址即可進(jìn)行嵌入展示。以下按照我們使用的監(jiān)控?cái)?shù)據(jù)上報(bào)格式舉例,Jupiter Client 會(huì)將服務(wù)啟動(dòng)時(shí)相關(guān)的:應(yīng)用版本、機(jī)器 IP、機(jī)器名稱(chēng)、應(yīng)用信息寫(xiě)入 buid_info 中,這些基礎(chǔ)數(shù)據(jù)會(huì)作為其他監(jiān)控直接的基礎(chǔ) label,進(jìn)行后續(xù)的監(jiān)控條件篩選。


          kubernetes 集群部署方案

          虛擬容器化是大勢(shì)所趨,Juno 監(jiān)控中心對(duì) k8s 集群的支持方案基本與物理機(jī)部署方案一致,容器會(huì)產(chǎn)生 Pushgateway 地址漂移,從管理后臺(tái)通過(guò) UI 界面查詢(xún)需要根據(jù)歷史 POD 數(shù)據(jù)進(jìn)行歷史監(jiān)控?cái)?shù)據(jù)查詢(xún)。


          多機(jī)房部署方案設(shè)計(jì)

          Juno 監(jiān)控中心支持多機(jī)房(IDC),在實(shí)際業(yè)務(wù)場(chǎng)景中會(huì)同時(shí)使用多地區(qū)的機(jī)房,機(jī)房之間不進(jìn)行跨機(jī)房通信,
          每個(gè)機(jī)房都搭建獨(dú)立的 ETCD 和 Prometheus,監(jiān)控?cái)?shù)據(jù)在各機(jī)房進(jìn)行獨(dú)立存儲(chǔ),管理后臺(tái)(Juno Admin)通過(guò)內(nèi)嵌 Grafana 訪問(wèn)各機(jī)房 Prometheus。所有的數(shù)據(jù)流轉(zhuǎn)由某一個(gè)部署監(jiān)控中心管理后臺(tái)的機(jī)房完成,該機(jī)房依靠專(zhuān)線與其他機(jī)房進(jìn)行通信,在遭遇專(zhuān)線網(wǎng)絡(luò)故障時(shí),可直接切換到外網(wǎng) IP 保證服務(wù)穩(wěn)定,對(duì)不同機(jī)房間的操作互相隔離,不產(chǎn)生依賴(lài)影響。
          !

          2aea2b321e4a4a181398deb4430a8d40.webp



          技術(shù)點(diǎn)詳解

          監(jiān)控?cái)?shù)據(jù)采集實(shí)現(xiàn)

          1. 部署基礎(chǔ)服務(wù)包括 ETCD 和 Prometheus;

          2. 采用 Jupiter 框架構(gòu)建服務(wù),成功啟動(dòng)服務(wù)后會(huì)完成兩個(gè)操作:

            1. 寫(xiě)入監(jiān)控 key-value;

            2. 通過(guò)服務(wù)治理端口提供 Pushgateway;

          3. 在 Prometheus 部署的機(jī)器上,進(jìn)行 Juno Agent 服務(wù)部署完成兩個(gè)功能:

            1. 進(jìn)行 ETCD 的監(jiān)控 key-value 監(jiān)聽(tīng);

            2. 通過(guò)監(jiān)聽(tīng)的數(shù)據(jù)產(chǎn)生 Prometheus 需要的 Target 配置;

          4. 在 Prometheus 配置生成完畢后,直接拉取 Jupiter Client 的 Pushgateway 數(shù)據(jù),完成監(jiān)控?cái)?shù)據(jù)的采集。

          ?

          監(jiān)控采集時(shí)序圖

          配置的整個(gè)生命周期流轉(zhuǎn)如下圖所示,歸納為四個(gè)配置點(diǎn)進(jìn)行表述:管理后臺(tái)(前端交互 UI)、配置服務(wù)(管理后臺(tái)服務(wù))、下發(fā)服務(wù)(Minerva Proxy+Minerva Agent)、應(yīng)用。

          22546a0e51887019852cb69ce3cb739b.webp



          網(wǎng)關(guān)功能

          采用 Grafana 子域名配置,直接使用 Juno Admin 的域名例如(http://jupiterconsole.douyu.com/),配置為(http://jupiterconsole.douyu.com/grafana)直接進(jìn)行訪問(wèn),采用 juno 系統(tǒng)的登錄態(tài)以及用戶(hù)信息,統(tǒng)一了用戶(hù)權(quán)限管理。
          !

          165e1f8137736c70d593f487b2c58597.webp


          目前網(wǎng)關(guān)功能在后期可擴(kuò)展成對(duì)任意無(wú)狀態(tài)的三方系統(tǒng)的鑒權(quán)支持,只需要在 Juno Admin 網(wǎng)關(guān)設(shè)置中進(jìn)行域名以及目標(biāo)地址的配置即可。



          可用性分析

          分析多故障場(chǎng)景,當(dāng)前 Juno 監(jiān)控中心的降級(jí)方案如下:

          場(chǎng)景影響降級(jí)方案
          Juno Agent 掛掉新增服務(wù)無(wú)法生成對(duì)應(yīng)的 Prometheus Target 配置,拉取不到監(jiān)控?cái)?shù)據(jù)。不影響已有服務(wù)的監(jiān)控采集與查詢(xún)
          某個(gè) ETCD 節(jié)點(diǎn)掛掉無(wú)影響Juno Agent 可以重連其他 ETCD 節(jié)點(diǎn)
          全部 ETCD 節(jié)點(diǎn)掛掉Jupiter Client 啟動(dòng)后無(wú)法成功寫(xiě)入監(jiān)控 Key,同樣無(wú)法生成 Target 配置。不影響已有服務(wù)的監(jiān)控采集與查詢(xún)
          Prometheus 掛掉無(wú)法采集監(jiān)控?cái)?shù)據(jù)
          Grafana 掛掉無(wú)法查詢(xún)監(jiān)控?cái)?shù)據(jù)
          專(zhuān)線故障監(jiān)控?cái)?shù)據(jù)拉取失敗使用公網(wǎng) IP 繼續(xù)相關(guān)操作


          為什么選擇 ETCD

          為什么采用 ETCD 作為監(jiān)控中心和配置存儲(chǔ)/訂閱通知引擎,而不是使用傳統(tǒng)的 ZK,Eureka?我們大致總結(jié)了一下,有以下幾方面的原因:

          • 它提供了強(qiáng)大和靈活的 K-V 存儲(chǔ)能力,可以在保證性能的前提下對(duì)配置項(xiàng)進(jìn)行最小粒度對(duì)存儲(chǔ);

          • 它提供了對(duì) key 或者 key 前綴的監(jiān)聽(tīng)功能,正好滿足我們對(duì)某些配置項(xiàng)需要?jiǎng)討B(tài)下發(fā)的需求;

          • 我們的項(xiàng)目本身就使用了 ETCD 做服務(wù)注冊(cè)與發(fā)現(xiàn)和存儲(chǔ)功能,維護(hù)和使用相對(duì)于 zk,Eureka 會(huì)熟練的多。


          為什么采用 Prometheus

          為什么監(jiān)控中心采用 Prometheus 進(jìn)行監(jiān)控指標(biāo)存儲(chǔ),有以下幾個(gè)原因:

          • Prometheus 是 CNCF 旗下成熟的開(kāi)源項(xiàng)目,社區(qū)活躍;

          • 數(shù)據(jù)模型靈活,多樣性的 label,在數(shù)據(jù)采集階段支持?jǐn)?shù)據(jù)屬性自定義;

          • PromQL,強(qiáng)大的查詢(xún)能力,多功能封裝的查詢(xún)語(yǔ)句,能滿足絕大多數(shù)業(yè)務(wù)場(chǎng)景;

          • 良好的性能,支持每秒十萬(wàn)條以上的監(jiān)控?cái)?shù)據(jù)采集。


          交互設(shè)計(jì)


          界面概覽

          下圖是 Juno 監(jiān)控中心的首頁(yè)。

          22fb40fb5183c241e09443f72214796d.webp


          • 頁(yè)面上方:

            • 應(yīng)用選擇以及環(huán)境切換,展示了應(yīng)用相關(guān)的基礎(chǔ)信息;

            • 機(jī)房切換;

            • 應(yīng)用服務(wù)可用功能模塊切換;

          • 頁(yè)面中央,采用按鈕形式展示了可用 Dashboard;

          • 頁(yè)面下方,嵌入 Grafana 監(jiān)控頁(yè)面。

          ?

          服務(wù)概覽

          服務(wù)概覽有三個(gè)側(cè)重點(diǎn):響應(yīng)時(shí)間、QPS、成功率。這是對(duì)服務(wù)整體質(zhì)量的評(píng)價(jià)。

          56b03a41b2852d9155717c78273d7cd9.webp



          健康檢查

          目前服務(wù)在某一環(huán)境中部署的實(shí)例數(shù)量,是否存在異常情況,最大的文件句柄數(shù)、CPU 消耗、內(nèi)存使用、QPS 指標(biāo),能幫助用戶(hù)在第一時(shí)間了解的當(dāng)前服務(wù)的具體情況,進(jìn)一步服務(wù)心跳更新時(shí)間,當(dāng)前采用的框架版本相關(guān)的 git 提交版本,都進(jìn)行表格化展示,可以為問(wèn)題排查提供更多的客觀數(shù)據(jù)。

          00cf43ce1b3967c542bd3a0f00a9140b.webp



          實(shí)例監(jiān)控

          從實(shí)例維度進(jìn)行服務(wù)監(jiān)控分析。

          b0ff37ca42ffafe6ec22f2fd825ebc0a.webp


          服務(wù)端監(jiān)控

          服務(wù)本身對(duì)外提供服務(wù)的情況,依據(jù) HTTP 和 GRPC 進(jìn)行區(qū)分,給出 QPS 和 P99 的數(shù)據(jù)。

          65ab1ad5f8e38d5c5311cbe4cf7fd5d0.webp



          接口監(jiān)控

          對(duì)服務(wù)提供的具體 API 進(jìn)行監(jiān)控指標(biāo)采集和展示。

          d91f6f3d14ffba67bf934ee00082d9e6.webp



          客戶(hù)端監(jiān)控

          查詢(xún)當(dāng)前服務(wù)對(duì)下游服務(wù)的調(diào)用情況監(jiān)控,可以快速定位是服務(wù)本身異常,還是下游服務(wù)異常。

          4ea42c54779dcb06ab325b9195dc76e6.webp



          容器監(jiān)控

          服務(wù)容器化部署之后,給出對(duì) pod 情況的獨(dú)立監(jiān)控,可結(jié)合服務(wù)本身監(jiān)控進(jìn)行交集查詢(xún)。

          d7eebaf02aade34a3ffa55a3186a3aed.webp



          模板配置

          提供模板配置的功能,用戶(hù)可以自行修改 Dashboard 地址,系統(tǒng)會(huì)依次展示這些 Dashboard。

          5c9249c88937e52c897841e4814cef95.webp



          總結(jié)

          本文從 Juno 監(jiān)控中心的層次結(jié)構(gòu)開(kāi)始分析,說(shuō)明了服務(wù)監(jiān)控采集流程包括客戶(hù)端、服務(wù)端的設(shè)計(jì),講解了部分技術(shù)點(diǎn)包括采集時(shí)序圖、網(wǎng)關(guān)設(shè)計(jì)等;在架構(gòu)分析的基礎(chǔ)上對(duì)各個(gè)功能點(diǎn)進(jìn)行分析,希望幫助各位進(jìn)一步理解我們的設(shè)計(jì)思維;最后展示監(jiān)控相關(guān)的交互頁(yè)面,以及斗魚(yú) Juno 監(jiān)控中心設(shè)計(jì)的監(jiān)控系統(tǒng)設(shè)置界面。


          相關(guān)資料

          • jupiter 官網(wǎng)?http://jupiter.douyu.com

          • jupiter 倉(cāng)庫(kù)地址

            https://github.com/douyu/jupiter

          • juno 倉(cāng)庫(kù)地址?

            https://github.com/douyu/juno

          • demo 演示地址?

            http://jupiterconsole.douyu.com


          ?

          加入斗魚(yú)開(kāi)源技術(shù)交流群





          瀏覽 136
          點(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>
                  操笔视频 | 神马午夜久久 | 激情五月天综合 | 男女练啪在线观看视频 | 在线看片国产 |