本教程是類似"hello,world"的教程,展示怎樣在一個(gè)簡(jiǎn)單地例子中安裝另凌、配置和使用Prometheus康吵。你將下載和本地化運(yùn)行Prometheus服務(wù),并寫一個(gè)配置文件橄浓,監(jiān)控Prometheus服務(wù)本身和一個(gè)簡(jiǎn)單的應(yīng)用粒梦,然后配合使用query、rules和graphs展示收集的時(shí)間序列數(shù)據(jù)荸实。
下載和運(yùn)行Prometheus
下載Prometheus最新的發(fā)布版本,然后提取和運(yùn)行它:
tar zxvf prometheus-*.tar.gz
cd prometheus-*
在開始啟動(dòng)Prometheus之前匀们,我們要配置它
配置Prometheus監(jiān)控自身
Prometheus從監(jiān)控的目標(biāo)上通過http方式拉取指標(biāo)數(shù)據(jù),它也可以拉取自身服務(wù)數(shù)據(jù)并監(jiān)控自身的健康狀況。
當(dāng)然Prometheus服務(wù)拉取自身服務(wù)數(shù)據(jù)准给,并沒有多大的用處泄朴,但是它是一個(gè)好的開始例子。保存下面的基本Prometheus配置露氮,并命名為:prometheus.yml
:
global:
scrape_interval: 15s # 默認(rèn)情況下祖灰,每15s拉取一次目標(biāo)采樣點(diǎn)數(shù)據(jù)。
# 我們可以附加一些指定標(biāo)簽到采樣點(diǎn)度量標(biāo)簽列表中, 用于和第三方系統(tǒng)進(jìn)行通信, 包括:federation, remote storage, Alertmanager
external_labels:
monitor: 'codelab-monitor'
# 下面就是拉取自身服務(wù)數(shù)據(jù)配置
scrape_configs:
# job名稱會(huì)增加到拉取到的所有采樣點(diǎn)上畔规,同時(shí)還有一個(gè)instance目標(biāo)服務(wù)的host:port標(biāo)簽也會(huì)增加到采樣點(diǎn)上
- job_name: 'prometheus'
# 覆蓋global的采樣點(diǎn)局扶,拉取時(shí)間間隔5s
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
對(duì)于一個(gè)完整的配置選項(xiàng),請(qǐng)見配置文檔
啟動(dòng)Prometheus
要使用新創(chuàng)建的配置文件啟動(dòng)Prometheus叁扫,請(qǐng)切換到包含Prometheus二進(jìn)制文件的目錄并運(yùn)行:
./prometheus --config.file=prometheus.yml
Prometheus服務(wù)應(yīng)該啟動(dòng)了三妈。你可以在瀏覽器上輸入:http://localhost:9090
, 給它幾秒鐘從自己的HTTP指標(biāo)端點(diǎn)收集有關(guān)自身的數(shù)據(jù)。
您還可以通過導(dǎo)航到其指標(biāo)端點(diǎn)來驗(yàn)證Prometheus是否正在提供有關(guān)自身的指標(biāo):http://localhost:9090/metrics
使用expression browser
讓我們?cè)囍匆幌翽rometheus收集的關(guān)于自己的一些數(shù)據(jù)莫绣。 使用Prometheus的內(nèi)置表達(dá)式瀏覽器畴蒲,導(dǎo)航到http://localhost:9090/graph
,并選擇帶有"Graph"的"Console".
在http://localhost:9090/gmetrics
中收集中对室,有一個(gè)metric叫prometheus_target_interval_length_seconds
(從目標(biāo)收集數(shù)據(jù)的實(shí)際時(shí)間量)饿凛,在表達(dá)式的console中輸入:
prometheus_target_interval_length_seconds
這個(gè)應(yīng)該會(huì)返回很多不同的時(shí)間序列數(shù)據(jù)(以及每個(gè)記錄的最新值),這些度量名稱都是prometheus_target_interval_length_seconds
软驰,但是帶有不同的標(biāo)簽列表值涧窒,這些標(biāo)簽列表值指定了不同的延遲百分比和目標(biāo)組間隔。
如果我們僅僅對(duì)99%的延遲感興趣锭亏,則我們可以使用下面的查詢?nèi)デ逑葱畔ⅲ?/p>
prometheus_target_interval_length_seconds{quantile="0.99"}
為了統(tǒng)計(jì)返回時(shí)間序列數(shù)據(jù)個(gè)數(shù)纠吴,你可以寫:
count(prometheus_target_interval_length_seconds)
有關(guān)更多的表達(dá)式語言,請(qǐng)見表達(dá)式語言文檔
使用graph interface
見圖表表達(dá)式慧瘤,導(dǎo)航到http://localhost:9090/graph
戴已, 然后使用"Graph" tab
例如固该,輸入以下表達(dá)式來繪制在自我抓取的Prometheus中創(chuàng)建的每秒塊速率:
rate(prometheus_tsdb_head_chunks_created_total[1m])
試驗(yàn)graph范圍參數(shù)和其他設(shè)置。
啟動(dòng)其他一些采樣目標(biāo)
讓我們讓這個(gè)更有趣糖儡,并開始一些示例目標(biāo)伐坏,讓Prometheus抓取。
Go客戶端庫包含一個(gè)示例握联,該示例為具有不同延遲分布的三個(gè)服務(wù)導(dǎo)出虛構(gòu)的RPC延遲桦沉。
確保已安裝Go編譯器并設(shè)置了正常工作的Go構(gòu)建環(huán)境(具有正確的GOPATH)。
下載Prometheus的Go客戶端金闽,運(yùn)行三個(gè)服務(wù):
git clone https://github.com/prometheus/client_golang.git
cd client_golang/examples/random
go get -d
go build
## 啟動(dòng)三個(gè)服務(wù)
./random -listen-address=:8080
./random -listen-address=:8081
./random -listen-address=:8082
現(xiàn)在你在瀏覽器輸入:http://localhost:8080/metrics
, http://localhost:8081/metrics
, http://localhost:8082/metrics
, 能看到所有采集到的采樣點(diǎn)數(shù)據(jù)纯露。
配置Prometheus去監(jiān)控這三個(gè)目標(biāo)服務(wù)
現(xiàn)在我們將會(huì)配置Prometheus,拉取三個(gè)目標(biāo)服務(wù)的采樣點(diǎn)代芜。我們把這三個(gè)目標(biāo)服務(wù)組成一個(gè)job, 叫example-radom
埠褪。 然而,想象成挤庇,前兩個(gè)服務(wù)是生產(chǎn)環(huán)境服務(wù)钞速,后者是測(cè)試環(huán)境服務(wù)。我們可以通過group標(biāo)簽分組嫡秕,要在Prometheus中對(duì)此進(jìn)行建模渴语,我們可以將多組端點(diǎn)添加到單個(gè)作業(yè)中,為每組目標(biāo)添加額外的標(biāo)簽淘菩。在此示例中遵班,我們將group ="production"
標(biāo)簽添加到第一組目標(biāo)屠升,同時(shí)將group ="canary"
添加到第二組潮改。
要實(shí)現(xiàn)此目的,請(qǐng)將以下作業(yè)定義添加到prometheus.yml中的scrape_configs部分腹暖,然后重新啟動(dòng)Prometheus實(shí)例:
scrape_configs:
- job_name: 'example-random'
scrape_interval: 5s
static_configs:
- targets: ['localhost:8080', 'localhost:8081']
labels:
group: 'production'
- targets: ['localhost:8082']
labels:
group: 'test'
轉(zhuǎn)到表達(dá)式瀏覽器并驗(yàn)證Prometheus現(xiàn)在是否有關(guān)于這些示例端點(diǎn)公開的時(shí)間序列的信息汇在,例如rpc_durations_seconds
指標(biāo)。
為抓取的數(shù)據(jù)聚合配置規(guī)則
雖然在我們的示例中不是問題脏答,但是在計(jì)算ad-hoc時(shí)糕殉,聚合了數(shù)千個(gè)時(shí)間序列的查詢會(huì)變慢。 為了提高效率殖告,Prometheus允許您通過配置的錄制規(guī)則將表達(dá)式預(yù)先記錄到全新的持久時(shí)間序列中阿蝶。 假設(shè)我們感興趣的是記錄在5分鐘窗口內(nèi)測(cè)量的所有實(shí)例(但保留作業(yè)和服務(wù)維度)的平均示例RPC(rpc_durations_seconds_count
)的每秒速率。 我們可以這樣寫:
avg(rate(rpc_durations_seconds_count[5m])) by (job, service)
要將此表達(dá)式生成的時(shí)間序列記錄到名為job_service:rpc_durations_seconds_count:avg_rate5m
的新度量標(biāo)準(zhǔn)中黄绩,請(qǐng)使用以下記錄規(guī)則創(chuàng)建一個(gè)文件并將其另存為prometheus.rules.yml
:
groups:
- name: example
rules:
- record: job_service:rpc_durations_seconds_count:avg_rate5m
expr: avg(rate(rpc_durations_seconds_count[5m])) by (job, service)
要使Prometheus選擇此新規(guī)則羡洁,請(qǐng)?jiān)?code>prometheus.yml中添加rule_files
語句。 配置現(xiàn)在應(yīng)該如下所示:
global:
scrape_interval: 15s # By default, scrape targets every 15 seconds.
evaluation_interval: 15s # Evaluate rules every 15 seconds.
# Attach these extra labels to all timeseries collected by this Prometheus instance.
external_labels:
monitor: 'codelab-monitor'
rule_files:
- 'prometheus.rules.yml'
scrape_configs:
- job_name: 'prometheus'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
- job_name: 'example-random'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
static_configs:
- targets: ['localhost:8080', 'localhost:8081']
labels:
group: 'production'
- targets: ['localhost:8082']
labels:
group: 'canary'
使用新配置重新啟動(dòng)Prometheus爽丹,并通過表達(dá)式瀏覽器查詢或繪制圖表筑煮,驗(yàn)證帶有度量標(biāo)準(zhǔn)名稱job_service:rpc_durations_seconds_count:avg_rate5m
的新時(shí)間序列現(xiàn)在可用辛蚊。
鏈接
Prometheus官網(wǎng)地址:https://prometheus.io/
我的Github:https://github.com/Alrights/prometheus