Prometheus 介紹
Prometheus(普羅米修斯)是一個最初在SoundCloud上構建的監控系統。自2012年成為社區開源項目,擁有非常活躍的開發人員和用戶社區。為強調開源及獨立維護,Prometheus於2016年加入雲原生雲計算基金會(CNCF),成為繼Kubernetes之后的第二個托管項目。
- 官方網站:https://prometheus.io
- 項目托管:https://github.com/prometheus
Prometheus 特點
作為新一代的監控框架,Prometheus 具有以下特點:
1、多維數據模型:由度量名稱和鍵值對標識的時間序列數據
2、PromSQL:一種靈活的查詢語言,可以利用多維數據完成復雜的查詢
3、不依賴分布式存儲,單個服務器節點可直接工作
4、基於HTTP的pull方式采集時間序列數據
5、推送時間序列數據通過PushGateway組件支持
6、通過服務發現或靜態配置發現目標
7、多種圖形模式及儀表盤支持(grafana)
8、適用於以機器為中心的監控以及高度動態面向服務架構的監控
Prometheus 組織架構
Prometheus 由多個組件組成,但是其中許多組件是可選的:
- Prometheus Server:用於收集指標和存儲時間序列數據,並提供查詢接口
- client Library:客戶端庫(例如Go,Python,Java等),為需要監控的服務產生相應的/metrics並暴露給Prometheus Server。目前已經有很多的軟件原生就支持Prometheus,提供/metrics,可以直接使用。對於像操作系統已經不提供/metrics,可以使用exporter,或者自己開發exporter來提供/metrics服務。
- push gateway:主要用於臨時性的 jobs。由於這類 jobs 存在時間較短,可能在 Prometheus 來 pull 之前就消失了。對此Jobs定時將指標push到pushgateway,再由Prometheus Server從Pushgateway上pull。
這種方式主要用於服務層面的 metrics:
- exporter:用於暴露已有的第三方服務的 metrics 給 Prometheus。
- alertmanager:從 Prometheus server 端接收到 alerts 后,會進行去除重復數據,分組,並路由到對收的接受方式,發出報警。常見的接收方式有:電子郵件,pagerduty,OpsGenie, webhook 等。
- Web UI:Prometheus內置一個簡單的Web控制台,可以查詢指標,查看配置信息或者Service Discovery等,實際工作中,查看指標或者創建儀表盤通常使用Grafana,Prometheus作為Grafana的數據源;
注:大多數 Prometheus 組件都是用 Go 編寫的,因此很容易構建和部署為靜態的二進制文件。
Prometheus 數據模型
Prometheus將所有數據存儲為時間序列;具有相同度量名稱以及標簽屬於同一個指標。
每個時間序列都由度量標准名稱和一組鍵值對(也成為標簽)唯一標識。
時間序列格式:
<metric name>{<label name>=<label value>, ...}
示例:
api_http_requests_total{method="POST", handler="/messages"}
度量名稱{標簽名=值}值
HELP 說明指標是干什么的
TYPE 指標類型,這個數據的指標類型
注:度量名通常是一英文命名清晰。標簽名英文、值推薦英文。
Prometheus 指標類型
• Counter:遞增的計數器
適合:API 接口請求次數,重試次數。
• Gauge:可以任意變化的數值
適合:cpu變化,類似波浪線不均勻。
• Histogram:對一段時間范圍內數據進行采樣,並對所有數值求和與統計數量、柱狀圖
適合:將web 一段時間進行分組,根據標簽度量名稱,統計這段時間這個度量名稱有多少條。
適合:某個時間對某個度量值,分組,一段時間http相應大小,請求耗時的時間。
• Summary:與Histogram類似
Prometheus 作業和實例
- 實例:可以抓取的目標稱為實例(Instances)
- 作業:具有相同目標的實例集合稱為作業(Job)
scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'node' static_configs: - targets: ['192.168.1.10:9090']