• <bdo id="qgeso"></bdo>
        • <strike id="qgeso"></strike>
        • <sup id="qgeso"></sup><center id="qgeso"></center>
        • <input id="qgeso"></input>

          全球最新:prometheus 服務發現原理

          首頁 > 探索 > > 正文

          日期:2023-03-26 21:17:04    來源:騰訊云    

          服務發現

          概述

          如上圖,Prometheus核心功能包括服務發現、數據采集和數據存儲。服務發現模塊專門負責發現需要監控的目標采集點(target)信息,數據采集模塊從服務發現模塊訂閱該信息,獲取到target信息后,其中就包含協議(scheme)、主機地址:端口(instance)、請求路徑(metrics_path)、請求參數(params)等;然后數據采集模塊就可以基于這些信息構建出一個完整的Http Request請求,定時通過pull http協議不斷的去目標采集點(target)拉取監控樣本數據(sample);最后,將采集到監控樣本數據交由TSDB模塊進行數據存儲。


          【資料圖】

          為什么需要服務發現模塊?

          類似于微服務通過引入注冊中心組件解決眾多微服務間錯綜復雜的依賴調用。無論是服務主動停止,意外掛掉,還是因為流量增加對服務實現進行擴容,這些服務數據或狀態上的動態變化,通過注冊中心屏蔽服務狀態變更造成的影響,簡化了調用方處理邏輯。

          同理,Prometheus最開始設計是一個面向云原生應用程序的,云原生、容器場景下按需的資源使用方式對于監控系統而言就意味著沒有了一個固定的監控目標,所有的監控對象(基礎設施、應用、服務)都在動態的變化。Prometheus解決方案就是引入一個中間的代理人,這個代理人掌握著當前所有監控目標的訪問信息,Prometheus只需要向這個代理人詢問有哪些監控目標即可,這種模式被稱為服務發現(service discovery)。

          目前,Prometheus支持的服務發現協議是非常豐富的,最新版本(2.41)已支持接近三十種服務發現協議:

          服務發現配置解析

          1、Prometheus服務啟動加載prometheus.yml配置文件會被解析Config結構體:

          ?

          Config結構體是配置類的最頂層結構,內部包含6個字段分別對應prometheus配置的6大組成部分。

          ?

          2、其中數據采集配置部分ScrapeConfigs對應的是一個*ScrapeConfig類型切片,一個ScrapeConfig對應的是scrape_configs配置下的一個job抓取任務,服務發現協議配置對應其中ServiceDiscoveryConfigs字段:

          3、discovery.Configs對應的是Config切片:

          type Configs []Config

          所以,一個job抓取任務下可以配置多個服務發現協議,如:

          - job_name: "prometheus"  metrics_path: /metrics  static_configs:    - targets: ["124.222.45.207:9090"]  file_sd_configs:    - files:      - targets/t1.json      - targets/t2.json      refresh_interval: 5m

          4、Config是一個接口:

          Config是一個接口的定義,每種服務發現協議都會存在一個對應Config接口的實現(見下圖)。該接口主要定義兩個方法:

          1、Name() string:定義服務發現協議類型,如eureka、kubernetes等等;2、NewDiscoverer(DiscovererOptions) (Discoverer, error):返回一個Discoverer類型變量,該類型也是一個接口,其只定義了一個方法Run方法,即Discoverer是對應的服務發現協議具體運行邏輯封裝,通過Run方法提供統一的運行入口。
          服務發現核心原理

          說明:

          Prometheus服務發現核心邏輯的入口主要關注Manager結構體的ApplyConfig方法:基于服務發現的配置使其生效;

          ApplyConfig方法包括四個主要步驟:

          type provider struct { name   string d      Discoverer subs   []string config interface{}}

          ?一個job下一個服務發現協議對應一個Discoverer。?

          provider還有額外三個字段:

          1、nameprovider名稱,格式:fmt.Sprintf("%s/%d", typ, len(m.providers))

          2、subsstring切片,存放job名稱,因為可能不同job下存在一致的服務發現配置,就只會生成一個provider,然后subs存放job列表;

          3、config:服務發現配置

          啟動Discoverer接口Run方法,讓服務發現邏輯運行;協程中運行updater方法;Discoverer接口Run方法主要基于具體服務發現協議發現target,然后通過通道傳遞給updater處理邏輯,將其解析處理放入到Manager結構體中targets字段中,并向triggerSend通道發送信號,表示當前targets發生變更;Manager結構體sender方法每5秒監聽triggerSend通道信號,并將Manager結構體中targets字段處理后放入到syncCh通道中;數據采集模塊(scrape)監聽syncCh通道,就可以獲取到服務發現生成的targets信息,然后reloadtarget納入監控開始抓取監控指標。啟動provider:遍歷Manager結構體中providers切片,啟動每個provider,該步驟主要是啟動兩個協程:?Manager結構體sender方法是在Prometheus啟動時discoveryManagerScrape.Run()方法中啟動。?取消服務發現:配置變更也會調用ApplyConfig方法,這時就要把基于之前配置運行的服務發現服務取消,然后基于當前配置重新生成;清空:主要清空discoverCanceltargetsproviders幾個容器元素,因為要基于當前配置重新生成;注冊providerprovider是對Discoverer的封裝,不同服務發現協議都會實現Config接口,其中NewDiscoverer方法就是創建Discoverer

          「Prometheus服務發現核心就是三個協程之間協作:」

          「協程1:」負責運行Discoverer接口Run方法,基于協議發現采集點;「協程2:」負責將協程1發現的采集點信息更新到Manager結構體中targets字段的map中;「協程3:」負責將Manager結構體中targets字段的數據通過通道發送給scrape模塊;

          scrape模塊獲取到采集點如何進行數據采集后續scrape模塊分析。

          監控指標

          Prometheus服務發現通用指標主要有如下5個,都定義在discovery/manager.go中:

          prometheus_sd_discovered_targetsprometheus_sd_failed_configsprometheus_sd_received_updates_totalprometheus_sd_updates_delayed_totalprometheus_sd_updates_total

          「1、采集點數量指標」

          服務發現主要基于協議發現采集目標,prometheus_sd_discovered_targets指標反饋各個job發現的采集目標數:

          prometheus_sd_discovered_targets:gauge類型,當前發現的目標數config:job名稱name:取值scrape和notify,區分指標抓取服務發現還是告警通知服務發現示例:prometheus_sd_discovered_targets{config="auth_es1", name="scrape"}  12

          ?這里基于協議發現的目標數,還未進入采集模塊,并不能區分是在線還是離線。?

          「2、服務發現協議異常錯誤指標」

          服務發現會給每個發現配置項生成一個provider,并為每個provider使用協程運行,如果基于配置項生成provider錯誤就可以通過prometheus_sd_failed_configs指標反饋:

          prometheus_sd_failed_configs:gauge類型,當前無法加載的服務發現配置數配置數:一個job可能存在多個服務發現協議配置,對應配置項則是多個示例:prometheus_sd_failed_configs{name="scrape"}  10prometheus_sd_failed_configs{name="notify"} 5

          一個job可能對應多個服務發現配置項,如下:這個job下配置了static_configsfile_sd_configs兩個服務發現協議配置,則對應兩個服務發現配置項,注冊兩個provider,每個provider在獨立協程中運行:

          scrape_configs:  # The job name is added as a label `job=` to any timeseries scraped from this config.  - job_name: "test"    static_configs:    - targets: ["localhost:9090"]    file_sd_configs:    - refresh_interval: 5m      files:      - targets/manual.*.json

          「3、協程交互指標」

          服務發現主要涉及3類協程:

          Discoverer協程(多個):封裝provider,基于協議發現采集點,這里可能會存在多個,一個provider對應一個Discoverer協程updater協程(1個):Discoverer協程發現采集點,通過channel通道通知到updater協程updater協程將采集點更新到Manager結構體targets字段中,然后向Manager結構體triggerSend通道寫入數據,告訴sender協程targets有更新;sender協程(1個):sender協程每5秒檢測triggerSend通道數據,檢測到更新則將Manager結構體targets數據處理封裝寫入到Manager結構體syncCh通道中,scrape模塊監測該通道,即完成將服務發現模塊scrape模塊交互。

          這其中涉及三個指標:

          prometheus_sd_received_updates_totalprometheus_sd_updates_delayed_totalprometheus_sd_updates_total

          關鍵詞:

          下一篇:命運兩端:停產邊緣的恒馳5,即將投產的FF91
          上一篇:最后一頁

           
          国产三级日本三级日产三级66,五月天激情婷婷大综合,996久久国产精品线观看,久久精品人人做人人爽97
          • <bdo id="qgeso"></bdo>
              • <strike id="qgeso"></strike>
              • <sup id="qgeso"></sup><center id="qgeso"></center>
              • <input id="qgeso"></input>
                主站蜘蛛池模板: 亚洲国产欧美国产第一区二区三区| 无套内射视频囯产| 幸福宝隐藏入口最新章节免费阅读小说 | 国产国语对白一级毛片| 伊人情人综合网| 一嫁三夫电影免费观看| 羞羞社区在线观看视频| 欧美一区二区三区激情| 女人扒开屁股爽桶30分钟| 国产在线91精品入口| 久久青草亚洲AV无码麻豆| 国产交换丝雨巅峰| 毛片色毛片18毛片美女| 强开小娟嫩苞又嫩又紧| 公交车上被弄进走不动| gogo免费在线观看| 精品日韩一区二区| 少妇AV射精精品蜜桃专区| 国产xx在线观看| 久热这里有精品| 黄色一级毛片免费| 欧美中文字幕在线| 国产浮力影院在线地址| 免费**毛片在线播放视| 久久久噜噜噜久久网| 色噜噜视频影院| 欧美成人精品第一区首页| 国产精品久久影院| 亚洲成a人片在线不卡一二三区| 一区二区三区美女视频| 男人j桶进女人p无遮挡免费观看 | 国产综合激情在线亚洲第一页| 亚洲国产精品久久人人爱| 欧美日在线观看| 欧美变态口味重另类在线视频| 国内精品久久久久久无码不卡| 亚洲成av人在线视| 麻豆xfplay国产在线观看| 曰韩高清一级毛片| 国产欧美日产中文| 久久久久亚洲av无码专区|