<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 的微服務(wù)指標(biāo)監(jiān)控

          共 3615字,需瀏覽 8分鐘

           ·

          2020-09-29 00:01

          在微服務(wù)架構(gòu)下隨著服務(wù)越來(lái)越多,定位問(wèn)題也變得越來(lái)越復(fù)雜,因此監(jiān)控服務(wù)的運(yùn)行狀態(tài)以及針對(duì)異常狀態(tài)及時(shí)的發(fā)出告警也成為微服務(wù)治理不可或缺的一環(huán)。服務(wù)的監(jiān)控主要有日志監(jiān)控、調(diào)用鏈路監(jiān)控、指標(biāo)監(jiān)控等幾種類型方式,其中指標(biāo)監(jiān)控在整個(gè)微服務(wù)監(jiān)控中比重最高,也是實(shí)際生產(chǎn)中排查問(wèn)題最重要的依賴

          指標(biāo)監(jiān)控又可以細(xì)分為多種類型:

          • 基礎(chǔ)監(jiān)控: 是針運(yùn)行服務(wù)的基礎(chǔ)設(shè)施的監(jiān)控,比如容器、虛擬機(jī)、物理機(jī)等,監(jiān)控的指標(biāo)主要有內(nèi)存的使用率,cpu 的使用率等資源的監(jiān)控,通過(guò)對(duì)資源的監(jiān)控和告警能夠及時(shí)發(fā)現(xiàn)資源瓶頸從而進(jìn)行擴(kuò)容操作避免影響服務(wù),同時(shí)針對(duì)資源的異常變化也能輔助定位服務(wù)問(wèn)題,比如內(nèi)存泄漏會(huì)導(dǎo)致內(nèi)存異常

          • 運(yùn)行時(shí)監(jiān)控: 運(yùn)行時(shí)監(jiān)控主要有 GC 的監(jiān)控包括 GC 次數(shù)、GC 耗時(shí),線程數(shù)量的監(jiān)控等等

          • 通用監(jiān)控: 通用監(jiān)控主要包括對(duì)流量和耗時(shí)的監(jiān)控,通過(guò)流量的變化趨勢(shì)可以清晰的了解到服務(wù)的流量高峰以及流量的增長(zhǎng)情況,流量同時(shí)也是資源分配的重要參考指標(biāo)。耗時(shí)是服務(wù)性能的直觀體現(xiàn),耗時(shí)比較大的服務(wù)我們往往需要進(jìn)行優(yōu)化,平均耗時(shí)往往參考價(jià)值不大,因?yàn)槲覀儾扇≈形粩?shù),包括 90、95、99 值等

          • 錯(cuò)誤監(jiān)控: 錯(cuò)誤監(jiān)控是服務(wù)健康狀態(tài)的直觀體現(xiàn),主要包括請(qǐng)求返回的錯(cuò)誤碼,如 HTTP 的錯(cuò)誤碼 5xx、4xx,熔斷、限流等等,通過(guò)對(duì)服務(wù)錯(cuò)誤率的觀察可以了解到服務(wù)當(dāng)前的健康狀態(tài)

          prometheus是一個(gè)開(kāi)源的系統(tǒng)監(jiān)控和告警工具,支持強(qiáng)大的查詢語(yǔ)言 PromQL 允許用戶實(shí)時(shí)選擇和匯聚時(shí)間序列數(shù)據(jù),時(shí)間序列數(shù)據(jù)是服務(wù)端通過(guò) HTTP 協(xié)議主動(dòng)拉取獲得,也可以通過(guò)中間網(wǎng)關(guān)來(lái)推送時(shí)間序列數(shù)據(jù),可以通過(guò)靜態(tài)配置文件或服務(wù)發(fā)現(xiàn)來(lái)獲取監(jiān)控目標(biāo),同時(shí)可以設(shè)置告警規(guī)則,prometheus 周期性通過(guò) PromQL 進(jìn)行計(jì)算,當(dāng)滿足條件就會(huì)觸發(fā)告警

          1 Prometheus 的架構(gòu)

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



          Prometheus Server 直接從監(jiān)控目標(biāo)中或者間接通過(guò)推送網(wǎng)關(guān)來(lái)拉取監(jiān)控指標(biāo),它在本地存儲(chǔ)所有抓取到樣本數(shù)據(jù),并對(duì)此數(shù)據(jù)執(zhí)行一系列規(guī)則,以匯總和記錄現(xiàn)有數(shù)據(jù)的新時(shí)間序列或生成告警。可以通過(guò) Grafana 或者其他工具來(lái)實(shí)現(xiàn)監(jiān)控?cái)?shù)據(jù)的可視化

          下面我們通過(guò)一個(gè)簡(jiǎn)單的實(shí)例來(lái)演示如何對(duì)微服務(wù)進(jìn)行指標(biāo)監(jiān)控,以及相關(guān)組件的使用

          2 go-zero 基于 Prometheus 的服務(wù)指標(biāo)監(jiān)控

          go-zero 框架中集成了基于 prometheus 的服務(wù)指標(biāo)監(jiān)控,下面我們通過(guò) go-zero 官方的示例shorturl來(lái)演示是如何對(duì)服務(wù)指標(biāo)進(jìn)行收集監(jiān)控的:

          • 第一步需要先安裝 Prometheus,安裝步驟請(qǐng)參考官方文檔

          • go-zero 默認(rèn)不開(kāi)啟 prometheus 監(jiān)控,開(kāi)啟方式很簡(jiǎn)單,只需要在 shorturl-api.yaml 文件中增加配置如下,其中 Host 為 Prometheus Server 地址為必填配置,Port 端口不填默認(rèn) 9091,Path 為用來(lái)拉取指標(biāo)的路徑默認(rèn)為/metrics

          Prometheus:
          Host: 127.0.0.1
          Port: 9091
          Path: /metrics
          • 編輯 prometheus 的配置文件 prometheus.yml,添加如下配置,并創(chuàng)建 targets.json

            - job_name: 'file_ds'
            file_sd_configs:
            - files:
            - targets.json
          • 編輯 targets.json 文件,其中 targets 為 shorturl 配置的目標(biāo)地址,并添加了幾個(gè)默認(rèn)的標(biāo)簽

            [{
            "targets": ["127.0.0.1:9091"],
            "labels": {
            "job": "shorturl-api",
            "app": "shorturl-api",
            "env": "test",
            "instance": "127.0.0.1:8888"
            }
            }]
          • 啟動(dòng) prometheus 服務(wù),默認(rèn)偵聽(tīng)在 9090 端口

            prometheus --config.file=prometheus.yml
          • 在瀏覽器輸入http://127.0.0.1:9090/Status,然后點(diǎn)擊 -> Targets 即可看到狀態(tài)為 Up 的 Job,并且 Lables 欄可以看到我們配置的默認(rèn)的標(biāo)簽


          通過(guò)以上幾個(gè)步驟我們完成了 prometheus 對(duì) shorturl 服務(wù)的指標(biāo)監(jiān)控收集的配置工作,為了演示簡(jiǎn)單我們進(jìn)行了手動(dòng)的配置,在實(shí)際的生產(chǎn)環(huán)境中一般采用定時(shí)更新配置文件或者服務(wù)發(fā)現(xiàn)的方式來(lái)配置監(jiān)控目標(biāo),篇幅有限這里不展開(kāi)講解,感興趣的同學(xué)請(qǐng)自行查看相關(guān)文檔

          3 go-zero 監(jiān)控的指標(biāo)類型

          go-zero 中目前在 http 的中間件和 rpc 的攔截器中添加了對(duì)請(qǐng)求指標(biāo)的監(jiān)控。

          主要從請(qǐng)求耗時(shí)和請(qǐng)求錯(cuò)誤兩個(gè)維度,請(qǐng)求耗時(shí)采用了 Histogram 指標(biāo)類型定義了多個(gè) Buckets 方便進(jìn)行分位統(tǒng)計(jì),請(qǐng)求錯(cuò)誤采用了 Counter 類型,并在 http metric 中添加了 path 標(biāo)簽 rpc metric 中添加了 method 標(biāo)簽以便進(jìn)行細(xì)分監(jiān)控。

          接下來(lái)演示如何查看監(jiān)控指標(biāo):

          首先在命令行多次執(zhí)行如下命令

          curl -i "http://localhost:8888/shorten?url=http://www.xiaoheiban.cn"

          打開(kāi) Prometheus 切換到 Graph 界面,在輸入框中輸入{path="/shorten"}指令,即可查看監(jiān)控指標(biāo),如下圖


          我們通過(guò) PromQL 語(yǔ)法查詢過(guò)濾 path 為/shorten 的指標(biāo),結(jié)果中顯示了指標(biāo)名以及指標(biāo)數(shù)值,其中 http_server_requests_code_total 指標(biāo)中 code 值為 http 的狀態(tài)碼,200 表明請(qǐng)求成功,http_server_requests_duration_ms_bucket 中對(duì)不同 bucket 結(jié)果分別進(jìn)行了統(tǒng)計(jì),還可以看到所有的指標(biāo)中都添加了我們配置的默認(rèn)指標(biāo)

          Console 界面主要展示了查詢的指標(biāo)結(jié)果,Graph 界面為我們提供了簡(jiǎn)單的圖形化的展示界面,在實(shí)際的生產(chǎn)環(huán)境中我們一般使用 Grafana 做圖形化的展示

          4 grafana 可視化界面

          grafana是一款可視化工具,功能強(qiáng)大,支持多種數(shù)據(jù)來(lái)源 Prometheus、Elasticsearch、Graphite 等,安裝比較簡(jiǎn)單請(qǐng)參考官方文檔,grafana 默認(rèn)端口 3000,安裝好后再瀏覽器輸入http://localhost:3000/admin,默認(rèn)賬號(hào)和密碼都為

          下面演示如何基于以上指標(biāo)進(jìn)行可視化界面的繪制:

          • 點(diǎn)擊左側(cè)邊欄 Configuration->Data Source->Add data source 進(jìn)行數(shù)據(jù)源添加,其中 HTTP 的 URL 為數(shù)據(jù)源的地址


          • 點(diǎn)擊左側(cè)邊欄添加 dashboard,然后添加 Variables 方便針對(duì)不同的標(biāo)簽進(jìn)行過(guò)濾篩選比如添加 app 變量用來(lái)過(guò)濾不同的服務(wù)


          • 進(jìn)入 dashboard 點(diǎn)擊右上角 Add panel 添加面板,以 path 維度統(tǒng)計(jì)接口的 qps


          • 最終的效果如下所示,可以通過(guò)服務(wù)名稱過(guò)濾不同的服務(wù),面板展示了 path 為/shorten 的 qps 變化趨勢(shì)


          5 總結(jié)

          以上演示了 go-zero 中基于 prometheus+grafana 服務(wù)指標(biāo)監(jiān)控的簡(jiǎn)單流程,生產(chǎn)環(huán)境中可以根據(jù)實(shí)際的場(chǎng)景做不同維度的監(jiān)控分析。現(xiàn)在 go-zero 的監(jiān)控指標(biāo)主要還是針對(duì) http 和 rpc,這對(duì)于服務(wù)的整體監(jiān)控顯然還是不足的,比如容器資源的監(jiān)控,依賴的 mysql、redis 等資源的監(jiān)控,以及自定義的指標(biāo)監(jiān)控等等,go-zero 在這方面后續(xù)還會(huì)持續(xù)優(yōu)化

          監(jiān)控不是萬(wàn)能的,雖然監(jiān)控能幫助我們及時(shí)的發(fā)現(xiàn)問(wèn)題,但很多場(chǎng)景下告警一旦產(chǎn)生可能就已經(jīng)對(duì)用戶產(chǎn)生了影響,所以我們應(yīng)該提前預(yù)測(cè)問(wèn)題發(fā)生的可能,采取的手段主要有對(duì)服務(wù)的壓測(cè),對(duì)使用資源的評(píng)估,以及定期的進(jìn)行服務(wù)巡檢等等,希望本文能給大家?guī)?lái)幫助

          項(xiàng)目地址

          https://github.com/tal-tech/go-zero

          微信交流群

          2020 GopherChinaCon 隆重開(kāi)啟!


          時(shí)間:2020年11月20-22日

          地點(diǎn):上海由由喜來(lái)登酒店


          報(bào)名方式:點(diǎn)擊“閱讀原文”,早鳥(niǎo)票火熱開(kāi)啟中

          瀏覽 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>
                  天天干天天草 | 日韩一级视频网站 | 毛片88| av毛片网 | 偷窥AV在线 |