點擊右邊

我在使用PromeSA娛樂城theus時都踩過哪些坑?

Prometheus 是一個開源監控體系,它自身已經經成為了云原生中指標監控的究竟規范,幾近一切 k8s 的焦點組件和別的云原生體系都以 Prometheus 的指標格局輸入本人的運轉時監控信息。我在事情中也比較深切地使用過 Prometheus,最大的感觸感染便是它特別很是輕易維護,凸起一個簡略省心本錢低。當然,這之中也免不了踩過一些坑,上面就總結一下。

倘使你沒有效過 Prometheus,倡議先望一遍民間文檔。
接收準確性與靠得住捕魚達人千砲版性的衡量
Prometheus 作為一個基于指標(Metric)的監控體系,在設計上就拋卻了一部門數據準確性:
譬如在兩次采樣的距離中,內存用量有一個瞬時小尖峰,那末此次小尖峰咱們是察看不到的;
再譬如 QPS、RT、P9五、P99 這些值都只能預算,沒法以及日記體系同樣做到 100% 準確,上面也會講一個相關的坑。
拋卻一點準確性失去的是更高的靠得住性,這里的靠得住性體現為架構簡略、數據簡略、運維簡略。倘使你維護過 ELK 或者別的日記架構的話,就會發明相比于指標,日記體系想要穩固地跑上來必要支出幾十倍的機械本錢與人力本錢。既然是衡量,那就沒有好或者欠好,只有得當不得當,我保舉在運用 Prometheus 之初就要先思量清晰這個成績,而且將這個衡量明確地奉告使用方。
起首做好自監控
不曉得你有無思量過一個成績,別的體系都用 Prometheus 監控起來了,報警規定也配置好了,那 Prometheus 自身由誰來監控?
謎底是”另一個監控體系”,而這個監控體系可所以另一個 Prometheus。按照民間的 quickstart 或者 helm 部署的 Prometheus 單實例本人監控本人的,咱們當然不克不及期望一個體系掛失以后本人發明本人539怎麼玩才會贏掛了。
是以我猛烈倡議在上臨盆情況之前,肯定要確保最少有兩個自力的 Prometheus 實例相互做穿插監控。穿插監控的設置也很簡略,每臺 Prometheus 都拉取其他一切 Prometheus 的指標即可。
還有一個點是警報體系(Alertmanager),咱們再思量一下警報體系掛失的環境:這時候候 Prometheus 可以監控到警報體系掛了地下539中4碼多少錢,然則由于警報掛失了,以是警報天然就發不進去,這也是運用 Prometheus 之前必需弄定的成績。這個成績可以經由過程給警報體系做 HA 來應答。除此以外還有一個經典的兜底步伐鳴做 “Dead man’s switch”: 界說一條永久會觸發的告警,賡續關照,倘使哪天這條關照停了,那末申明報警鏈路出成績了。
不要使用 NFS 做存儲
如題,Prometheus 維護者也在 issue 中透露表現過不支撐 NFS。這點咱們有血淚教訓(咱們曾經經有一臺 Prometheus 存儲文件產生破壞丟掉了汗青數據)。
及早干失維渡過高的指標
依據咱們的履歷,Prometheus 里有 50% 以上的存儲空間以及 80% 以上的計算資本(CPU、內存)都是被那末兩三個維度超高的指標用失的。并且這種維度超高的指標因為數據量很大,輕微查得野一點就會 OOM 弄逝世 Prometheus 實例。
起首要明確這種指標是對 Pro炫海娛樂城metheus 的濫用,相似需求齊全應當放到日記流或者數倉里往算。然則指標的接入方存眷的每每是營業上夠不夠便利,倘使充足便利的話甚么都可以去 label 里塞。這就必要咱們防患于已然,一個有用的設施是用警報規定找出維渡過高的壞指標,然后在 Scrape 設置里 Drop 失致使維渡過高的 label。
警報規定的例子:

  1. # 統計每個指標的時間序列數,越過 10000 的報警 
  2. count by (__name__)({__name__=~".+"}) > 10000 

“壞指標”報警進去以后,就可以用 metric_relabel_config 的 drop 操作刪失有成績的 label(譬如 userId、email 這些一望便是成績戶),這里的設置方式可以查閱文檔。
對了,這條的樞紐詞是及早,最佳便是部署完就弄上這條規定,不然等哪天 Prometheus 容量滿了再往找營業方說要刪 label,那營業方可能就要不由得扇你了……
Rate 類函數 + Recording Rule 的坑
可能你已經經曉得了 PromQL 里要先 rate() 再 sum(),不克不及 sum() 完再 rate()(不曉得也沒事,立地講)。但當 rate() 已經經同類型的函數如 increase() 以及 recording rule 遇到一路時,可能就會不警惕失到坑里往。
那時,咱們已經經有了一個維度很高財神娛樂城的指標(只能持續維護了,由于沒有及早干失),為了讓人人查問得更快一點,咱們設計了一個 Recording Rule,用 sum() 往復失維渡過高的 bad_label,失去一個新指標。那末只需不觸及到 bad_label,人人就可以用新指標進行查問,Recording Rule 以下:

  1. sum(old_metric) without (bad_label) 

用了一段時辰后,人人發明 new_metric 做 rate() 失去的 QPS 趨向圖里常常有新鮮的尖峰,但 old_metric 就不會浮現。這時候咱們恍然大悟:繞了個彎踩進了 rate() 的坑里。
這違后與 rate() 的完成方式無關,rate() 在設計上假設對應的指標是一個 Counter,也便是只有 incr(增長) 以及 reset(回0) 兩種舉動。而做了 sum() 或者其余聚合以后,失去的就再也不是一個 Counter 了,舉個例子,譬如 sum() 的計算工具中有一個回0了,那團體的以及會降低,而不是回零,這會影響 rate() 中判定 reset(回0) 的邏輯,從而致使過錯的效果。寫 PromQL 時這個坑輕易幸免,但遇到 Recording Rule 就不那末輕易了,由于不往望設置的話人人也想不到 new_metric 是怎么來的。
要齊全躲避這個坑,可以遵循一個準則:Recording Rule 一步到位,間接算出必要的值,幸免算出一其中間效果再拿往做聚合。
警報以及汗青趨向圖未必 Match
近來半年經常被問兩個成績:

  • 我的汗青趨向圖六合彩即時望下來跨越水位線了,警報為何沒報?
  • 我的汗青趨向圖望下來挺正常的,警報為何報了?

這個中有一個緣故原由是:趨向圖上每個采樣點的采樣時間以及警報規定每次的計算時間不是嚴厲一致的。那時間區間拉得比較大的時辰,采樣點特別很是稀少,不如警報計算的距離來得密集,這個征象尤其明明,譬如時序圖采樣了 0秒,60秒,120秒三個點。而警報在15秒,30秒,45秒延續計算出了異樣,那在圖上就望不進去。另外,顛末越多的聚合和函數操作,不同時間點的數據懸殊會來得越明明,偶然確鑿輕易攪渾。

【免責聲明】本站內容轉載自互聯網,其相關談吐僅代表作者小我私家概念盡非權勢巨子,不代表本站態度。如您發明內容存在版權成績,請提交相關鏈接至郵箱:,咱們將實時予以處置。