監(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):
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ù)屡江,如下所示:
每一個(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é)果:
如果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ì)圖表:
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])
這時(shí)如果要忽略是哪一個(gè)CPU的,只需要使用without表達(dá)式顷锰,將標(biāo)簽CPU去除后聚合數(shù)據(jù)即可:
avg without(cpu) (rate(node_cpu[2m]))
那如果需要計(jì)算系統(tǒng)CPU的總體使用率柬赐,通過(guò)排除系統(tǒng)閑置的CPU使用率即可獲得:
1 - avg without(cpu) (rate(node_cpu{mode="idle"}[2m]))
通過(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ǔ)言床玻。