1. 程式人生 > >prometheus監控系列之基礎篇

prometheus監控系列之基礎篇

先看架構

Prometheus簡介

Prometheus受啟發於Google的Brogmon監控系統(相似的Kubernetes是從Google的Brog系統演變而來),從2012年開始由前Google工程師在Soundcloud以開源軟體的形式進行研發,並且於2015年早期對外發布早期版本。2016年5月繼Kubernetes之後成為第二個正式加入CNCF基金會的專案,同年6月正式釋出1.0版本。2017年底釋出了基於全新儲存層的2.0版本,能更好地與容器平臺、雲平臺配合。

Prometheus簡史

Prometheus作為新一代的雲原生監控系統,目前已經有超過650+位貢獻者參與到Prometheus的研發工作上,並且超過120+項的第三方整合。

監控的目標

在《SRE: Google運維解密》一書中指出,監控系統需要能夠有效的支援白盒監控和黑盒監控。通過白盒能夠了解其內部的實際執行狀態,通過對監控指標的觀察能夠預判可能出現的問題,從而對潛在的不確定因素進行優化。而黑盒監控,常見的如HTTP探針,TCP探針等,可以在系統或者服務在發生故障時能夠快速通知相關的人員進行處理。通過建立完善的監控體系,從而達到以下目的:

  • ***長期趨勢分析:***通過對監控樣本資料的持續收集和統計,對監控指標進行長期趨勢分析。例如,通過對磁碟空間增長率的判斷,我們可以提前預測在未來什麼時間節點上需要對資源進行擴容。

  • ***對照分析:***兩個版本的系統執行資源使用情況的差異如何?在不同容量情況下系統的併發和負載變化如何?通過監控能夠方便的對系統進行跟蹤和比較。

  • ***告警:***當系統出現或者即將出現故障時,監控系統需要迅速反應並通知管理員,從而能夠對問題進行快速的處理或者提前預防問題的發生,避免出現對業務的影響。

  • ***故障分析與定位:***當問題發生後,需要對問題進行調查和處理。通過對不同監控監控以及歷史資料的分析,能夠找到並解決根源問題。

  • ***資料視覺化:***通過視覺化儀表盤能夠直接獲取系統的執行狀態、資源使用情況、以及服務執行狀態等直觀的資訊。

與常見監控系統比較

對於常用的監控系統,如Nagios、Zabbix的使用者而言,往往並不能很好的解決上述問題。這裡以Nagios為例,如下圖所示是Nagios監控系統的基本架構:
這裡寫圖片描述

Nagios監控系統

Nagios的主要功能是監控服務和主機。Nagios軟體需要安裝在一臺獨立的伺服器上執行,該伺服器稱為監控中心。每一臺被監控的硬體主機或者服務都需要執行一個與監控中心伺服器進行通訊的Nagios軟體後臺程式,可以理解為Agent或者外掛。
這裡寫圖片描述

Nagios主機監控頁面

首先對於Nagios而言,大部分的監控能力都是圍繞系統的一些邊緣性的問題,主要針對系統服務和資源的狀態以及應用程式的可用性。 例如:Nagios通過check_disk外掛可以用於檢查磁碟空間,check_load用於檢查CPU負載等。這些外掛會返回4種Nagios可識別的狀態,0(OK)表示正常,1(WARNING)表示警告,2(CRITTCAL)表示錯誤,3(UNKNOWN)表示未知錯誤,並通過Web UI顯示出來。

