
大資料技術AI
Flink/Spark/Hadoop/數倉,資料分析、面試,源碼解讀等幹貨學習資料
91篇原創内容
公衆号
Prometheus 特點
官網:https://prometheus.io/
下載下傳位址:https://prometheus.io/download/
易于管理
Prometheus核心部分隻有一個單獨的二進制檔案,不存在任何的第三方依賴(資料庫,緩存等等)。唯一需要的就是本地磁盤,是以不會有潛在級聯故障的風險。Prometheus基于Pull模型的架構方式,可以在任何地方(本地電腦,開發環境,測試環境)搭建我們的監控系統。
對于一些複雜的情況,還可以使用Prometheus服務發現(Service Discovery)的能力動态管理監控目标。
監控服務的内部運作狀态
Pometheus鼓勵使用者監控服務的内部狀态,基于Prometheus豐富的Client庫,使用者可以輕松的在應用程式中添加對Prometheus的支援,進而讓使用者可以擷取服務和應用内部真正的運作狀态。
強大的資料模型
所有采集的監控資料均以名額(metric)的形式儲存在内置的時間序列資料庫當中(TSDB)。所有的樣本除了基本的名額名稱以外,還包含一組用于描述該樣本特征的标簽。如下所示:
每一條時間序列由名額名稱(Metrics Name)以及一組标簽(Labels)唯一辨別。每條時間序列按照時間的先後順序存儲一系列的樣本值。
http_request_status:名額名稱(Metrics Name)
{code='200',content_path='/api/path',environment='produment'}:表示次元的标簽,基于這些Labels我們可以友善地對監控資料進行聚合,過濾,裁剪。
[value1@timestamp1,value2@timestamp2...]:按照時間的先後順序 存儲的樣本值。
強大的查詢語言PromQL
Prometheus内置了一個強大的資料查詢語言PromQL。通過PromQL可以實作對監控資料的查詢、聚合。同時PromQL也被應用于資料可視化(如Grafana)以及告警當中。
通過PromQL可以輕松回答類似于以下問題:
在過去一段時間中95%應用延遲時間的分布範圍?
預測在4小時後,磁盤空間占用大緻會是什麼情況?
CPU占用率前5位的服務有哪些?(過濾)
高效
對于監控系統而言,大量的監控任務必然導緻有大量的資料産生。而Prometheus可以高效地處理這些資料,對于單一Prometheus Server執行個體而言它可以處理:
數以百萬的監控名額
每秒處理數十萬的資料點
可擴充
可以在每個資料中心、每個團隊運作獨立的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,可以友善地直接對資料進行查詢,并且支援直接以圖形化的形式展示資料。同時Prometheus還提供了一個獨立的基于Ruby On Rails的Dashboard解決方案 Promdash。最新的Grafana可視化工具也已經提供了完整的Prometheus支援,基于Grafana可以建立更加精美的監控圖示。基于Prometheus提供的API還可以實作自己的監控可視化UI。
開放性
通常來說當我們需要監控一個應用程式時,一般需要該應用程式提供對相應監控系統協定的支援,是以應用程式會與所選擇的監控系統進行綁定。為了減少這種綁定所帶來的限制,對于決策者而言要麼你就直接在應用中內建該監控系統的支援,要麼就在外部建立單獨的服務來适配不同的監控系統。
而對于Prometheus來說,使用Prometheus的client library的輸出格式不止支援Prometheus的格式化資料,也可以輸出支援其它監控系統的格式化資料,比如Graphite。是以你甚至可以在不使用Prometheus的情況下,采用Prometheus的client library來讓你的應用程式支援監控資料采集。
Prometheus 架構
Prometheus Server:主伺服器,負責收集和存儲時間序列資料
client libraies:應用程式代碼插樁,将監控名額嵌入到被監控應用程式中
Pushgateway:推送網關,為支援short-lived作業提供一個推送網關
exporter:專門為一些應用開發的資料攝取元件—exporter,例如:HAProxy、StatsD、Graphite等等。
Alertmanager:專門用于處理alert的元件
Prometheus既然設計為一個次元存儲模型,可以把它了解為一個OLAP系統。
存儲計算層
Prometheus Server,裡面包含了存儲引擎和計算引擎。
Retrieval元件為取數元件,它會主動從Pushgateway或者Exporter拉取名額資料。
Service discovery,可以動态發現要監控的目标。
TSDB,資料核心存儲與查詢。
HTTP server,對外提供HTTP服務。
采集層
采集層分為兩類,一類是生命周期較短的作業,還有一類是生命周期較長的作業。
短作業:直接通過API,在退出時間名額推送給Pushgateway。
長作業:Retrieval元件直接從Job或者Exporter拉取資料。
應用層
應用層主要分為兩種,一種是AlertManager,另一種是資料可視化。
AlertManager
對接Pagerduty,是一套付費的監控報警系統。可實作短信報警、5分鐘無人ack打電話通知、仍然無人ack,通知值班人員Manager...
Emial,發送郵件
資料可視化
Prometheus build-in WebUI
Grafana
其他基于API開發的用戶端
Prometheus 下載下傳
Prometheus 安裝
安裝Prometheus Server
Prometheus基于Golang編寫,編譯後的軟體包,不依賴于任何的第三方依賴。隻需要下載下傳對應平台的二進制包,解壓并且添加基本的配置即可正常啟動Prometheus Server。
1. 解壓
2. 添加配置prometheus.yml
3. 配置說明
1、global配置塊:控制Prometheus伺服器的全局配置
scrape_interval:配置拉取資料的時間間隔,預設為1分鐘。
evaluation_interval:規則驗證(生成alert)的時間間隔,預設為1分鐘。
2、rule_files配置塊:規則配置檔案
3、scrape_configs配置塊:配置采集目标相關, prometheus監視的目标。Prometheus自身的運作資訊可以通過HTTP通路,是以Prometheus可以監控自己的運作資料。
job_name:監控作業的名稱
static_configs:表示靜态目标配置,就是固定從某個target拉取資料
targets:指定監控的目标,其實就是從哪兒拉取資料。Prometheus會從http://hadoop1:9090/metrics上拉取資料。
Prometheus是可以在運作時自動加載配置的。啟動時需要添加:--web.enable-lifecycle
4. 啟動
安裝Pushgateway
Prometheus在正常情況下是采用拉模式從産生metric的作業或者exporter(比如專門監控主機的NodeExporter)拉取監控資料。但是我們要監控的是Flink on YARN作業,想要讓Prometheus自動發現作業的送出、結束以及自動拉取資料顯然是比較困難的。
PushGateway就是一個中轉元件,通過配置Flink on YARN作業将metric推到PushGateway,Prometheus再從PushGateway拉取就可以了。
直接解壓啟動即可,無需配置
安裝Node Exporter(選擇性安裝)
在Prometheus的架構設計中,Prometheus Server并不直接服務監控特定的目标,其主要任務負責資料的收集,存儲并且對外提供資料查詢支援。是以為了能夠能夠監控到某些東西,如主機的CPU使用率,我們需要使用到Exporter。
Prometheus周期性的從Exporter暴露的HTTP服務位址(通常是/metrics)拉取監控樣本資料。
Exporter可以是一個相對開放的概念,其可以是一個獨立運作的程式獨立于監控目标以外,也可以是直接内置在監控目标中。隻要能夠向Prometheus提供标準格式的監控樣本資料即可。
為了能夠采集到主機的運作名額如CPU, 記憶體,磁盤等資訊。我們可以使用Node Exporter。Node Exporter同樣采用Golang編寫,并且不存在任何的第三方依賴,隻需要下載下傳,解壓即可運作。可以從https://prometheus.io/download/ 擷取最新的node exporter版本的二進制包。
2. 啟動
3. 檢視
4. 設定開機自啟(所有機器)
設為開機自啟動
啟動服務
Prometheus 安裝檢視
浏覽器輸入:http://hadoop01:9090/
點選 Status,選中Targets:
prometheus、pushgateway和node exporter都是up狀态,表示安裝啟動成功: