初始Prometheus

監(jiān)控的目標(biāo)

在《SRE: Google運(yùn)維解密》一書中指出赶盔,監(jiān)控系統(tǒng)需要能夠有效的支持白盒監(jiān)控和黑盒監(jiān)控。通過(guò)白盒能夠了解其內(nèi)部的實(shí)際運(yùn)行狀態(tài)洞渔,通過(guò)對(duì)監(jiān)控指標(biāo)的觀察能夠預(yù)判可能出現(xiàn)的問(wèn)題,從而對(duì)潛在的不確定因素進(jìn)行優(yōu)化。而黑盒監(jiān)控柏蘑,常見(jiàn)的如HTTP探針,TCP探針等粹庞,可以在系統(tǒng)或者服務(wù)在發(fā)生故障時(shí)能夠快速通知相關(guān)的人員進(jìn)行處理咳焚。通過(guò)建立完善的監(jiān)控體系,從而達(dá)到以下目的:

  • 長(zhǎng)期趨勢(shì)分析:通過(guò)對(duì)監(jiān)控樣本數(shù)據(jù)的持續(xù)收集和統(tǒng)計(jì)庞溜,對(duì)監(jiān)控指標(biāo)進(jìn)行長(zhǎng)期趨勢(shì)分析革半。例如,通過(guò)對(duì)磁盤空間增長(zhǎng)率的判斷流码,我們可以提前預(yù)測(cè)在未來(lái)什么時(shí)間節(jié)點(diǎn)上需要對(duì)資源進(jìn)行擴(kuò)容又官。
  • 對(duì)照分析:兩個(gè)版本的系統(tǒng)運(yùn)行資源使用情況的差異如何?在不同容量情況下系統(tǒng)的并發(fā)和負(fù)載變化如何漫试?通過(guò)監(jiān)控能夠方便的對(duì)系統(tǒng)進(jìn)行跟蹤和比較赏胚。
  • 告警:當(dāng)系統(tǒng)出現(xiàn)或者即將出現(xiàn)故障時(shí),監(jiān)控系統(tǒng)需要迅速反應(yīng)并通知管理員商虐,從而能夠?qū)?wèn)題進(jìn)行快速的處理或者提前預(yù)防問(wèn)題的發(fā)生觉阅,避免出現(xiàn)對(duì)業(yè)務(wù)的影響。
  • 故障分析與定位:當(dāng)問(wèn)題發(fā)生后秘车,需要對(duì)問(wèn)題進(jìn)行調(diào)查和處理典勇。通過(guò)對(duì)不同監(jiān)控監(jiān)控以及歷史數(shù)據(jù)的分析,能夠找到并解決根源問(wèn)題叮趴。
  • 數(shù)據(jù)可視化:通過(guò)可視化儀表盤能夠直接獲取系統(tǒng)的運(yùn)行狀態(tài)割笙、資源使用情況、以及服務(wù)運(yùn)行狀態(tài)等直觀的信息。

與常見(jiàn)監(jiān)控系統(tǒng)比較

對(duì)于常用的監(jiān)控系統(tǒng)伤溉,如Nagios般码、Zabbix的用戶而言,往往并不能很好的解決上述問(wèn)題乱顾。這里以Nagios為例板祝,如下圖所示是Nagios監(jiān)控系統(tǒng)的基本架構(gòu):


assets_-LBdoxo9EmQ0bJP2BuUi_-LVM6abLYacMuIwyN9mE_-LPMFo9aJ6b5g11oQVhO_nagios-platform.png