對於Nagios這類系統而言,其核心是採用了測試和告警(check&alert)的監控系統模型。 對於基於這類模型的監控系統而言往往存在以下問題:

  • ***與業務脫離的監控:***監控系統獲取到的監控指標與業務本身也是一種分離的關係。好比客戶可能關注的是服務的可用性、服務的SLA等級,而監控系統卻只能根據系統負載去產生告警;

  • 運維管理難度大: Nagios這一類監控系統本身運維管理難度就比較大,需要有專業的人員進行安裝,配置和管理,而且過程並不簡單;

  • ***可擴充套件性低:***監控系統自身難以擴充套件,以適應監控規模的變化;

  • ***問題定位難度大:***當問題產生之後(比如主機負載異常增加)對於使用者而言,他們看到的依然是一個黑盒,他們無法瞭解主機上服務真正的執行情況,因此當故障發生後,這些告警資訊並不能有效的支援使用者對於故障根源問題的分析和定位。
    ####Prometheus的優勢
    Prometheus是一個開源的完整監控解決方案,其對傳統監控系統的測試和告警模型進行了徹底的顛覆,形成了基於中央化的規則計算、統一分析和告警的新模型。
    相比於傳統監控系統Prometheus具有以下優點:

  • 易於管理
    Prometheus核心部分只有一個單獨的二進位制檔案,不存在任何的第三方依賴(資料庫,快取等等)。唯一需要的就是本地磁碟,因此不會有潛在級聯故障的風險。

  • Prometheus基於Pull模型的架構方式,可以在任何地方(本地電腦,開發環境,測試環境)搭建我們的監控系統。對於一些複雜的情況,還可以使用Prometheus服務發現(Servics Discovery)的能力動態管理監控目標。

監控服務的內部執行狀態

Pometheus鼓勵使用者監控服務的內部狀態,基於Prometheus豐富的Client庫,使用者可以輕鬆的在應用程式中新增對Prometheus的支援,從而讓使用者可以獲取服務和應用內部真正的執行狀態。
這裡寫圖片描述

強大的資料模型

所有采集的監控資料均以指標(metric)的形式儲存在內建的時間序列資料庫當中(TSDB)。所有的樣本除了基本的指標名稱以外,還包含一組用於描述該樣本特徵的標籤。

如下所示:

http_request_status{code='200',content_path='/api/path', environment='produment'} => [[email protected],[email protected]]

http_request_status{code='200',content_path='/api/path2', environment='produment'} => [[email protected],[email protected]]

每一條時間序列由指標名稱(Metrics Name)以及一組標籤(Labels)唯一標識。每條時間序列按照時間的先後順序儲存一系列的樣本值。

表示維度的標籤可能來源於你的監控物件的狀態,比如code=404或者content_path=/api/path。也可能來源於的你的環境定義,比如environment=produment。基於這些Labels我們可以方便地對監控資料進行聚合,過濾,裁剪。

強大的查詢語言PromQL

Prometheus內建了一個強大的資料查詢語言PromQL。 通過PromQL可以實現對監控資料的查詢、聚合。同時PromQL也被應用於資料視覺化(如Grafana)以及告警當中。

通過PromQL可以輕鬆回答類似於以下問題:

  • 在過去一段時間中95%應用延遲時間的分佈範圍?
  • 預測在4小時後,磁碟空間佔用大致會是什麼情況?
  • CPU佔用率前5位的服務有哪些?(過濾)
高效

對於監控系統而言,大量的監控任務必然導致有大量的資料產生。而Prometheus可以高效地處理這些資料,對於單一Prometheus Server例項而言它可以處理:

數以百萬的監控指標

每秒處理數十萬的資料點。

可擴充套件

Prometheus是如此簡單,因此你可以在每個資料中心、每個團隊執行獨立的Prometheus Sevrer。Prometheus對於聯邦叢集的支援,可以讓多個Prometheus例項產生一個邏輯叢集,當單例項Prometheus Server處理的任務量過大時,通過使用功能分割槽(sharding)+聯邦叢集(federation)可以對其進行擴充套件。

易於整合

使用Prometheus可以快速搭建監控服務,並且可以非常方便地在應用程式中進行整合。目前支援: Java, JMX, Python, Go,Ruby, .Net, Node.js等等語言的客戶端SDK,基於這些SDK可以快速讓應用程式納入到Prometheus的監控當中,或者開發自己的監控資料收集程式。同時這些客戶端收集的監控資料,不僅僅支援Prometheus,還能支援Graphite這些其他的監控工具。

同時Prometheus還支援與其他的監控系統進行整合:Graphite, Statsd, Collected, Scollector, muini, Nagios等。

Prometheus社群還提供了大量第三方實現的監控資料採集支援:JMX, CloudWatch, EC2, MySQL, PostgresSQL, Haskell, Bash, SNMP, Consul, Haproxy, Mesos, Bind, CouchDB, Django, Memcached, RabbitMQ, Redis, RethinkDB, Rsyslog等等。

視覺化

