基于Grafana和Prometheus的監視系統

基于Grafana和Prometheus的監視系統

1. Prometheus

1.1 Prometheus 介紹

Prometheus(普羅米修斯)是一套開源的監控&報警&時間序列數據庫的組合.由SoundCloud公司開發。

Prometheus基本原理是通過HTTP協議周期性抓取被監控組件的狀態,這樣做的好處是任意組件只要提供HTTP接口就可以接入監控系統,不需要任何SDK或者其他的集成過程。這樣做非常適合虛擬化環境比如VM或者Docker 。

Prometheus應該是為數不多的適合Docker、Mesos、Kubernetes環境的監控系統之一。

輸出被監控組件信息的HTTP接口被叫做exporter 。目前互聯網公司常用的組件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux 系統信息 (包括磁盤、內存、CPU、網絡等等),具體支持的源看:https://github.com/prometheus

與其他監控系統相比,Prometheus的主要特點是:

  • 一個多維數據模型(時間序列由指標名稱定義和設置鍵/值尺寸)。
  • 非常高效的存儲,平均一個采樣數據占~3.5bytes左右,320萬的時間序列,每30秒采樣,保持60天,消耗磁盤大概228G。
  • 一種靈活的查詢語言。
  • 不依賴分布式存儲,單個服務器節點。
  • 時間集合通過HTTP上的PULL模型進行。
  • 通過中間網關支持推送時間。
  • 通過服務發現或靜態配置發現目標。
  • 多種模式的圖形和儀表板支持。

1.2 架構


image.png

它的服務過程是這樣的Prometheus daemon負責定時去目標上抓取metrics(指標) 數據,每個抓取目標需要暴露一個http服務的接口給它定時抓取。

Prometheus:支持通過配置文件、文本文件、zookeeper、Consul、DNS SRV lookup等方式指定抓取目標。支持很多方式的圖表可視化,例如十分精美的Grafana,自帶的Promdash,以及自身提供的模版引擎等等,還提供HTTP API的查詢方式,自定義所需要的輸出。

Alertmanager:是獨立于Prometheus的一個組件,可以支持Prometheus的查詢語句,提供十分靈活的報警方式。

PushGateway:這個組件是支持Client主動推送metrics到PushGateway,而Prometheus只是定時去Gateway上抓取數據。

大多數Prometheus組件都是用Go編寫的,它們可以輕松地構建和部署為靜態二進制文件。訪問https://prometheus.io以獲取完整的文檔,示例和指南。

1.3 Prometheus的數據模型

Prometheus從根本上所有的存儲都是按時間序列去實現的,相同的metrics(指標名稱) 和label(一個或多個標簽) 組成一條時間序列,不同的label表示不同的時間序列。為了支持一些查詢,有時還會臨時產生一些時間序列存儲。

metrics name&label指標名稱和標簽

每條時間序列是由唯一的”指標名稱”和一組”標簽(key=value)”的形式組成。

  • 指標名稱:一般是給監測對像起一名字,例如http_requests_total這樣,它有一些命名規則,可以包字母數字之類的的。通常是以應用名稱開頭監測對像數值類型單位這樣。例如:push_total、userlogin_mysql_duration_seconds、app_memory_usage_bytes。

  • 標簽:就是對一條時間序列不同維度的識別了,例如一個http請求用的是POST還是GET,它的endpoint是什么,這時候就要用標簽去標記了。最終形成的標識便是這樣了:http_requests_total{method=”POST”,endpoint=”/api/tracks”}。

如果以傳統數據庫的理解來看這條語句,則可以考慮http_requests_total是表名,標簽是字段,而timestamp是主鍵,還有一個float64字段是值了。(Prometheus里面所有值都是按float64存儲)。

1.4 Prometheus四種數據類型

  • Counter
    Counter用于累計值,例如記錄請求次數、任務完成數、錯誤發生次數。一直增加,不會減少。重啟進程后,會被重置。

  • Gauge
    Gauge常規數值,例如 溫度變化、內存使用變化。可變大,可變小。重啟進程后,會被重置。

  • Histogram
    Histogram(直方圖)可以理解為柱狀圖的意思,常用于跟蹤事件發生的規模,例如:請求耗時、響應大小。它特別之處是可以對記錄的內容進行分組,提供count和sum全部值的功能。

  • Summary
    Summary和Histogram十分相似,常用于跟蹤事件發生的規模,例如:請求耗時、響應大小。同樣提供 count 和 sum 全部值的功能。它提供一個quantiles的功能,可以按%比劃分跟蹤的結果。例如:quantile取值0.95,表示取采樣值里面的95%數據。

2.Grafana

grafana是用于可視化大型測量數據的開源程序,他提供了強大和優雅的方式去創建、共享、瀏覽數據。dashboard中顯示了不同metric數據源中的數據。

grafana有熱插拔控制面板和可擴展的數據源,目前已經支持Graphite、InfluxDB、OpenTSDB、Elasticsearch等。

3.監控系統架構

使用開源時序數據庫 Prometheus 作為監控和性能指標信息存儲方案,使用 Grafana 作為可視化組件進行展示。

Prometheus 是一個擁有多維度數據模型,靈活的查詢語句的時序數據庫。Prometheus 作為熱門的開源項目,擁有活躍的社區及眾多的成功案例。

Prometheus 提供了多個組件供用戶使用。目前,我們使用 Prometheus Server,來收集和存儲時間序列數據。Client 代碼庫,在程序中定制需要的 Metric 。Push GateWay 來接收 Client Push 上來的數據,統一供 Prometheus 主服務器抓取。以及 AlertManager 來實現報警機制。其結構如下圖:


image.png

Grafana 是一個開源的 metric 分析及可視化系統。我們使用 Grafana 來展示系統的各項性能指標 。如下圖所示:

4.系統搭建

4.1搭建監控系統

Prometheus Push Gateway 參考: https://github.com/prometheus/pushgateway

Prometheus Server 參考: https://github.com/prometheus/prometheus#install

Grafana 參考: http://docs.grafana.org

4.2配置

4.2.1 Prometheus 配置

vim prometheus.yml

# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ['192.168.1.115:9090']

  - job_name: 'linux'
    static_configs:
      - targets: ['192.168.1.115:9100']
  - job_name: 'pushgateway'
    static_configs:
      - targets: ['192.168.1.115:9091']
    honor_labels: true
~                      

啟動成功以后我們可以通過Prometheus內置了web界面訪問,http://ip:9090

4.2.2 grafana 配置

編輯配置文件/etc/grafana/grafana.ini ,修改dashboards.json段落下兩個參數的值:

[dashboards.json]
enabled = true
path = /var/lib/grafana/dashboards

安裝儀表盤JSON模版:

git clone https://github.com/percona/grafana-dashboards.git
cp -r grafana-dashboards/dashboards /var/lib/grafana/
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容