Nagios的主要功能是監(jiān)控服務(wù)和主機(jī)。Nagios軟件需要安裝在一臺(tái)獨(dú)立的服務(wù)器上運(yùn)行走净,該服務(wù)器稱為監(jiān)控中心券时。每一臺(tái)被監(jiān)控的硬件主機(jī)或者服務(wù)都需要運(yùn)行一個(gè)與監(jiān)控中心服務(wù)器進(jìn)行通信的Nagios軟件后臺(tái)程序,可以理解為Agent或者插件伏伯。
首先對(duì)于Nagios而言橘洞,大部分的監(jiān)控能力都是圍繞系統(tǒng)的一些邊緣性的問(wèn)題,主要針對(duì)系統(tǒng)服務(wù)和資源的狀態(tài)以及應(yīng)用程序的可用性说搅。 例如:Nagios通過(guò)check_disk插件可以用于檢查磁盤空間炸枣,check_load用于檢查CPU負(fù)載等。這些插件會(huì)返回4種Nagios可識(shí)別的狀態(tài)弄唧,0(OK)表示正常抛虏,1(WARNING)表示警告,2(CRITTCAL)表示錯(cuò)誤套才,3(UNKNOWN)表示未知錯(cuò)誤,并通過(guò)Web UI顯示出來(lái)慕淡。
對(duì)于Nagios這類系統(tǒng)而言背伴,其核心是采用了測(cè)試和告警(check&alert)的監(jiān)控系統(tǒng)模型。 對(duì)于基于這類模型的監(jiān)控系統(tǒng)而言往往存在以下問(wèn)題:

  • 與業(yè)務(wù)脫離的監(jiān)控:監(jiān)控系統(tǒng)獲取到的監(jiān)控指標(biāo)與業(yè)務(wù)本身也是一種分離的關(guān)系峰髓。好比客戶可能關(guān)注的是服務(wù)的可用性傻寂、服務(wù)的SLA等級(jí),而監(jiān)控系統(tǒng)卻只能根據(jù)系統(tǒng)負(fù)載去產(chǎn)生告警携兵;
  • 運(yùn)維管理難度大:Nagios這一類監(jiān)控系統(tǒng)本身運(yùn)維管理難度就比較大疾掰,需要有專業(yè)的人員進(jìn)行安裝,配置和管理徐紧,而且過(guò)程并不簡(jiǎn)單静檬;
  • 可擴(kuò)展性低: 監(jiān)控系統(tǒng)自身難以擴(kuò)展,以適應(yīng)監(jiān)控規(guī)模的變化并级;
  • 問(wèn)題定位難度大:當(dāng)問(wèn)題產(chǎn)生之后(比如主機(jī)負(fù)載異常增加)對(duì)于用戶而言拂檩,他們看到的依然是一個(gè)黑盒,他們無(wú)法了解主機(jī)上服務(wù)真正的運(yùn)行情況嘲碧,因此當(dāng)故障發(fā)生后稻励,這些告警信息并不能有效的支持用戶對(duì)于故障根源問(wèn)題的分析和定位。

Prometheus的優(yōu)勢(shì)

Prometheus是一個(gè)開(kāi)源的完整監(jiān)控解決方案愈涩,其對(duì)傳統(tǒng)監(jiān)控系統(tǒng)的測(cè)試和告警模型進(jìn)行了徹底的顛覆望抽,形成了基于中央化的規(guī)則計(jì)算加矛、統(tǒng)一分析和告警的新模型。 相比于傳統(tǒng)監(jiān)控系統(tǒng)Prometheus具有以下優(yōu)點(diǎn):

易于管理

Prometheus核心部分只有一個(gè)單獨(dú)的二進(jìn)制文件煤篙,不存在任何的第三方依賴(數(shù)據(jù)庫(kù)斟览,緩存等等)。唯一需要的就是本地磁盤舰蟆,因此不會(huì)有潛在級(jí)聯(lián)故障的風(fēng)險(xiǎn)趣惠。
Prometheus基于Pull模型的架構(gòu)方式,可以在任何地方(本地電腦身害,開(kāi)發(fā)環(huán)境味悄,測(cè)試環(huán)境)搭建我們的監(jiān)控系統(tǒng)。對(duì)于一些復(fù)雜的情況塌鸯,還可以使用Prometheus服務(wù)發(fā)現(xiàn)(Service Discovery)的能力動(dòng)態(tài)管理監(jiān)控目標(biāo)侍瑟。

