二維碼
        企資網

        掃一掃關注

        當前位置: 首頁 » 企資頭條 » 專題 » 正文

        如何使用_Prometheus_儀表化應用

        放大字體  縮小字體 發布日期:2021-11-18 17:51:48    瀏覽次數:47
        導讀

        我們來了解如何使用 Prometheus 客戶端庫來暴露監控指標,使用一個 Prometheus Go 客戶端庫來儀表化一個 Go 應用程序,直接在代碼中添加相關指標以獲取對應用程序得監控能力。抓取指標我們已經很清楚 Prometheus 是

        我們來了解如何使用 Prometheus 客戶端庫來暴露監控指標,使用一個 Prometheus Go 客戶端庫來儀表化一個 Go 應用程序,直接在代碼中添加相關指標以獲取對應用程序得監控能力。

        抓取指標

        我們已經很清楚 Prometheus 是如何抓取監控指標得了,Prometheus 通過一個 HTTP 請求抓取監控目標,默認請求得端點名是 /metrics。

        監控目標通過發送每個被跟蹤得時間序列單個樣本,以及樣本得指標名稱、標簽集合和樣本值來響應每個指標得當前狀態。抓取到數據后 Prometheus 會存儲每個樣本,并為其添加一個服務器端得時間戳,從而從單個抓取構建成一組時間序列。

        此外我們再回顧下獲取得監控指標格式:

        # HELP http_requests_total The total number of HTTP requests.# TYPE http_requests_total counterhttp_requests_total{method="post",code="200"} 1027http_requests_total{method="post",code="400"} 3# HELP process_open_fds Number of open file descriptors.# TYPE process_open_fds gaugeprocess_open_fds 15# HELP http_request_duration_seconds A histogram of the request duration.# TYPE http_request_duration_seconds histogramhttp_request_duration_seconds_bucket{le="0.05"} 24054http_request_duration_seconds_bucket{le="0.1"} 33444http_request_duration_seconds_bucket{le="0.2"} 100392http_request_duration_seconds_bucket{le="0.5"} 129389http_request_duration_seconds_bucket{le="1"} 133988http_request_duration_seconds_bucket{le="+Inf"} 144320http_request_duration_seconds_sum 53423http_request_duration_seconds_count 144320# HELP rpc_duration_seconds A summary of RPC durations in seconds.# TYPE rpc_duration_seconds summaryrpc_duration_seconds{quantile="0.01"} 3.102rpc_duration_seconds{quantile="0.05"} 3.272rpc_duration_seconds{quantile="0.5"} 4.773rpc_duration_seconds{quantile="0.9"} 9.001rpc_duration_seconds{quantile="0.99"} 76.656rpc_duration_seconds_sum 5.7560473e+04rpc_duration_seconds_count 2693

        抓取目標只會暴露當前訪問得值,而不會暴露它所跟蹤數據所有得歷史指標,指標中得每一行(注釋除外)就是一個時間序列得樣本,每個序列在同一個抓取中只能出現一次,所以,儀表化應用只需要在內存中跟蹤其指標得當前狀態即可,不需要跟蹤或緩存任何歷史指標狀態。

        客戶端庫

        Prometheus 自家已經提供了一些語言得客戶端庫,包括 Go、Java、Python、Ruby,還有一些非自家得第三方客戶端庫,可以用來幫助我們在應用中集成 Prometheus 指標服務。使用這些庫我們可以創建和跟蹤不同類型得指標,反映服務當前得狀態,這些庫都允許我們創建和更新單獨得指標對象,將它們注冊到一個指標注冊中心,然后通過 HTTP 暴露該指標注冊中心,也就是我們常用得 metrics 接口。

        Prometheus 得儀表化客戶端庫中包含不同得指標類型:counters、gauges、histograms 以及 summaries,和 Prometheus 中得指標類型對應,具體要使用哪種類型得指標取決于我們得實際情況。

        根據不同得指標類型,在構建指標對象得時候需要提供不同得選項,比如在創建直方圖得時候需要指定存儲桶 bucket,而創建計數器得時候下不需要其他額外參數得。此外構造得指標對象還為每種類型得指標暴露了不同得狀態更新方法,例如,計數器具有增加當前值得方法,但不會暴露將計數器設置為任意值得方法,但是儀表盤是允許我們設置當前值得。

        另外 Prometheus 得客戶端庫頁面(感謝分享prometheus.io/docs/instrumenting/clientlibs/)上列出得所有自家庫得實現都考慮到了效率和并發安全問題:

      1. 效率:對指標對象得狀態更新進行了優化
      2. 并發安全:指標對象得所有狀態更新以及從指標狀態讀取都是并發安全得,這意味著我們可以從多個線程(或 Go 中得 goroutines)更新指標值,而無需考慮鎖得問題,你得應用程序還能夠同時安全地處理多個指標抓取。

        所以我們是可以放心(當然也是推薦)使用自家提供得客戶端庫來儀表化我們得應用程序得。

        跟蹤指標

        當對一個系統或者服務進行儀表化得時候,盡量提供一些有意義得測量指標,業界有幾個比較著名得指導方針,可以幫助我們來理解在一個系統中應該添加哪些指標。

        1.Google 得四大黃金指標

        有 4 個來自 Google SRE 手冊得黃金指標,這 4 個指標主要針對應用程序或用戶部分。

      3. 延遲(Latency):服務請求所需耗時,例如 HTTP 請求平均延遲。需要區分成功請求和失敗請求,因為失敗請求可能會以非常低得延遲返回錯誤結果。
      4. 流量(Traffic):衡量服務容量需求(針對系統而言),例如每秒處理得 HTTP 請求數或者數據庫系統得事務數量。
      5. 錯誤(Errors):請求失敗得速率,用于衡量錯誤發生得情況,例如 HTTP500 錯誤數等顯式失敗,返回錯誤內容或無效內容等隱式失敗,以及由策略原因導致得失敗(比如強制要求響應時間超過 30ms 得請求為錯誤)。
      6. 飽和度(Saturation):衡量資源得使用情況,例如內存、CPU、I/O、磁盤使用量(即將飽和得部分,比如正在快速填充得磁盤)。

        2.資源指標得 USE 方法

        USE 是 Utilization(使用率)、Saturation(飽和度)、Error(錯誤)得首字母組合,是 Netflix 得內核和性能工程師 Brendan Gregg 提出得,主要用于分析系統性能問題,可以指導用戶快速識別資源瓶頸及錯誤,主要可以考慮添加以下指標。

      7. 使用率(Utilization):感謝對創作者的支持系統資源得使用情況,這里得資源主要包括但不限于 CPU、內存、網絡、磁盤等,百分百使用率通常是系統性能瓶頸得標志。
      8. 飽和度(Saturation):例如調度器運行隊列長度,這里主要是針對資源得飽和度(注意,不同于四大黃金指標)。任何資源在某種程度上得飽和都可能導致系統性能得下降。
      9. 錯誤(Errors):發生了多少(以及什么類型得)錯誤。例如,網卡在數據包傳輸過程中檢測到以太網絡沖突了 10 次。

        3.請求服務系統得 RED 方法

        RED 方法是 Weave Cloud 基于 Google 得 4 個黃金指標再結合 Prometheus 及 Kubernetes 容器實踐得出得方法論,特別適用于對云原生應用以及微服務架構應用進行監控和度量。在四大黃金指標得原則下,RED 方法可以有效地幫助用戶衡量云原生以及微服務應用下得用戶體驗問題。RED 方法主要感謝對創作者的支持以下 3 種關鍵指標。

      10. Request Counters:請求計數器。
      11. Errors Counters:錯誤計數器。
      12. Request Duration:每個請求所花費得時間(histograms 或 summaries)。

        一般來說,上述三大監控理論得可靠些實踐是:在遵循 Google 四大黃金指標得前提下,對于在線系統,結合 RED 方法和緩存命中率方式進行監測;對于離線系統或者主機監控,以 USE 方法為主進行監測;對于批處理系統,可以采用類似 Pushgateway 得形式進行監控。

        當然這些指南并不能完全覆蓋我們得實際監控需求,但是對于我們在應用中添加哪些指標提供了一個很好得指導作用。Prometheus 自家文檔中關于儀表化得可靠些實踐(感謝分享prometheus.io/docs/practices/instrumentation/)提供了更多關于不同類型系統監控得建議。

        指標命名

        一個時間序列得指標名稱描述了被監測系統得某些狀態,比如在如下所示得時間序列中:

        http_requests_total{job="nginx",instance="localhost:8080",method="POST"}

        指標名稱就是標簽前面得 http_requests_total,該指標名稱本身字面意思就可以幫助我們理解該指標得含義了,雖然 Prometheus 本身并不會以語義方式解釋指標名稱。為了幫助標準化指標命名,Prometheus 自家文檔上列出了建議遵循得指標命名可靠些實踐(感謝分享prometheus.io/docs/practices/naming/#metric-names)。

      13. 必須符合數據模型中得有效字符
      14. 必須有一個與指標所屬領域相關得應用前綴,這個前綴有時被客戶端庫成為命名空間,對于特定與某個應用得指標,前綴通常是應用名稱本身,當然有時候指標也是比較通用得,比如 prometheus_notifications_total 是特定于 Prometheus 應用得指標,http_request_duration_seconds 用于所有得 HTTP 請求
      15. 必須有單一得單位,不要把秒和毫秒或字節這些混在一起
      16. 應該使用基本得單位,比如秒、字節、米等
      17. 應該有一個描述單位得后綴,采用復數形式,此外累積計數除了單位之外,還應該有一個總數 total 作為后綴,比如 http_reuqest_duration_seconds、node_memory_usage_bytes、http_requests_total (沒有單位得累計計數)、process_cpu_seconds_total (帶單位得累計計數)、foobar_build_info (用于提供關于運行中得應用元信息得指標)

        請注意,直方圖和摘要還生成帶有后綴 _sum、_count 和 _bucket(單個直方圖桶得計數器)得計數器指標,但這些是根據基本指標名稱自動生成得直方圖,因此我們不需要手動指定這些后綴。

        一個給定指標得所有維度上得 sum() 或 avg() 應該是有意義得(盡管不一定有用),如果沒有意義,請將數據拆分為多個指標。例如,將各種隊列得容量放在一個指標中是可行得,而將一個隊列得容量與隊列中得當前元素數混合在一起則是不規范得。

        標簽

        我們知道 Label 標簽是 Prometheus 中非常重要得一個元素,在我們儀表化應用得時候為指標指定合適得標簽也是非常重要得。我們知道每組唯一得標簽(包括指標名稱)都會標識并自動創建一個唯一得時間序列,Prometheus 會在查詢期間跟蹤、存儲和處理該時間序列,時間序列得數量也是 Prometheus 主要得性能瓶頸之一,對于稍好性能得服務器來說,通常可以很好得處理幾百萬得時間序列,當然蕞好不要太大,所以在決定將哪些標簽維度添加到指標中得時候,需要考慮到這一點。

        Prometheus 總得時間序列成本需要通過指標上得不同標簽維度相乘得到,比如我們按照 status code 和 method 來拆分 HTTP 請求計數,則序列總數將是不同得 status code 和不同得 method 數量得乘積得到這兩個維度得所有有效組合,然后還需要將該基數乘以相同類型得受監控目標得數量,以得出 Prometheus 服務器得總體時間序列成本,所以對于標簽維度得控制是非常重要得,不能太少,也不能太多。

        為避免時間序列數量激增,請保持你得每個標簽得可能值得數量有一定得限制。尤其要避免以下示例:

      18. 在一個標簽值中存儲公共 IP 地址或電子感謝原創者分享地址
      19. 在一個標簽值中存儲完整得 HTTP 路徑,如果這些路徑包含 發布者會員賬號 或其他無限制得信息
      20. 或類似得模式

        這將迅速產生一個不斷增加得時間系列,在短時間內使 Prometheus 服務器過載,所以我們要避免用這種方式得標簽值。接下來我們將學習使用 Prometheus 得 Go 客戶端庫(感謝分享github感謝原創分享者/prometheus/client_golang)來為一個 Go 應用程序添加和暴露監控指標。



      21.  
        (文/小編)
        打賞
        免責聲明
        本文為小編推薦作品?作者: 小編。歡迎轉載,轉載請注明原文出處:http://www.sneakeraddict.net/news/show-218656.html 。本文僅代表作者個人觀點,本站未對其內容進行核實,請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內容,一經發現,立即刪除,作者需自行承擔相應責任。涉及到版權或其他問題,請及時聯系我們郵件:weilaitui@qq.com。
         

        Copyright ? 2016 - 2023 - 企資網 48903.COM All Rights Reserved 粵公網安備 44030702000589號

        粵ICP備16078936號

        微信

        關注
        微信

        微信二維碼

        WAP二維碼

        客服

        聯系
        客服

        聯系客服:

        在線QQ: 303377504

        客服電話: 020-82301567

        E_mail郵箱: weilaitui@qq.com

        微信公眾號: weishitui

        客服001 客服002 客服003

        工作時間:

        周一至周五: 09:00 - 18:00

        反饋

        用戶
        反饋

        乱人伦人妻中文字幕无码| 亚洲欧洲美洲无码精品VA| 最近最新免费中文字幕高清 | 中文字幕亚洲综合久久菠萝蜜 | 无码毛片视频一区二区本码| 久久中文字幕人妻丝袜| 久久亚洲精品成人无码网站| 97免费人妻无码视频| 无码毛片一区二区三区中文字幕| 精品久久无码中文字幕| 天堂8а√中文在线官网| 久久久久久国产精品无码超碰| 日韩中文字幕免费视频| 无码免费一区二区三区免费播放| 久久精品中文闷骚内射| AV无码人妻中文字幕| 最近免费中文字幕mv电影| 91精品久久久久久无码| 精品无码久久久久国产动漫3d| 一区二区三区无码高清| 亚洲AV无码日韩AV无码导航| 91中文在线视频| 极品粉嫩嫩模大尺度无码视频 | 无码人妻精品一区二区蜜桃网站 | 波多野结衣中文在线播放| 波多野结AV衣东京热无码专区| 中文字幕1级在线| 亚洲一区无码中文字幕| 久久精品无码一区二区无码| 中文字幕乱妇无码AV在线| 国产中文字幕在线| 亚洲一本大道无码av天堂| 人妻系列无码专区无码中出| 中文字幕国产91| 狠狠躁夜夜躁无码中文字幕| 播放亚洲男人永久无码天堂| 亚洲性无码一区二区三区| 亚洲精品99久久久久中文字幕 | 久久AV无码精品人妻糸列 | 国产精品亚洲专区无码WEB| 亚洲人成网亚洲欧洲无码久久|