輕松入門普羅米修斯


輕松入門普羅米修斯

Prometheus(由go語言(golang)開發)是一開源的監控&報警&時間序列數據庫的組合。 適合監控docker容器。因為kubernetes(俗稱k8s)的流行帶動了 prometheus的發展。

普羅原理架構圖:

 

 

Prometheus具有以下特性:
 
1.多維的數據模型(基於時間序列的Key、 value鍵值對)
2.靈活的查詢和聚合語言PromQL
3.提供本地存儲和分布式存儲
4.通過基於HTTP和HTTPs的Pull模型采集時間序列數據(pull數據的推送,時間序列:每段時間點的數據值指標,持續性的產生。橫軸標識時間,縱軸為數據值,一段時間內數值的動態變化,所有的點連線形成大盤式的折線圖)
5.可利用Pushgateway (Prometheus的可選中間件)實現Push模式
6.可通過動態服務發現或靜態配置發現目標機器(通過consul自動發現和收縮)支持多種圖表和數據大盤
*補充: open-Falcaon是小米開源的企業級監控工具,用co語言開發,包括小米、滴滴、美團等在內的互聯網公司都在使用它,是一款靈活、可拓展並且高性能的監控方案。
 
 

運維監控平台設計思路:

1. 數據收集模塊
2. 數據提取模塊(prometheus-TSDB 查詢語言是PromQL)
3. 監控告警模塊―(布爾值表達式判斷是否需要告警Promg (cPu使用率)>80%)
町以細化為6層
第六層:用戶展示管理層同一用戶管理、集中監控、集中維護
第五層:告警事件生成層―實時記錄告警事件、形成分析圖表(趨勢分析、可視化)
第四層:告警規則配置層告警規則設置、告警伐值設置
第三層:數據提取層定時采集數據到監控模塊
第二層:數據展示層―數據生成曲線圖展示(對時序數據的動態展示)第一層:數據收集層多渠道監控數據
 
 
 

普羅監控體系:

系統層監控(需要監控的數據)
1.cPU、Load、Memory、swap、disk i/o、process等
2.網絡監控:網絡設備、工作負載、網絡延遲、丟包率等
中間件及基礎設施類監控
1.消息中間件:kafka、RocketMQ、等消息代理
2.wEB服務器容器: tomcat
3.數據庫/緩存數據庫:MySQI、PostgresQL、MogoDB、es、 redisredis監控內容:
redis所在服務器的系統層監控redis 服務狀態
RDB AOF日志監控
日志—>如果是哨兵模式—>哨兵共享集群信息,產生的日志—>直接包含的其他節點哨兵信息及redis信息
key的數量
key被命中的數據/次數
最大連接數——》redis 和系統:系統: ulimit -a
redis:redis-cli登陸—》config get maxclients查看最大連接
應用層監控
用於衡量應用程序代碼狀態和性能#監控的分類#:黑盒監控,白盒監控PS:
白盒監控,自省指標,等待被下載
黑盒指標:基於探針的監控方式,不會主動干預、影響數據
業務層監控
用於衡量應用程序的價值,如電商業務的銷售量,ops、dau日活、轉化率等,業務接口:登入數量,注冊數、訂單量、搜索量和支付量
 
 
 

prometheus使用場景