監(jiān)控服務(wù)的內(nèi)部運(yùn)行狀態(tài)

Pometheus鼓勵(lì)用戶監(jiān)控服務(wù)的內(nèi)部狀態(tài),基于Prometheus豐富的Client庫(kù)丙猬,用戶可以輕松的在應(yīng)用程序中添加對(duì)Prometheus的支持涨颜,從而讓用戶可以獲取服務(wù)和應(yīng)用內(nèi)部真正的運(yùn)行狀態(tài)。

強(qiáng)大的數(shù)據(jù)模型

所有采集的監(jiān)控?cái)?shù)據(jù)均以指標(biāo)(metric)的形式保存在內(nèi)置的時(shí)間序列數(shù)據(jù)庫(kù)當(dāng)中(TSDB)茧球。所有的樣本除了基本的指標(biāo)名稱以外庭瑰,還包含一組用于描述該樣本特征的標(biāo)簽。
如下所示:

http_request_status{code='200',content_path='/api/path', environment='produment'} => [value1@timestamp1,value2@timestamp2...]

http_request_status{code='200',content_path='/api/path2', environment='produment'} => [value1@timestamp1,value2@timestamp2...]

每一條時(shí)間序列由指標(biāo)名稱(Metrics Name)以及一組標(biāo)簽(Labels)唯一標(biāo)識(shí)抢埋。每條時(shí)間序列按照時(shí)間的先后順序存儲(chǔ)一系列的樣本值弹灭。
表示維度的標(biāo)簽可能來(lái)源于你的監(jiān)控對(duì)象的狀態(tài),比如code=404或者content_path=/api/path揪垄。也可能來(lái)源于的你的環(huán)境定義穷吮,比如environment=produment〖⑴基于這些Labels我們可以方便地對(duì)監(jiān)控?cái)?shù)據(jù)進(jìn)行聚合捡鱼,過(guò)濾,裁剪酷愧。

強(qiáng)大的查詢語(yǔ)言PromQL

Prometheus內(nèi)置了一個(gè)強(qiáng)大的數(shù)據(jù)查詢語(yǔ)言PromQL驾诈。 通過(guò)PromQL可以實(shí)現(xiàn)對(duì)監(jiān)控?cái)?shù)據(jù)的查詢、聚合溶浴。同時(shí)PromQL也被應(yīng)用于數(shù)據(jù)可視化(如Grafana)以及告警當(dāng)中翘鸭。
通過(guò)PromQL可以輕松回答類似于以下問(wèn)題:

  • 在過(guò)去一段時(shí)間中95%應(yīng)用延遲時(shí)間的分布范圍?
  • 預(yù)測(cè)在4小時(shí)后戳葵,磁盤空間占用大致會(huì)是什么情況就乓?
  • CPU占用率前5位的服務(wù)有哪些?(過(guò)濾)

高效

對(duì)于監(jiān)控系統(tǒng)而言,大量的監(jiān)控任務(wù)必然導(dǎo)致有大量的數(shù)據(jù)產(chǎn)生生蚁。而Prometheus可以高效地處理這些數(shù)據(jù)噩翠,對(duì)于單一Prometheus Server實(shí)例而言它可以處理:

  • 數(shù)以百萬(wàn)的監(jiān)控指標(biāo)

  • 每秒處理數(shù)十萬(wàn)的數(shù)據(jù)點(diǎn)。

可擴(kuò)展

Prometheus是如此簡(jiǎn)單邦投,因此你可以在每個(gè)數(shù)據(jù)中心伤锚、每個(gè)團(tuán)隊(duì)運(yùn)行獨(dú)立的Prometheus Sevrer。Prometheus對(duì)于聯(lián)邦集群的支持志衣,可以讓多個(gè)Prometheus實(shí)例產(chǎn)生一個(gè)邏輯集群屯援,當(dāng)單實(shí)例Prometheus Server處理的任務(wù)量過(guò)大時(shí),通過(guò)使用功能分區(qū)(sharding)+聯(lián)邦集群(federation)可以對(duì)其進(jìn)行擴(kuò)展念脯。

易于集成

使用Prometheus可以快速搭建監(jiān)控服務(wù)狞洋,并且可以非常方便地在應(yīng)用程序中進(jìn)行集成。目前支持: Java绿店, JMX吉懊, Python, Go假勿,Ruby借嗽, .Net, Node.js等等語(yǔ)言的客戶端SDK转培,基于這些SDK可以快速讓應(yīng)用程序納入到Prometheus的監(jiān)控當(dāng)中恶导,或者開(kāi)發(fā)自己的監(jiān)控?cái)?shù)據(jù)收集程序。同時(shí)這些客戶端收集的監(jiān)控?cái)?shù)據(jù)浸须,不僅僅支持Prometheus惨寿,還能支持Graphite這些其他的監(jiān)控工具。

同時(shí)Prometheus還支持與其他的監(jiān)控系統(tǒng)進(jìn)行集成:Graphite羽戒, Statsd, Collected虎韵, Scollector易稠, muini, Nagios等包蓝。

Prometheus社區(qū)還提供了大量第三方實(shí)現(xiàn)的監(jiān)控?cái)?shù)據(jù)采集支持:JMX驶社, CloudWatch, EC2测萎, MySQL亡电, PostgresSQL, Haskell硅瞧, Bash份乒, SNMP, Consul, Haproxy或辖, Mesos瘾英, Bind, CouchDB颂暇, Django缺谴, Memcached, RabbitMQ耳鸯, Redis湿蛔, RethinkDB, Rsyslog等等县爬。

可視化

Prometheus Server中自帶了一個(gè)Prometheus UI阳啥,通過(guò)這個(gè)UI可以方便地直接對(duì)數(shù)據(jù)進(jìn)行查詢,并且支持直接以圖形化的形式展示數(shù)據(jù)捌省。同時(shí)Prometheus還提供了一個(gè)獨(dú)立的基于Ruby On Rails的Dashboard解決方案Promdash苫纤。最新的Grafana可視化工具也已經(jīng)提供了完整的Prometheus支持,基于Grafana可以創(chuàng)建更加精美的監(jiān)控圖標(biāo)纲缓【砭校基于Prometheus提供的API還可以實(shí)現(xiàn)自己的監(jiān)控可視化UI。

開(kāi)放性

通常來(lái)說(shuō)當(dāng)我們需要監(jiān)控一個(gè)應(yīng)用程序時(shí)祝高,一般需要該應(yīng)用程序提供對(duì)相應(yīng)監(jiān)控系統(tǒng)協(xié)議的支持栗弟。因此應(yīng)用程序會(huì)與所選擇的監(jiān)控系統(tǒng)進(jìn)行綁定。為了減少這種綁定所帶來(lái)的限制工闺。對(duì)于決策者而言要么你就直接在應(yīng)用中集成該監(jiān)控系統(tǒng)的支持乍赫,要么就在外部創(chuàng)建單獨(dú)的服務(wù)來(lái)適配不同的監(jiān)控系統(tǒng)。

而對(duì)于Prometheus來(lái)說(shuō)陆蟆,使用Prometheus的client library的輸出格式不止支持Prometheus的格式化數(shù)據(jù)雷厂,也可以輸出支持其它監(jiān)控系統(tǒng)的格式化數(shù)據(jù),比如Graphite叠殷。

因此你甚至可以在不使用Prometheus的情況下改鲫,采用Prometheus的client library來(lái)讓你的應(yīng)用程序支持監(jiān)控?cái)?shù)據(jù)采集。


安裝Prometheus Server

Prometheus基于Golang編寫林束,編譯后的軟件包像棘,不依賴于任何的第三方依賴。用戶只需要下載對(duì)應(yīng)平臺(tái)的二進(jìn)制包壶冒,解壓并且添加基本的配置即可正常啟動(dòng)Prometheus Server缕题。

從二進(jìn)制包安裝

對(duì)于非Docker用戶,可以從https://prometheus.io/download/找到最新版本的Prometheus Sevrer軟件包:

export VERSION=2.4.3
curl -LO  https://github.com/prometheus/prometheus/releases/download/v$VERSION/prometheus-$VERSION.darwin-amd64.tar.gz

解壓胖腾,并將Prometheus相關(guān)的命令烟零,添加到系統(tǒng)環(huán)境變量路徑即可:

tar -xzf prometheus-${VERSION}.darwin-amd64.tar.gz
cd prometheus-${VERSION}.darwin-amd64

解壓后當(dāng)前目錄會(huì)包含默認(rèn)的Prometheus配置文件promethes.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: ['localhost:9090']

Promtheus作為一個(gè)時(shí)間序列數(shù)據(jù)庫(kù)瘪松,其采集的數(shù)據(jù)會(huì)以文件的形似存儲(chǔ)在本地中,默認(rèn)的存儲(chǔ)路徑為data/瓶摆,因此我們需要先手動(dòng)創(chuàng)建該目錄凉逛。
用戶也可以通過(guò)參數(shù)--storage.tsdb.path="data/"修改本地?cái)?shù)據(jù)存儲(chǔ)的路徑。
啟動(dòng)prometheus服務(wù)群井,其會(huì)默認(rèn)加載當(dāng)前路徑下的prometheus.yaml文件:

./prometheus

正常的情況下状飞,你可以看到以下輸出內(nèi)容:

level=info ts=2018-10-23T14:55:14.499484Z caller=main.go:554 msg="Starting TSDB ..."
level=info ts=2018-10-23T14:55:14.499531Z caller=web.go:397 component=web msg="Start listening for connections" address=0.0.0.0:9090
level=info ts=2018-10-23T14:55:14.507999Z caller=main.go:564 msg="TSDB started"
level=info ts=2018-10-23T14:55:14.508068Z caller=main.go:624 msg="Loading configuration file" filename=prometheus.yml
level=info ts=2018-10-23T14:55:14.509509Z caller=main.go:650 msg="Completed loading of configuration file" filename=prometheus.yml
level=info ts=2018-10-23T14:55:14.509537Z caller=main.go:523 msg="Server is ready to receive web requests."

使用容器安裝

對(duì)于Docker用戶,直接使用Prometheus的鏡像即可啟動(dòng)Prometheus Server:

docker run -p 9090:9090 -v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

啟動(dòng)完成后书斜,可以通過(guò)http://localhost:9090訪問(wèn)Prometheus的UI界面诬辈。


使用Node Exporter采集主機(jī)數(shù)據(jù)

安裝Node Exporter

在Prometheus的架構(gòu)設(shè)計(jì)中,Prometheus Server并不直接服務(wù)監(jiān)控特定的目標(biāo)荐吉,其主要任務(wù)負(fù)責(zé)數(shù)據(jù)的收集焙糟,存儲(chǔ)并且對(duì)外提供數(shù)據(jù)查詢支持襟雷。因此為了能夠能夠監(jiān)控到某些東西析显,如主機(jī)的CPU使用率,我們需要使用到Exporter惦辛。Prometheus周期性的從Exporter暴露的HTTP服務(wù)地址(通常是/metrics)拉取監(jiān)控樣本數(shù)據(jù)痪欲。

從上面的描述中可以看出Exporter可以是一個(gè)相對(duì)開(kāi)放的概念悦穿,其可以是一個(gè)獨(dú)立運(yùn)行的程序獨(dú)立于監(jiān)控目標(biāo)以外,也可以是直接內(nèi)置在監(jiān)控目標(biāo)中业踢。只要能夠向Prometheus提供標(biāo)準(zhǔn)格式的監(jiān)控樣本數(shù)據(jù)即可栗柒。

這里為了能夠采集到主機(jī)的運(yùn)行指標(biāo)如CPU, 內(nèi)存,磁盤等信息知举。我們可以使用Node Exporter瞬沦。

Node Exporter同樣采用Golang編寫,并且不存在任何的第三方依賴雇锡,只需要下載逛钻,解壓即可運(yùn)行∶烫幔可以從https://prometheus.io/download/獲取最新的node exporter版本的二進(jìn)制包曙痘。

curl -OL https://github.com/prometheus/node_exporter/releases/download/v0.15.2/node_exporter-0.15.2.darwin-amd64.tar.gz
tar -xzf node_exporter-0.15.2.darwin-amd64.tar.gz

運(yùn)行node exporter:

cd node_exporter-0.15.2.darwin-amd64
cp node_exporter-0.15.2.darwin-amd64/node_exporter /usr/local/bin/
node_exporter

啟動(dòng)成功后,可以看到以下輸出:

INFO[0000] Listening on :9100                            source="node_exporter.go:76"

訪問(wèn)http://localhost:9100/可以看到頁(yè)面

初始Node Exporter監(jiān)控指標(biāo)

訪問(wèn)http://localhost:9100/metrics欲账,可以看到當(dāng)前node exporter獲取到的當(dāng)前主機(jī)的所有監(jiān)控?cái)?shù)據(jù)屡江,如下所示:

assets_-LBdoxo9EmQ0bJP2BuUi_-LPMFlGDFIX7wuLhSHx9_-LPMFp6q8o3vUrTJOaFo_node_exporter_metrics_page.png

每一個(gè)監(jiān)控指標(biāo)之前都會(huì)有一段類似于如下形式的信息:

# HELP node_cpu Seconds the cpus spent in each mode.
# TYPE node_cpu counter
node_cpu{cpu="cpu0",mode="idle"} 362812.7890625
# HELP node_load1 1m load average.
# TYPE node_load1 gauge
node_load1 3.0703125

其中HELP用于解釋當(dāng)前指標(biāo)的含義芭概,TYPE則說(shuō)明當(dāng)前指標(biāo)的數(shù)據(jù)類型赛不。在上面的例子中node_cpu的注釋表明當(dāng)前指標(biāo)是cpu0上idle進(jìn)程占用CPU的總時(shí)間,CPU占用時(shí)間是一個(gè)只增不減的度量指標(biāo)罢洲,從類型中也可以看出node_cpu的數(shù)據(jù)類型是計(jì)數(shù)器(counter)踢故,與該指標(biāo)的實(shí)際含義一致文黎。又例如node_load1該指標(biāo)反映了當(dāng)前主機(jī)在最近一分鐘以內(nèi)的負(fù)載情況,系統(tǒng)的負(fù)載情況會(huì)隨系統(tǒng)資源的使用而變化殿较,因此node_load1反映的是當(dāng)前狀態(tài)耸峭,數(shù)據(jù)可能增加也可能減少,從注釋中可以看出當(dāng)前指標(biāo)類型為儀表盤(gauge)淋纲,與指標(biāo)反映的實(shí)際含義一致劳闹。

除了這些以外,在當(dāng)前頁(yè)面中根據(jù)物理主機(jī)系統(tǒng)的不同洽瞬,你還可能看到如下監(jiān)控指標(biāo):

  • node_boot_time:系統(tǒng)啟動(dòng)時(shí)間
  • node_cpu:系統(tǒng)CPU使用量
  • nodedisk*:磁盤IO
  • nodefilesystem*:文件系統(tǒng)用量
  • node_load1:系統(tǒng)負(fù)載
  • nodememeory*:內(nèi)存使用量
  • nodenetwork*:網(wǎng)絡(luò)帶寬
  • node_time:當(dāng)前系統(tǒng)時(shí)間
  • go_*:node exporter中g(shù)o相關(guān)指標(biāo)
  • process_*:node exporter自身進(jìn)程相關(guān)運(yùn)行指標(biāo)

從Node Exporter收集監(jiān)控?cái)?shù)據(jù)

為了能夠讓Prometheus Server能夠從當(dāng)前node exporter獲取到監(jiān)控?cái)?shù)據(jù)本涕,這里需要修改Prometheus配置文件。編輯prometheus.yml并在scrape_configs節(jié)點(diǎn)下添加以下內(nèi)容:

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
  # 采集node exporter監(jiān)控?cái)?shù)據(jù)
  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100']

重新啟動(dòng)Prometheus Server
訪問(wèn)http://localhost:9090伙窃,進(jìn)入到Prometheus Server菩颖。如果輸入“up”并且點(diǎn)擊執(zhí)行按鈕以后,可以看到如下結(jié)果:

assets_-LBdoxo9EmQ0bJP2BuUi_-LPMFlGDFIX7wuLhSHx9_-LPMFp6sd1HomUq2AhEt_prometheus_ui_up_query.png

如果Prometheus能夠正常從node exporter獲取數(shù)據(jù)为障,則會(huì)看到以下結(jié)果:

up{instance="localhost:9090",job="prometheus"}    1
up{instance="localhost:9100",job="node"}    1

其中“1”表示正常晦闰,反之“0”則為異常。


使用PromQL查詢監(jiān)控?cái)?shù)據(jù)

Prometheus UI是Prometheus內(nèi)置的一個(gè)可視化管理界面鳍怨,通過(guò)Prometheus UI用戶能夠輕松的了解Prometheus當(dāng)前的配置呻右,監(jiān)控任務(wù)運(yùn)行狀態(tài)等。 通過(guò)Graph面板京景,用戶還能直接使用PromQL實(shí)時(shí)查詢監(jiān)控?cái)?shù)據(jù)窿冯。

切換到Graph面板,用戶可以使用PromQL表達(dá)式查詢特定監(jiān)控指標(biāo)的監(jiān)控?cái)?shù)據(jù)确徙。如下所示醒串,查詢主機(jī)負(fù)載變化情況,可以使用關(guān)鍵字node_load1可以查詢出Prometheus采集到的主機(jī)負(fù)載的樣本數(shù)據(jù)鄙皇,這些樣本數(shù)據(jù)按照時(shí)間先后順序展示芜赌,形成了主機(jī)負(fù)載隨時(shí)間變化的趨勢(shì)圖表:

assets_-LBdoxo9EmQ0bJP2BuUi_-LPMFlGDFIX7wuLhSHx9_-LPMFp6w2a-tNlAZqMYf_node_node1_graph.png

PromQL是Prometheus自定義的一套強(qiáng)大的數(shù)據(jù)查詢語(yǔ)言,除了使用監(jiān)控指標(biāo)作為查詢關(guān)鍵字以為伴逸,還內(nèi)置了大量的函數(shù)缠沈,幫助用戶進(jìn)一步對(duì)時(shí)序數(shù)據(jù)進(jìn)行處理。例如使用rate()函數(shù)错蝴,可以計(jì)算在單位時(shí)間內(nèi)樣本數(shù)據(jù)的變化情況即增長(zhǎng)率洲愤,因此通過(guò)該函數(shù)我們可以近似的通過(guò)CPU使用時(shí)間計(jì)算CPU的利用率:

rate(node_cpu[2m])
assets_-LBdoxo9EmQ0bJP2BuUi_-LPMFlGDFIX7wuLhSHx9_-LPMFp6ykiXFktbE7AoS_node_cpu_usage_by_cpu_and_mode.png

這時(shí)如果要忽略是哪一個(gè)CPU的,只需要使用without表達(dá)式顷锰,將標(biāo)簽CPU去除后聚合數(shù)據(jù)即可:

avg without(cpu) (rate(node_cpu[2m]))
assets_-LBdoxo9EmQ0bJP2BuUi_-LPMFlGDFIX7wuLhSHx9_-LPMFp7-zSOBoQPoKmGt_node_cpu_usage_by_mode.png

那如果需要計(jì)算系統(tǒng)CPU的總體使用率柬赐,通過(guò)排除系統(tǒng)閑置的CPU使用率即可獲得:

1 - avg without(cpu) (rate(node_cpu{mode="idle"}[2m]))
assets_-LBdoxo9EmQ0bJP2BuUi_-LPMFlGDFIX7wuLhSHx9_-LPMFp71s5xiaeewHj_D_node_cpu_usage_total.png

通過(guò)PromQL我們可以非常方便的對(duì)數(shù)據(jù)進(jìn)行查詢,過(guò)濾官紫,以及聚合肛宋,計(jì)算等操作州藕。通過(guò)這些豐富的表達(dá)書語(yǔ)句,監(jiān)控指標(biāo)不再是一個(gè)單獨(dú)存在的個(gè)體酝陈,而是一個(gè)個(gè)能夠表達(dá)出正式業(yè)務(wù)含義的語(yǔ)言床玻。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市沉帮,隨后出現(xiàn)的幾起案子锈死,更是在濱河造成了極大的恐慌,老刑警劉巖穆壕,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件馅精,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡粱檀,警方通過(guò)查閱死者的電腦和手機(jī)洲敢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)茄蚯,“玉大人压彭,你說(shuō)我怎么就攤上這事∩#” “怎么了壮不?”我有些...
    開(kāi)封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)皱碘。 經(jīng)常有香客問(wèn)我询一,道長(zhǎng),這世上最難降的妖魔是什么癌椿? 我笑而不...
    開(kāi)封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任健蕊,我火速辦了婚禮,結(jié)果婚禮上踢俄,老公的妹妹穿的比我還像新娘缩功。我一直安慰自己,他們只是感情好都办,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布嫡锌。 她就那樣靜靜地躺著,像睡著了一般琳钉。 火紅的嫁衣襯著肌膚如雪势木。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天歌懒,我揣著相機(jī)與錄音啦桌,去河邊找鬼。 笑死歼培,一個(gè)胖子當(dāng)著我的面吹牛震蒋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播躲庄,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼查剖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了噪窘?” 一聲冷哼從身側(cè)響起笋庄,我...
    開(kāi)封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎倔监,沒(méi)想到半個(gè)月后直砂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浩习,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年静暂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谱秽。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡洽蛀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出疟赊,到底是詐尸還是另有隱情郊供,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布近哟,位于F島的核電站驮审,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏吉执。R本人自食惡果不足惜疯淫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望戳玫。 院中可真熱鬧峡竣,春花似錦、人聲如沸量九。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)荠列。三九已至类浪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間肌似,已是汗流浹背费就。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留川队,地道東北人力细。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓睬澡,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親眠蚂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子煞聪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 近年來(lái),以docker 為首的容器技術(shù)在IT領(lǐng)域尤其是在云計(jì)算和微服務(wù)應(yīng)用領(lǐng)域掀起了一股狂潮逝慧,成為當(dāng)下特別流行的一...
    Shaman閱讀 3,401評(píng)論 0 2
  • 文章目的: 1昔脯、向沒(méi)聽(tīng)過(guò)或者剛聽(tīng)過(guò)但是還對(duì)這個(gè)監(jiān)控系統(tǒng)沒(méi)有任何概念的開(kāi)發(fā)者介紹Prometheus的應(yīng)用場(chǎng)景。2笛臣、...
    whaike閱讀 39,598評(píng)論 15 59
  • 對(duì)于集群的監(jiān)控一般需要考慮以下幾個(gè)方面: Kubernetes 節(jié)點(diǎn)的監(jiān)控:比如節(jié)點(diǎn)的 cpu云稚、load、disk...
    祁恩達(dá)閱讀 3,377評(píng)論 0 1
  • 1. 學(xué)著自己做飯 2.至少讀完一本教育類書籍沈堡;其他類別至少一本静陈。 3. 沒(méi)什么大事兒,堅(jiān)持每天去瑜伽館 4. 認(rèn)...
    夭夭穩(wěn)媽閱讀 387評(píng)論 0 0
  • 據(jù)說(shuō)康熙九年(1670)建成诞丽,有三百多年的歷史窿给。頭一次見(jiàn)古村落外圍墻這么高,密實(shí)地包圍著古寨率拒。 獨(dú)特的外圓內(nèi)方構(gòu)造...
    惠卿閱讀 949評(píng)論 1 1