Prometheus Server中自帶了一個Prometheus UI,通過這個UI可以方便地直接對資料進行查詢,並且支援直接以圖形化的形式展示資料。同時Prometheus還提供了一個獨立的基於Ruby On Rails的Dashboard解決方案Promdash。最新的Grafana視覺化工具也已經提供了完整的Prometheus支援,基於Grafana可以建立更加精美的監控圖示。基於Prometheus提供的API還可以實現自己的監控視覺化UI。

開放性

通常來說當我們需要監控一個應用程式時,一般需要該應用程式提供對相應監控系統協議的支援。因此應用程式會與所選擇的監控系統進行繫結。為了減少這種繫結所帶來的限制。對於決策者而言要麼你就直接在應用中整合該監控系統的支援,要麼就在外部建立單獨的服務來適配不同的監控系統。

而對於Prometheus來說,使用Prometheus的client library的輸出格式不止支援Prometheus的格式化資料,也可以輸出支援其它監控系統的格式化資料,比如Graphite。

因此你甚至可以在不使用Prometheus的情況下,採用Prometheus的client library來讓你的應用程式支援監控資料採集。

相關推薦

prometheus監控系列基礎

Prometheus簡介 Prometheus受啟發於Google的Brogmon監控系統(相似的Kubernetes是從Google的Brog系統演變而來),從2012年開始由前Google工程師在Soundcloud以開源軟體的形式進行研發,並且於2015

1.偏頭痛楊的mysql教學系列基礎概念

前戲 mysql是目前最流行的關係型資料庫之一,在阿里前幾年的去IOE化後整風運動後, mysql從中小型資料庫解決方案成長為了大型網際網路應用關係型資料庫解決方案的中流砥柱。 因為mysql免費且開源,還可以無限擴充套件成N個數據庫叢集,玩分庫分表。 MYSQ