1.Prometheus特點:
自定義多維數據模型(時序列數據由metric名和一組key/value標簽組成)
非常高效的儲存平均一個采樣數據占大約3.5bytes左右,320萬的時間序列,每30秒采樣,保持60天,消耗磁盤大概228G
在多維上靈活且強大的查詢語句( PromQL)
不依賴分布式儲存,支持單主節點工作通過基於HTTP的pull方式采集時序數據
可以通過push gateway進行時序列數據庫推送(pushing>可以通過服務發現或靜態配置去獲取要采集的目標服務器多種可視化圖表及儀表盤支持
2.使用場景
Prometheus可以很好地記錄任何純數字時間序列。它既適用於以機器為中心的監視,也適用於高度動態的面向服務的體系結構的監視。在微服務世界中,它對多維數據收集和查詢的支持是一種特別的優勢。(k8s)
Prometheus是為可靠性而設計的,它是您在中斷期間要使用的系統,可讓您快速診斷問題。每個Prometheus服務器都是獨立的,而不依賴於網絡存儲或其他遠程服務。當基礎結構的其他部分損壞時,您可以依靠它,並且無需設置廣泛的基礎結構即可使用它
3.不適合的場景
普羅米修斯重視可靠性。即使在故障情況下,您始終可以查看有關系統的可用統計信息。如果您需要100 %的准確性(例如按請求計費),則Pprometheus並不是一個不錯的選擇,因為所收集的數據可能不會足夠詳細和完整。在這種情況下,最好使用其他系統來收集和分析數據以進行計費,並使用erometheus進行其余的監視。
 
 

prometheus時序數據

時序數據,是在一段時間內通過重復測量(measurement》而獲得的觀測值的集合將這些觀測值繪制於圖形之上,它會有一個數據軸和一個時間軸,服務器指標數據、應用程序性能監控數據、網絡數據等也都是時序數據;
1.數據來源:
prometheus基於HrTP call (http/https請求),從配置文件中指定的網絡端點(endpoint/TP;:端口)上周期性獲取指標數據。
很多環境、被監控對象,本身是沒有直接響應/處理http請求的功能,prometheus-exporter則可以在被監控端收集所需的數據,收集過來之后,還會做標准化,把這些數據轉化為prometheus可識別,可使用的數據(兼容格式)
2.收集數據:
監控概念:白盒監控、黑盒監控
白盒監控:自省方式,被監控端內部,可以自己生成指標,只要等待監控系統來采集時提供出去即可
黑盒監控:對於被監控系統沒有侵入性,對其沒有直接"影響",這種類似於基於探針機制進行監控(snmp協議)
Prometheus支持通過三種類型的途徑從目標上"抓取(Scrape)"指標數據(基於白盒監控);
Exporters—>工作在被監控端,周期性的抓取數據並轉換為pro兼容格式等待prometheus來收集,自己並不推送
Instrumentation—>指被監控對象內部自身有數據收集、監控的功能,只需要prometheus直接去獲取
Pushgateway ——>短周期5s—10s的數據收集
3.prometheus(獲取方式)
Prometheus同其它rsDB相比有一個非常典型的特性:它主動從各Target.上拉取(pull)數據,而非等待被監控端的推送(push)
兩個獲取方式各有優劣,其中,Pull模型的優勢在於:
集中控制:有利於將配置集在Prometheus server上完成,包括指標及采取速率等;
Prometheus的根本目標在於收集在rarget上預先完成聚合的聚合型數據,而非一款由事件驅動的存儲系統通過targets (標識的是具體的被監控端)
比如配置文件中的targets: [ 'localhost : 9090']
exporter收集了200行數括cpu使用率{ code='cpu0'}cpu使用率{ code='cpul'}cpu使用率{ code='cpu2' }#####
schme { "http" }
HOST { "192.168.226.128"}Port { "9100"}
PATH{ " / usr / local/ nginx/"}
需求是輸出完整的URL
_sdhme_host_port_path { "http://192.168.226.128:9100/usr/local/nginx" }
 
 
 

prometheus生態組件:

 

prometheus生態圈中包含了多個組件,其中部分組件可選
 
1.prometheus-server:
retrieval(獲取數據pull/discover) ,TSDB存儲,HTPserver
控制台接口,內建了數據樣本采集器,可以通過配置文件定義,告訴prometheus到那個監控對象中采集指標數據,prome theus采集過后,會存儲在自己內建的rSDB數據庫中(默認為2個月時間1),提供了promgL支持查詢和過濾操作,同時支持自定義規則來作為告警規則,持續分析一場指標,一旦發生,通知給alerter來發送告警信息,還支持對接外置的UI工具 (grafana)來展示數據
2.pushgateway (短期周期任務)
允許短暫和批量作業將其指標暴露給普羅米修斯,由於這些類型的作業可能存在時間不足而被刪除,因此他們可以將其指標推送到pushgateway,然后pushgateway將這些指標暴露給Prometheus-server端,主要用於業務數據匯報
3.exporters (常規任務-守護進程)
專門采集一些web服務,nginx, mysql服務。因為不適合直接通過attp的方式采集數據,所以需要通過exporter采集數據(下載mysql_exporter,采集mysql數據指標) cadvisor: docker數據收集工具(docker也有自己內置的監控收集方式
exporter和instrumtations,負責專門服務數據的收集然后暴露出來等待promtheus收集
4.service discovery:原生支持k8s的服務發現,支持consul、DNS等
5.prometheus內置TSDB數據庫作為存儲(時序數據的儲存,promtheus的TSDB數據庫默認保存15天,可以自行調整)
ps:時間序列數據庫(時序數據庫)主要用於指處理代表簽(按照時間的順序變化,既時間序列化)的數據,帶時間標簽的數據也成為時間序列數據,這是一種特殊類型的數據庫,一般不會保存長時間的數據(與mysql相比)。
數據保存時間storge.tsdb.retention=90d參數中修改即可(或啟動時間指定)
6.alertmanagr: prometheus可以生成告警信息,但是不能直接提供告警,需要使用一個外置的組件altermanager來進行告警,emailteor代t勢在於,收斂、支持靜默、去重、可以防止告警信息的轟炸
7.data visualization: prometheus web ui (prometheus-server內建),也可以便用grafana
8.PrmoQL (告警規則編寫),通常告警規則的文件指定輸出到展示界面(grafana)
9.ui表達式瀏覽器(調試)
 
 

部署:

 

 

 

 

 

 

 

prometheus數據模型(什么是標簽、什么是指標、什么是樣本)-概述

prometheus僅用鍵值方式存儲時序式的聚合數據,他不支持文本信息
其中的""鍵"成為指標(metric),通常意味着cpu速率、內存使用率或分區空閑比例等
向一指標可能適配到多個目標或設備、因而它使用"標簽"作為元數據,從而為metric添加更多的信息描述維度例如三台設備,在同一時刻,都會產生例如1分組cPu負載的數據,他們都公使用相同的指標(metric),而此時一個指標,如何表示時間序列?
比如:三個node節點都公有相同的指標(例如cpu0的負載那么就公使用相同的指標名稱)
使用指標:標簽=標簽值的格式來表樂,例如: local1 (host=node1, host=node2 )
metric icpu指標):
示例:
cpu_usage{ core-" 1 ',ip-"192.168.226.128" 14.04
key cpu0 labels (元數據) 樣本
1
2
prometheus每一份樣本數據都包含了:
時序列標識:key+lables
當前時間序列的樣本值value這些標簽可以作為過濾器進行指標過濾及聚合運算,如何從上萬的數據過濾出關鍵有限的時間序列,同時從有限的時間序列在特定范圍的樣本那就需要手動編寫出時間序列的樣本表達式來過濾出我們需求的樣本數據
(一)指標類型
默認都是以雙精度浮點型數據(服務端無數據量類型數據)
counter :計數器單調遞增
gauge :儀表盤:有起伏特征的histogram:直方圖:
在一段時間范圍內對數據采樣的相關結果,並記入配置的bucket中,他可以存儲更多的數據,包括樣本值分布在每個bucket的數量,從而prometheus就可以使用內置函數進行計算:
計算樣本平均值:以值得綜合除以值的數量
計算樣本分位值:分位數有助於了解符合特定標准的數據個數,例如評估響應時間超過1秒的請求比例,若超過20%則進行告警等 summary,摘要,histogram的擴展類型,它是直接由監控端自行聚合計算出分位數,同時
將計算結果響應給prometheus server的樣本采集請求,因而,其分位數計算是由監控端完成
(二)作業job和實例targets/instance
job:能夠接收prometheus server數據scrape
targets每一個可以被監控的系統,成為targets多個相同的targets的集合(類)稱為jobinstance:實例與targets (類似)
與target相比,instance更趨近於一個具體可以提供監控數據的實例,而targets則更像一個對象、目標性質
(三) prometheusQL(數據查詢語言也是時序數據庫使用語言)支持兩種向量,同時內置提供了一組用於數據處理的函數
o即時向量:最近以此時間戳上跟蹤的數據指標(一個時間點上的數據)
即時向量選擇器:返回0個1個或者多個時間序列上在給定時間戳上的各自的一個樣本該樣本成為即時樣本
時間范圍向量:指定時間范圍內所有時間戳上的數據指標
范圍向量選擇器:返回0個1個或多個時間序列上在給定時間范圍內的各自的一組樣本(范圍向量選擇器無法用於繪圖)
 
 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM