操bb国片四区三区,亚洲一片内射无码,91短视频福利导航,蜜桃臀成人免费在线视频观看

不懂 Prometheus 做不好運維?這篇干貨快收藏

2024-08-29 09:11:01 Jinyu

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

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

圖片

2. 合適&不合適場景

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

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

因為監(jiān)控數(shù)量極大,所以使用了時間序列數(shù)據(jù)存儲(就是帶時間戳和值的)

  • Prometheus 本地存儲:

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

  • Prometheus 數(shù)據(jù)模型:

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

表示法:

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

4. 指標

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

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

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

5. 指標的摘要和聚合

指標摘要:通常來說。單個指標對我們來說價值很小,往往需要聯(lián)合并可視化多個指標,這其中需要一些數(shù)學(xué)變換,例如我們可能會統(tǒng)計函數(shù)應(yīng)用于指標或指標組,常見函數(shù)有:計數(shù)、求和、平均值、中間數(shù)、百分位數(shù)、標準差、變化率等等

  • 指標聚合:就是能看到來自多個源的指標的聚合視圖

6、NodeExporter部署

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

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

cAdvisor(Constainer Advisor)是由谷歌開發(fā)的一個項目,讓從正在運行的容器手機、聚合、分析和導(dǎo)出數(shù)據(jù)??捎玫臄?shù)據(jù)涵蓋了幾乎所有你可能需要的東西,從內(nèi)存限制到GPU指標

  • cAdvisor 并不綁定到 Docker 容器,但它通常作為一個容器部署,從容器守護進程和 Linux cgroups 收集數(shù)據(jù),是容器的發(fā)現(xiàn)透明且完全自動化。

  • 除了以 Prometheus 格式公開指標之外,cAdvisor 還提供了一個有用的 web界面,允許即使可視化主機及其容器的狀態(tài)。

8. 捕獲目標生命周期

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

9. PromQL查詢語言

選擇器及標簽匹配器:

(1)選擇器

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

//例如:$ prometheus_build_info{version="2.17.0"}

(2)標簽匹配器

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

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

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

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

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

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

10. 計算CPU的使用率

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

11. 計算CPU負載(飽和度)

在主機上獲得CPU飽和的一種方法是跟蹤平均負載,實際上它是將主機上的CPU數(shù)量考慮在內(nèi)的一段時間內(nèi)的平均運行隊列長度。平均負載少于CPU的數(shù)量通常是正常的,長時間內(nèi)超過該數(shù)字的平均值則表示CPU已經(jīng)飽和。
要查看主機的平均負載,可以使用 node_load * 指標,他們顯示1分鐘、5分鐘和15分鐘的平均負載。比如使用1分鐘的平均負載:node_load1

//計算主機上的CPU數(shù)量,可以使用count聚合實現(xiàn)count by (instance)(node_cpu_seconds_total{mode="idle"})//接下來將此計算與node_load指標結(jié)合起來node_load1 > on (instance) 2 * count by (instance)(node_cpu_seconds_total{mode="idle"})//這里我們查詢的是1分鐘的負載超過主機CPU數(shù)量的兩倍的結(jié)果

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

Node Exporter的內(nèi)存指標按內(nèi)存的類型和使用率進行細分??梢栽?/span>node_memory為前綴的指標列表找到他們。

//查看主機上的總內(nèi)存node_memory_MemTotal_bytes//主機上的可用內(nèi)存node_memory_MemFree_bytes//緩沖緩存中的內(nèi)存node_memory_Buffers_bytes//頁面緩存中的內(nèi)存node_memory_Cached_bytes//通過以上的就可以計算出內(nèi)存使用率(總內(nèi)存-可用內(nèi)存-緩沖緩存中的內(nèi)存-頁面緩沖中的內(nèi)存)/總內(nèi)存 * 100

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

還可以通過檢查內(nèi)存和磁盤的讀寫來監(jiān)控內(nèi)存飽和度,可以使用從 /proc/vmstat 收集的兩個 Node Exporter 指標

  • node_vmstat_pswpin:系統(tǒng)每秒從磁盤讀到內(nèi)存的字節(jié)數(shù)

  • node_vmstat_pswpout:系統(tǒng)每秒從內(nèi)存寫到磁盤的字節(jié)數(shù)

  • 兩者都是自上次啟動以來的字節(jié)數(shù),以KB為單位

  • 為了獲得飽和度指標,對每個指標計算每一分鐘的速率,將兩個速率相加,然后乘以1024獲得字節(jié)數(shù)
1024 * sum by (instance) ((rate(node_vmstat_pgpgin[1m]) + rate(node_vmstat_pgpgout[1m])))

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

14. 磁盤使用率

對于磁盤,只測量磁盤使用情況而不是使用率、飽和或錯誤。這是因為在大多數(shù)情況下,它是對可視化和警報最有用的數(shù)據(jù)。

//node_filesystem_size_bytes指標顯示了被監(jiān)控的每個文件系統(tǒng)掛載的大小。node_filesystem_size_bytes

可以使用與內(nèi)存指標類似的查詢來生成在主機上使用的磁盤空間百分比。

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

與內(nèi)存指標不同,在每個主機上的每個掛載點都有文件系統(tǒng)指標。所以添加了mountpoint標簽,特別是跟文件系統(tǒng)”/“掛載。這將在每臺主機上返回該文件系統(tǒng)磁盤使用指標。
如果想要或需要監(jiān)控特定掛載點,那么我們可以為其添加查詢。比如要監(jiān)控/data掛載點,可以使用。

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

或者可以使用正則表達式匹配多個掛載點

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

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

//預(yù)測四小時之后磁盤空間會不會爆滿predict_linear(node_filesystem_free_bytes{mountpoint="/"}[1h], 4* 3600) < 0

上面是指定跟文件系統(tǒng),還可以通過制定作業(yè)名稱或使用正則表達式來選擇所有文件系統(tǒng)

predict_linear(node_filesystem_free_bytes{job="node"}[1h], 4* 3600) < 0


我要咨詢