Prometheus 介紹詳解

Prometheus 介紹node

  Prometheus(普羅米修斯)是一個最初在SoundCloud上構建的監控系統。自2012年成爲社區開源項目,擁有很是活躍的開發人員和用戶社區。爲強調開源及獨立維護,Prometheus於2016年加入雲原生雲計算基金會(CNCF),成爲繼Kubernetes以後的第二個託管項目。git

  • 官方網站:https://prometheus.io
  • 項目託管:https://github.com/prometheus

Prometheus 特色github

做爲新一代的監控框架,Prometheus 具備如下特色:web

一、多維數據模型:由度量名稱和鍵值對標識的時間序列數據api

二、PromSQL:一種靈活的查詢語言,能夠利用多維數據完成複雜的查詢服務器

三、不依賴分佈式存儲,單個服務器節點可直接工做架構

四、基於HTTP的pull方式採集時間序列數據框架

五、推送時間序列數據經過PushGateway組件支持分佈式

六、經過服務發現或靜態配置發現目標網站

七、多種圖形模式及儀表盤支持(grafana)

八、適用於以機器爲中心的監控以及高度動態面向服務架構的監控


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']
相關文章
相關標籤/搜索