TSDB(Time Series Database)時序列數據庫,咱們能夠簡單的理解爲一個優化後用來處理時間序列數據的軟件,而且數據中的數組是由時間進行索引的。php
時間序列數據庫的特色html
常見的時間序列數據庫java
TSDB項目 | 官網 |
---|---|
influxDB | https://influxdata.com/ |
RRDtool | http://oss.oetiker.ch/rrdtool/ |
Graphite | http://graphiteapp.org/ |
OpenTSDB | http://opentsdb.net/ |
Kdb+ | http://kx.com/ |
Druid | http://druid.io/ |
KairosDB | http://kairosdb.github.io/ |
Prometheus | https://prometheus.io/ |
Prometheus是由SoundCloud開發的開源監控報警系統和時序列數據庫(TSDB)。Prometheus使用Go語言開發,是Google BorgMon監控系統的開源版本。node
2016年由Google發起Linux基金會旗下的原生雲基金會(Cloud Native Computing Foundation), 將Prometheus歸入其下第二大開源項目。Prometheus目前在開源社區至關活躍。python
Prometheus和Heapster(Heapster是K8S的一個子項目,用於獲取集羣的性能數據。)相比功能更完善、更全面。Prometheus性能也足夠支撐上萬臺規模的集羣。linux
Prometheus生態系統由多個組件組成,它們中的一些是可選的。多數Prometheus組件是Go語言寫的,這使得這些組件很容易編譯和部署。git
主要負責數據採集和存儲,提供PromQL查詢語言的支持。github
官方提供的客戶端類庫有go、java、scala、python、ruby,其餘還有不少第三方開發的類庫,支持nodejs、php、erlang等。數據庫
支持臨時性Job主動推送指標的中間網關。vim
使用Rails開發可視化的Dashboard,用於可視化指標數據。
Exporter是Prometheus的一類數據採集組件的總稱。它負責從目標處蒐集數據,並將其轉化爲Prometheus支持的格式。與傳統的數據採集組件不一樣的是,它並不向中央服務器發送數據,而是等待中央服務器主動前來抓取。
Prometheus提供多種類型的Exporter用於採集各類不一樣服務的運行狀態。目前支持的有數據庫、硬件、消息中間件、存儲系統、HTTP服務器、JMX等。
警告管理器,用來進行報警。
命令行工具。
多種導出工具,能夠支持Prometheus存儲數據轉化爲HAProxy、StatsD、Graphite等工具所須要的數據存儲格式。
下面這張圖說明了Prometheus的總體架構,以及生態中的一些組件做用:
Prometheus的基本原理是經過HTTP協議週期性抓取被監控組件的狀態,任意組件只要提供對應的HTTP接口就能夠接入監控。不須要任何SDK或者其餘的集成過程。這樣作很是適合作虛擬化環境監控系統,好比VM、Docker、Kubernetes等。輸出被監控組件信息的HTTP接口被叫作exporter 。目前互聯網公司經常使用的組件大部分都有exporter能夠直接使用,好比Varnish、Haproxy、Nginx、MySQL、Linux系統信息(包括磁盤、內存、CPU、網絡等等)。
Prometheus服務過程大概是這樣:
Prometheus Daemon負責定時去目標上抓取metrics(指標)數據,每一個抓取目標須要暴露一個http服務的接口給它定時抓取。Prometheus支持經過配置文件、文本文件、Zookeeper、Consul、DNS SRV Lookup等方式指定抓取目標。Prometheus採用PULL的方式進行監控,即服務器能夠直接經過目標PULL數據或者間接地經過中間網關來Push數據。
Prometheus在本地存儲抓取的全部數據,並經過必定規則進行清理和整理數據,並把獲得的結果存儲到新的時間序列中。
Prometheus經過PromQL和其餘API可視化地展現收集的數據。Prometheus支持不少方式的圖表可視化,例如Grafana、自帶的Promdash以及自身提供的模版引擎等等。Prometheus還提供HTTP API的查詢方式,自定義所須要的輸出。
PushGateway支持Client主動推送metrics到PushGateway,而Prometheus只是定時去Gateway上抓取數據。
Alertmanager是獨立於Prometheus的一個組件,能夠支持Prometheus的查詢語句,提供十分靈活的報警方式。
Prometheus在記錄純數字時間序列方面表現很是好。它既適用於面向服務器等硬件指標的監控,也適用於高動態的面向服務架構的監控。對於如今流行的微服務,Prometheus的多維度數據收集和數據篩選查詢語言也是很是的強大。Prometheus是爲服務的可靠性而設計的,當服務出現故障時,它可使你快速定位和診斷問題。它的搭建過程對硬件和服務沒有很強的依賴關係。
Prometheus它的價值在於可靠性,甚至在很惡劣的環境下,你均可以隨時訪問它和查看系統服務各類指標的統計信息。 若是你對統計數據須要100%的精確,它並不適用,例如:它不適用於實時計費系統。
Prometheus官網:https://prometheus.io/
Prometheus官方給出了多重部署方案,好比:Docker容器、Ansible、Chef、Puppet、Saltstack等。
Prometheus用Golang實現,所以具備自然可移植性(支持Linux、Windows、macOS和Freebsd)。這裏直接使用預編譯的二進制文件部署,開箱即用。
這裏以Linux系統爲例:
1 |
$ wget https://github.com/prometheus/prometheus/releases/download/v1.6.3/prometheus-1.6.3.linux-amd64.tar.gz |
其它系統版本可在這裏下載:https://prometheus.io/download/
1 |
$ cd /usr/local/prometheus |
在prometheus目錄下有一個名爲prometheus.yml
的主配置文件。其中包含大多數標準配置及prometheus的自檢控配置,默認配置文件以下:
$ cat /usr/local/prometheus/prometheus.yml
# 全局配置
global:
scrape_interval: 15s # 默認抓取間隔, 15秒向目標抓取一次數據。
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# 這個標籤是在本機上每一條時間序列上都會默認產生的,主要能夠用於聯合查詢、遠程存儲、Alertmanger時使用。
external_labels:
monitor: 'codelab-monitor'
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first.rules"
# - "second.rules"
# 這裏就表示抓取對象的配置
# 這裏是抓去promethues自身的配置
scrape_configs:
# job name 這個配置是表示在這個配置內的時間序例,每一條都會自動添加上這個{job_name:"prometheus"}的標籤。
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
# 重寫了全局抓取間隔時間,由15秒重寫成5秒。
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
建立用戶
這裏單首創建一個專門用於運行prometheus的用戶,不用root運行程序是一種好習慣。主目錄爲/var/lib/prometheus
,用做prometheus的數據目錄。
1 |
$ groupadd prometheus |
1 |
$ vim /etc/systemd/system/prometheus.service |
1 |
$ systemctl start prometheus |
1 |
$ systemctl status prometheus |
Prometheus自帶一個比較簡單的Web,能夠查看錶達式搜索結果、報警配置、prometheus配置,exporter狀態等。自帶Web默認在http://ip:9090
。
Prometheus自己也是自帶exporter的,咱們經過請求 http://ip:9090/metrics
能夠查看從exporter中能具體抓到哪些數據。
這裏以Prometheus自己數據爲例,簡單演示下在Web中查詢指定表達式及圖形化顯示查詢結果。
上面用Prometheus自己的數據簡單演示了監控數據的查詢,這裏咱們用一個監控服務器狀態的例子來更加直觀說明。
爲監控服務器CPU、內存、磁盤、I/O等信息,首先須要安裝node_exporter。node_exporter的做用是用於機器系統數據收集。
node_exporter也是用Golang實現,直接使用預編譯的二進制文件部署,開箱即用。
1 |
$ wget https://github.com/prometheus/node_exporter/releases/download/v0.14.0/node_exporter-0.14.0.linux-amd64.tar.gz |
1 |
$ vim /etc/systemd/system/node_exporter.service |
1 |
$ systemctl start node_exporter |
1 |
$ systemctl status node_exporter |
Node Exporter默認的抓取地址爲http://IP:9100/metrics
1 |
$ vim /usr/local/prometheus/prometheus.yml |
prometheus.yml中一共定義了兩個監控:一個是監控prometheus自身服務,另外一個是監控Linux服務器。這裏給個完整的示例:
1 |
scrape_configs: |
1 |
$ systemctl restart prometheus |
訪問Prometheus Web,在Status->Targets頁面下,咱們能夠看到咱們配置的兩個Target,它們的State爲UP。
使用Prometheus Web來驗證Node Exporter的數據已經被正確的採集。
a) 查看當前主機的CPU使用狀況
b) 查看當前主機的CPU負載狀況
Prometheus Web界面自帶的圖表是很是基礎的,比較適合用來作測試。若是要構建強大的Dashboard,仍是須要更加專業的工具才行。接下來咱們將使用Grafana來對Prometheus採集到的數據進行可視化展現。
Grafana是用於可視化大型測量數據的開源程序,它提供了強大和優雅的方式去建立、共享、瀏覽數據。Dashboard中顯示了你不一樣metric數據源中的數據。
Grafana最經常使用於因特網基礎設施和應用分析,但在其餘領域也有用到,好比:工業傳感器、家庭自動化、過程控制等等。Grafana支持熱插拔控制面板和可擴展的數據源,目前已經支持Graphite、InfluxDB、OpenTSDB、Elasticsearch、Prometheus等。
軟件源裏是比較舊的2.6版本,而且還須要單獨打補丁才能正常使用Prometheus的數據源。這裏直接下載4.2版本安裝包進行安裝。
以Ubutu系統爲例:
1 |
$ wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_4.2.0_amd64.deb |
其它系統可在這裏下載:https://grafana.com/grafana/download
1 |
$ systemctl start grafana-server |
1 |
$ systemctl status grafana-server |
經過http://ip:3000
訪問Grafana Web界面(缺省賬號/密碼爲admin/admin)
1 |
Name:Prometheus |
在Dashboards頁面導入自帶的Prometheus Status模板
訪問https://grafana.com/dashboards/405
,從這裏下載Node Exporter Server Metrics模板的JSON文件。
在Grafana--Dashboard
中導入這個文件,數據源選擇Prometheus。
在Dashboards上選Node Exporter Server Metrics模板,就能夠看到被監控服務器的CPU, 內存, 磁盤等統計信息。
若是想具體查看某一項指標也是能夠的。
在Dashboards上選Prometheus Status模板,查看Prometheus各項指標數據。
參考文章: https://www.hi-linux.com/posts/25047.html