IC設計基礎系列CDC6:從CMOS到觸發器(一)

  我們或多或少知道,電晶體在數位電路中的主要作用就是一個電子開關,通過電壓或者電流,控制這個“開關”開還是關。電晶體大概有兩種分類:一種是雙極性電晶體(BJT,bipolar  junction  transistor),另外一種是金屬-氧化物-半導體場效應電晶體(MOSFET或者MOS,metal-ox

[Android 效能優化系列]記憶體基礎--Android如何管理記憶體

轉載請標明出處(http://blog.csdn.net/kifile),再次感謝 在接下來的一段時間裡,我會每天翻譯一部分關於效能提升的Android官方文件給大家 下面是本次的正文: ################ 隨機訪問儲存器(Ram) 不管在哪種軟體開發

IC設計基礎系列CDC10:跨時鐘域訊號傳輸(二)——資料訊號

因為學習了其他方面的知識,耽擱了更新。今天我們就聊聊跨時鐘域中的資料訊號傳輸的問題。主要內容預覽:    ·使用握手訊號進行跨時鐘域的資料傳輸   ·FIFO的介紹   ·在進行FIFO的RTL設計前的問題   ·FIFO的RTL設計(與模擬測試)   ·

IC設計基礎系列CDC1:clock domain crossing(CDC) (一 CDC的基本概念)

隨著技術的發展,數位電路的整合度越來越高,設計也越來越複雜。很少有系統會只工作在同一個時鐘頻率。一個系統中往往會存在多個時鐘,這些時鐘之間有可能是同步的,也有可能是非同步的。如果一個系統中,非同步時鐘之間存在訊號通道,則就會存在CDC(clock domain crossin

Golang系列(一)基礎

一、初識Go語言(一)概述一個在語言層面實現了併發機制的類C通用型程式語言。(二)Go關鍵字(25個)類別關鍵字說明程式宣告package,import包的宣告和匯入宣告與定義var,const變數和常量的宣告type用於定義型別複合資料型別struct定義結構體,類似java中的classinterface

Qt入門基礎 ( 二 ) :Qt項目建立、編譯、運行和發布過程解析

qt 5 對話 讓我 進度 qmake ctr deploy 設定 設置 轉載請註明出處:CN_Simo。 題解:   本篇內容主講Qt應用從創建到發布的整個過程,旨在幫助讀者能夠快速走進Qt的世界。   本來計劃是講解Qt源碼靜態編譯,如此的話讀者可能並不能清楚地知

Qt入門基礎 ( 一 ) :Qt4及Qt5的下載與安裝

mingw ins 第3版 點擊 調試 但我 關系 構建 eas 轉載請註明出處:CN_Simo. 導語: Qt是一個跨平臺的C++圖形界面應用程序框架。它提供給開發者建立圖形用戶界面所需的功能,廣泛用於開發GUI程序,也可用於開發非GUI程序。Qt很容易擴展,並

[轉]Eclipse插件開發基礎(1) 插件開發的基礎知識

作用 原本 services 註冊 1-1 啟動 創建 abs class 原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/13/eclipse_plugin_1_0_2.html 名詞翻譯   有一些名詞在翻譯的

[轉]Eclipse插件開發基礎(3) 插件的測試與調試

case ews ... 有時 sam cancel workbench osgi ring 原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/17/eclipse_plugin_1_1_2.html 1. 使用JU

[轉]Eclipse插件開發基礎(4) OSGi框架

動作 update 執行 創建 class cti 指定 mpc 代碼 原文地址:http://www.cnblogs.com/liuzhuo/archive/2010/08/18/eclipse_plugin_1_2_1.html   1. 什麽是OSGi框架   O

sql系列基礎)-前言 課前補充知識

ng- 2.0 .sql nbsp 值範圍 lease size cte file 前言 課前補充知識 Number(p,s) Number(p,s):數字類型,p 表示數字的有效長度(從數字的左邊第 1 位不為 0 的開始算起,直到最右邊的長度。取值範圍 0~38

視頻教程:Java七大外企經典面試套路基礎

視頻教程:Java七大外企經典面試套路之基礎篇 視頻教程:Java七大外企經典面試套路之基礎篇 Java是Sun公司推出的一種編程語言。它是一種通過解釋方式來執行的語言,語法規則和C++類似。同時,Java也是一種跨平臺的程序設計語言。 本教程主要給

chrome瀏覽器開發常用快捷鍵基礎-遁地龍卷風

rom 後臺 加載網頁 打開鏈接 上一個 tps 保存 參考 瀏覽器開發 1.標簽頁和窗口快捷鍵   打開新的標簽頁,並跳轉到該標簽頁 Ctrl + t   重新打開最後關閉的標簽頁,並跳轉到該標簽頁 Ctrl + Shift + t   跳轉到下一個打開的標簽頁 Ctrl

T4模板:T4模板基礎

教程 添加 介紹 9.png 輸出 com 明顯 gin ecif 一、回顧 上一篇文章 ——T4模板之菜菜鳥篇,我們囫圇吞棗的創建了與“T4模板”有關的文件。在創建各個文件的這一個過程中,我們對於T4模板有了那麽丁點的認識。現在就帶著之前的那些問題,正式的邁入對“T4模板

Java基礎系列基礎數據類型

四種 分數 系列 數字 好處 java基礎 bsp style 情況 在Java中,一共有8種基本類型,其中有四種整型,兩種浮點型,還有一個表示unicode編碼的字符單元的字符類型char和1種用於表示真假值的boolean類型。 在這裏介紹一下有種在項目比較常用

C#系列基礎知識點(一)

命名規則 系列 字符 註釋 編輯器 小數類型 智能 規則 解釋 知識點一:VS啟動方法 第一種:雙擊圖標 第二種:window+R——調出cmd,輸入devenu properties 屬性的意思 知識點二:後綴名解釋 .sln 解決方案文件:包含整個解決方案的信息 .

【思庫教育】2017PHP項目實戰基礎+進階+項目基礎

商品 資源庫 商城 文件引入 正則表達式 匿名 header 類和對象 多少 下載鏈接: 【思庫教育】2017PHP項目實戰基礎+進階+項目之基礎篇 小白變大牛,您的專屬資源庫! 小白變大牛,您的專屬資源庫! 內容非常充實,可以看目錄,設計的面多,項目多,技能多

Python系列入門——HDFS

system rec urn cep gpo user raise ret append Python系列之入門篇——HDFS 簡介 HDFS (Hadoop Distributed File System) Hadoop分布式文件系統,具有高容錯性,適合部署在廉價的機器上