<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 監(jiān)控系統(tǒng),看完后薪資翻倍?

          共 7898字,需瀏覽 16分鐘

           ·

          2024-03-30 17:30

          一、監(jiān)控概念&誤區(qū)

          監(jiān)控是管理基礎(chǔ)設(shè)施和業(yè)務(wù)的核心工具,監(jiān)控應(yīng)該和應(yīng)用程序一起構(gòu)建和部署,沒有監(jiān)控,將無法了解你的系統(tǒng)運(yùn)行環(huán)境,進(jìn)行故障診斷,也無法阻止提供系統(tǒng)性的性能、成本和狀態(tài)等信息。
          • 誤區(qū):

          要盡量避免進(jìn)行機(jī)械式的監(jiān)控、不夠準(zhǔn)確的監(jiān)控、靜態(tài)和監(jiān)控、不頻繁的監(jiān)控、缺少自動(dòng)化或自服務(wù)。

          二、黑盒監(jiān)控&白盒監(jiān)控

          1、黑盒監(jiān)控

          • 應(yīng)用程序或主機(jī)是從外部觀察的,因此,這種方法可能相當(dāng)有限。檢查是為了評(píng)估被觀察的系統(tǒng)是否以已知的方式響應(yīng)探測(cè)。

          • 例子:

          1)主機(jī)是否相應(yīng)PING的請(qǐng)求
          2)特定的TCP端口是否打開
          3)應(yīng)用程序在接受到特定的HTTP請(qǐng)求時(shí),是否使用正確的數(shù)據(jù)和狀態(tài)代碼進(jìn)行響應(yīng)
          4)特定應(yīng)用程序的進(jìn)程是否在其主機(jī)中運(yùn)行

          2、白盒監(jiān)控

          系統(tǒng)在被測(cè)對(duì)象表面顯示其內(nèi)部狀態(tài)和臨界段的性能數(shù)據(jù)。這種類型的自省可能非常強(qiáng)大,因?yàn)樗┞读藘?nèi)部操作,顯示不同內(nèi)部組件的健康狀況,否則很難甚至不可能確定。這種數(shù)據(jù)處理通常以胰腺癌方式進(jìn)行處理:

          1)通過日志導(dǎo)出 :到目前為止。這是也是在廣泛引入庫之前,應(yīng)用程序是如何暴露其內(nèi)部工作的最常見的情況,例如:可以處理 HTTP 服務(wù)器的訪問日志來監(jiān)視請(qǐng)求率、延遲和錯(cuò)誤百分比;
          2)以結(jié)構(gòu)化的事件輸出:這種方法類似于日志記錄,但不是將數(shù)據(jù)寫入磁盤,而是直接將數(shù)據(jù)發(fā)送到處理系統(tǒng)進(jìn)行分析和聚合。
          3)以聚合的方式保存在內(nèi)存中:這種格式的數(shù)據(jù)可以駐留在端點(diǎn)中,也可以直接從命令行工具中讀取。這種方法的例子有/metrics with Prometheus metrics、HAProxy 的 stats 頁面或 varnishstats 命令行工具

          三、度量指標(biāo)

          度量指標(biāo)有監(jiān)控系統(tǒng)執(zhí)行的過程通常可以分為兩種方式:push(監(jiān)控系統(tǒng)去服務(wù)進(jìn)行拉?。?、pull(被監(jiān)控的服務(wù)自動(dòng)往監(jiān)控系統(tǒng)進(jìn)行推送)【站在客戶的角度】
          • Push VS Pull
          • 測(cè)量什么:
          谷歌提出應(yīng)該監(jiān)控的四個(gè)指標(biāo):
          • 延遲:服務(wù)請(qǐng)求所需的時(shí)間
          • 流量:正在發(fā)出的請(qǐng)求的數(shù)量
          • 錯(cuò)誤:求失敗的比率
          • 飽和:未處理的工作量,通常在隊(duì)列中
          Brendan 的方法更關(guān)注于及其他聲明對(duì)于每個(gè)資源(CPU、磁盤、網(wǎng)絡(luò)接口等等),應(yīng)該監(jiān)視以下指標(biāo):
          • 利用率:以資源繁忙的百分比來衡量
          • 飽和:資源無法處理的工作量,通常會(huì)排隊(duì)
          • 錯(cuò)誤:發(fā)生的錯(cuò)誤數(shù)量
          湯姆威爾基的紅色方法:更側(cè)重于服務(wù)級(jí)別方法,而不是底層系統(tǒng)本身。顯然,這種才領(lǐng)略對(duì)于見識(shí)服務(wù)很有用,對(duì)于預(yù)測(cè)外部客戶的體驗(yàn)也很有價(jià)值。如果服務(wù)的錯(cuò)誤率增加,那么就可以合理地假設(shè)這些錯(cuò)誤將直接或間接地影響客戶的體驗(yàn)。
          • 速率:轉(zhuǎn)換成每秒請(qǐng)求數(shù)

          • 錯(cuò)誤:每秒失敗請(qǐng)求的數(shù)量

          • 持久性:這些請(qǐng)求所花費(fèi)的時(shí)間

          四、Prometheus

          1、介紹&架構(gòu)

          Prometheus 是一個(gè)開源系統(tǒng)監(jiān)控和警報(bào)工具包,將其監(jiān)控的指標(biāo)進(jìn)行收集并存儲(chǔ)為時(shí)間序列數(shù)據(jù),即指標(biāo)信息與記錄時(shí)的時(shí)間戳以及稱為標(biāo)簽的可選鍵值對(duì)一起存儲(chǔ)。很多公司用來監(jiān)控 K8s集群。

          7eb70e71b01f46acf5319f5f2e1ede80.webp

          2. 合適&不合適場(chǎng)景

          • 合適場(chǎng)景 :Prometheus 可以很好地記錄任何數(shù)字時(shí)間序列,它既適合以機(jī)器為中心的監(jiān)控,也適合監(jiān)控高度動(dòng)態(tài)的面向服務(wù)的架構(gòu)。在微服務(wù)的世界中,他對(duì)多維數(shù)據(jù)收集的查詢的支持是一個(gè)特殊的優(yōu)勢(shì)。專為可靠性而設(shè)計(jì),是在中斷期間可以使用的系統(tǒng),可讓你快速診斷問題。每個(gè)Prometheus服務(wù)器都是獨(dú)立的,不依賴于網(wǎng)絡(luò)存儲(chǔ)或其他遠(yuǎn)程服務(wù)。當(dāng)你的基礎(chǔ)設(shè)施的其他部分損壞時(shí),你可以依賴他,并且你無需設(shè)置大量基礎(chǔ)設(shè)施即可使用

          • 不合適場(chǎng)景 :你需要100%準(zhǔn)確性,例如按請(qǐng)求計(jì)費(fèi)。這時(shí)候Prometheus就不太適合,你最好使用其他系統(tǒng)來收集和分析數(shù)據(jù)以進(jìn)行計(jì)費(fèi)。

          3. 數(shù)據(jù)模型

          因?yàn)楸O(jiān)控?cái)?shù)量極大,所以使用了時(shí)間序列數(shù)據(jù)存儲(chǔ)(就是帶時(shí)間戳和值的)

          • Prometheus本地存儲(chǔ):

          Prometheus的本地存儲(chǔ)被稱為 Prometheus TSDB。TSDB的設(shè)計(jì)核心有兩個(gè):block和WAL,而block又包含chunk、index、meta.json、tombstones。 TSDB將存儲(chǔ)的監(jiān)控?cái)?shù)據(jù)按照時(shí)間分隔成block,block大小并不固定,按照設(shè)定的步長倍數(shù)遞增。隨著數(shù)據(jù)量的不斷增長,TSDB會(huì)將小的block合并成大的block,這樣不僅可以減少數(shù)據(jù)存儲(chǔ),還可以減少內(nèi)存中的block個(gè)數(shù),便于對(duì)數(shù)據(jù)進(jìn)行索引。 每個(gè)block都有全局唯一的名稱,通過ULID(Universally Unique Lexicograpphically Sortable Indetifier,全局字典可排序ID)原理生成,可以通過block的文件名確定這個(gè)block的創(chuàng)建時(shí)間,從而很方便的按照時(shí)間對(duì)block排序。對(duì)時(shí)序數(shù)據(jù)庫的查詢通常會(huì)涉及到連續(xù)的很多塊,這種通過命名便可以排序的設(shè)計(jì)非常簡(jiǎn)便。 WAL(Write-Ahead Logging,預(yù)寫日志)是關(guān)系型數(shù)據(jù)庫中利用日志來實(shí)現(xiàn)事務(wù)性和持久性的一種技術(shù),即在進(jìn)行某個(gè)操作之前先將這件事情記錄下來,以便之后數(shù)據(jù)進(jìn)行回滾、重試等操作并保證數(shù)據(jù)的可靠性。Prometheus為了防止丟失暫存在內(nèi)存中還未被寫入磁盤的監(jiān)控?cái)?shù)據(jù),引入了WAL機(jī)制。 按照每種對(duì)象設(shè)定的采集周期,Prometheus會(huì)將周期性采集的監(jiān)控?cái)?shù)據(jù)通過Add接口添加到head block中,但這些數(shù)據(jù)沒有被持久化,TSDB通過WAL將提交的數(shù)據(jù)先保存到磁盤中,在TSDB宕機(jī)重啟后,會(huì)首先啟動(dòng)多協(xié)程讀取WAL,從而恢復(fù)之前的狀態(tài)。
          • Prometheus 數(shù)據(jù)模型:

          Prometheus 將數(shù)據(jù)存儲(chǔ)為時(shí)間序列,其中包括稱為標(biāo)簽的鍵值對(duì)、時(shí)間戳和最后的值:

          表示法:

              
                  
                    <metric_name>[{<label_1=“value_1”>,<label_N=“value_N”>}]<datapoint_numercial_value>
                  
                

          4. 指標(biāo)

          • Counter:Prometheus實(shí)例接收的數(shù)據(jù)包總數(shù)(一直增)

          • Gauge:測(cè)量是一種度量,他在收集時(shí)對(duì)給定的測(cè)量進(jìn)行快照,可以增加或減少(例如溫度、磁盤空間、內(nèi)存使用量)

          • Histogram:常常用于觀察,一個(gè)Histogram包含下列值的合并:【某時(shí)間段內(nèi)的百分比或者請(qǐng)求數(shù)量有多少】

          5. 指標(biāo)的摘要和聚合

          指標(biāo)摘要:通常來說。單個(gè)指標(biāo)對(duì)我們來說價(jià)值很小,往往需要聯(lián)合并可視化多個(gè)指標(biāo),這其中需要一些數(shù)學(xué)變換,例如我們可能會(huì)統(tǒng)計(jì)函數(shù)應(yīng)用于指標(biāo)或指標(biāo)組,常見函數(shù)有:計(jì)數(shù)、求和、平均值、中間數(shù)、百分位數(shù)、標(biāo)準(zhǔn)差、變化率等等
          • 指標(biāo)聚合:就是能看到來自多個(gè)源的指標(biāo)的聚合視圖

          6. NodeExporter部署

          Prometheus使用exporter工具來暴露主機(jī)和應(yīng)用程序上的指標(biāo)。有很多種類型的exporter。

          7. cAdvisor監(jiān)控Docker容器

          cAdvisor(Constainer Advisor)是由谷歌開發(fā)的一個(gè)項(xiàng)目,讓從正在運(yùn)行的容器手機(jī)、聚合、分析和導(dǎo)出數(shù)據(jù)??捎玫臄?shù)據(jù)涵蓋了幾乎所有你可能需要的東西,從內(nèi)存限制到GPU指標(biāo)
          • cAdvisor 并不綁定到 Docker 容器,但它通常作為一個(gè)容器部署,從容器守護(hù)進(jìn)程和 Linux cgroups 收集數(shù)據(jù),是容器的發(fā)現(xiàn)透明且完全自動(dòng)化。
          • 除了以 Prometheus 格式公開指標(biāo)之外,cAdvisor 還提供了一個(gè)有用的 web界面,允許即使可視化主機(jī)及其容器的狀態(tài)

          8. 捕獲目標(biāo)生命周期

          服務(wù)發(fā)現(xiàn)->配置->重新標(biāo)記(relable_configs)-> 抓取 -> metrics_relable_configs

          9. PromQL查詢語言

          選擇器及標(biāo)簽匹配器:

          (1)選擇器

          Prometheus被設(shè)計(jì)用來處理成千上萬的時(shí)間序列、根據(jù)標(biāo)簽的組合,咩哥指標(biāo)名稱可以有幾個(gè)不同的時(shí)間序列;當(dāng)來自不同的工作的類型名稱的指標(biāo)混合在一起時(shí),查詢正確的數(shù)據(jù)可能看起來比較困難。所以在Prometheus中,選擇器指的是一組標(biāo)簽匹配器、度量名稱也包含在這個(gè)定義中,因?yàn)閺募夹g(shù)上講,他的內(nèi)容表示也是一個(gè)標(biāo)簽,盡管是一個(gè)特殊的標(biāo)簽:name。 選擇器中的每個(gè)標(biāo)簽名稱/值對(duì)稱為標(biāo)簽匹配器,多個(gè)匹配器可用于進(jìn)一步篩選選擇器匹配的時(shí)間序列。標(biāo)簽匹配器用花括號(hào)括起來。如果不需要匹配器,可以省略花括號(hào)。選擇器可以返回及時(shí)或范圍向量
              
                  
                    //例如:$ prometheus_build_info{version="2.17.0"}
                  
                

          (2)標(biāo)簽匹配器

          標(biāo)簽匹配器用于將查詢搜索限制為特定的一組標(biāo)簽值。下面將使用node_cpu_secends_total metric來闡述標(biāo)簽匹配的操作,匹配的操作符有=、!=、=和! 如果沒有任何匹配的規(guī)范。僅此度量就會(huì)返回一個(gè)包含度量名稱的所有可用時(shí)間序列的及時(shí)向量。以及所有的CPU核心數(shù)(cpu=“0”,cpu=“1”)和CPU的型號(hào)(mode=“idle”,mode=“iowait”,mode=“irq”,mode=“nice”,mode=“softirq”,mode=“steal”,mode=“user”,mode=“system”)

          (3)范圍、偏移、子查詢

          范圍向量:如果要定義一個(gè)范圍向量選擇查詢,你必須設(shè)置一個(gè)及時(shí)向量選擇器和使用[]追加一個(gè)范圍。

          偏移量的修飾符:offset的修飾符查詢過去的數(shù)據(jù),也就是說可雙選擇相對(duì)于當(dāng)前時(shí)間的多長時(shí)間以前

          子查詢【道理類似于 MySQL中】

          (4)PromQL操作符 向量匹配:有one-to-one、many-to-one、one-to-many【其實(shí)就類似于mysql的左右外連接】 (5)PromQL函數(shù) lable_join() label_replace() 這些函數(shù)用于操作標(biāo)簽——他們?cè)试S您將標(biāo)簽連接到其他標(biāo)簽,提取標(biāo)簽值的一部分,甚至刪除標(biāo)簽(盡管使用標(biāo)準(zhǔn)的聚合操作更容易、更符合人體工程學(xué))。在這兩個(gè)函數(shù)中,如果定義的目標(biāo)標(biāo)簽是一個(gè)新的,它將被添加到標(biāo)簽集;如果他是一個(gè)現(xiàn)有的標(biāo)簽,它將被取代?!疽簿褪钦f,如果該語句滿足什么條件的話,機(jī)會(huì)產(chǎn)生相對(duì)應(yīng)的結(jié)果】 predict_linear() 函數(shù)可以預(yù)測(cè)時(shí)間序列v在t秒后的值,它基于簡(jiǎn)單線性回歸的方式,對(duì)時(shí)間窗口內(nèi)的樣本數(shù)據(jù)進(jìn)行統(tǒng)計(jì),從而可以對(duì)時(shí)間序列的變化趨勢(shì)作出預(yù)測(cè)。該函數(shù)的返回結(jié)果不帶有度量指標(biāo),只有標(biāo)簽列表。 rate()和irate()函數(shù): sort()和sort_desc()

          10. 計(jì)算CPU的使用率

              
                  
                    //例子:avg(irate(node_cpu_seconds_total{job="node"}[5m] by (instance) * 100))
                  
                

          11. 計(jì)算CPU負(fù)載(飽和度)

          在主機(jī)上獲得CPU飽和的一種方法是跟蹤平均負(fù)載,實(shí)際上它是將主機(jī)上的CPU數(shù)量考慮在內(nèi)的一段時(shí)間內(nèi)的平均運(yùn)行隊(duì)列長度。平均負(fù)載少于CPU的數(shù)量通常是正常的,長時(shí)間內(nèi)超過該數(shù)字的平均值則表示CPU已經(jīng)飽和。 要查看主機(jī)的平均負(fù)載,可以使用node_load*指標(biāo),他們顯示1分鐘、5分鐘和15分鐘的平均負(fù)載。比如使用1分鐘的平均負(fù)載:node_load1
              
                  
                    //計(jì)算主機(jī)上的CPU數(shù)量,可以使用count聚合實(shí)現(xiàn)
                  
                  
                    count by (instance)(node_cpu_seconds_total{mode="idle"})
                  
                  
                    //接下來將此計(jì)算與node_load指標(biāo)結(jié)合起來
                  
                  
                    node_load1 > on (instance) 2 * count by (instance)(node_cpu_seconds_total{mode="idle"})
                  
                  
                    //這里我們查詢的是1分鐘的負(fù)載超過主機(jī)CPU數(shù)量的兩倍的結(jié)果
                  
                

          12. 計(jì)算內(nèi)存使用率

          Node Exporter的內(nèi)存指標(biāo)按內(nèi)存的類型和使用率進(jìn)行細(xì)分??梢栽?/span> node_memory 為前綴的指標(biāo)列表找到他們。
              
                  
                    //查看主機(jī)上的總內(nèi)存
                  
                  
                    node_memory_MemTotal_bytes
                  
                  
                    //主機(jī)上的可用內(nèi)存
                  
                  
                    node_memory_MemFree_bytes
                  
                  
                    //緩沖緩存中的內(nèi)存
                  
                  
                    node_memory_Buffers_bytes
                  
                  
                    //頁面緩存中的內(nèi)存
                  
                  
                    node_memory_Cached_bytes
                  
                  
                    //通過以上的就可以計(jì)算出內(nèi)存使用率
                  
                  
                    (總內(nèi)存-可用內(nèi)存-緩沖緩存中的內(nèi)存-頁面緩沖中的內(nèi)存)/總內(nèi)存 * 100
                  
                

          13. 計(jì)算內(nèi)存飽和度

          還可以通過檢查內(nèi)存和磁盤的讀寫來監(jiān)控內(nèi)存飽和度,可以使用從/proc/vmstat收集的兩個(gè)Node Exporter指標(biāo)
          • node_vmstat_pswpin:系統(tǒng)每秒從磁盤讀到內(nèi)存的字節(jié)數(shù)
          • node_vmstat_pswpout:系統(tǒng)每秒從內(nèi)存寫到磁盤的字節(jié)數(shù)
          • 兩者都是自上次啟動(dòng)以來的字節(jié)數(shù),以KB為單位
          • 為了獲得飽和度指標(biāo),對(duì)每個(gè)指標(biāo)計(jì)算每一分鐘的速率,將兩個(gè)速率相加,然后乘以1024獲得字節(jié)數(shù)
              
                  
                    1024 * sum by (instance) ((rate(node_vmstat_pgpgin[1m]) + rate(node_vmstat_pgpgout[1m])))
                  
                

          然后,可以對(duì)此設(shè)置圖形化展示或者警報(bào),以識(shí)別行為不當(dāng)?shù)膽?yīng)用程序主機(jī)。

          14. 磁盤使用率

          對(duì)于磁盤,只測(cè)量磁盤使用情況而不是使用率、飽和或錯(cuò)誤。這是因?yàn)樵诖蠖鄶?shù)情況下,它是對(duì)可視化和警報(bào)最有用的數(shù)據(jù)。
              
                  
                    //node_filesystem_size_bytes指標(biāo)顯示了被監(jiān)控的每個(gè)文件系統(tǒng)掛載的大小。node_filesystem_size_bytes
                  
                
          可以使用與內(nèi)存指標(biāo)類似的查詢來生成在主機(jī)上使用的磁盤空間百分比。
              
                  
                    (node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"} * 100
                  
                
          與內(nèi)存指標(biāo)不同,在每個(gè)主機(jī)上的每個(gè)掛載點(diǎn)都有文件系統(tǒng)指標(biāo)。所以添加了mountpoint標(biāo)簽,特別是跟文件系統(tǒng)”/“掛載。這將在每臺(tái)主機(jī)上返回該文件系統(tǒng)磁盤使用指標(biāo)。 如果想要或需要監(jiān)控特定掛載點(diǎn),那么我們可以為其添加查詢。比如要監(jiān)控/data掛載點(diǎn),可以使用。
              
                  
                    (node_filesystem_size_bytes{mountpoint="/data"} - node_filesystem_free_bytes{mountpoint="/data"}) / node_filesystem_size_bytes{mountpoint="/data"} * 100
                  
                

          或者可以使用正則表達(dá)式匹配多個(gè)掛載點(diǎn)

              
                  
                    (node_filesystem_size_bytes{mountpoint="/|/run"} - node_filesystem_free_bytes{mountpoint="/|/run"}) / node_filesystem_size_bytes{mountpoint="/|/run"} * 100
                  
                

          可以使用 predict_linear 函數(shù)來構(gòu)建在未來什么時(shí)候會(huì)耗盡磁盤空間

              
                  
                    
                      //預(yù)測(cè)四小時(shí)之后磁盤空間會(huì)不會(huì)爆滿
                    
                  
                  
                    predict_linear(node_filesystem_free_bytes{mountpoint="/"}[1h], 4* 3600) < 0
                  
                
          上面是指定跟文件系統(tǒng),還可以通過制定作業(yè)名稱或使用正則表達(dá)式來選擇所有文件系統(tǒng)
              
                  
                    predict_linear(node_filesystem_free_bytes{job="node"}[1h], 4* 3600) < 0
                  
                

          原文鏈接: https://blog.csdn.net/weixin_44827241/article/details/123902001


          瀏覽 41
          點(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>
                  中文字幕 日韩欧美 | 久久婷婷丁香五月综合 | 97爱爱 | 蜜桃91精品秘 成人取精库 | 日本va在线观看 日本va中文字幕 |