- 了解對(duì)你的應(yīng)用程序代碼進(jìn)行測(cè)控的位置以及對(duì)應(yīng)的測(cè)控量級(jí)。
- 使用標(biāo)簽來(lái)區(qū)分指標(biāo):唯W一的鍵值對(duì)。
- 對(duì)Grafana這個(gè)流行的儀表盤工具進(jìn)行介紹。
- 學(xué)習(xí)如何使用節(jié)點(diǎn)導(dǎo)出器對(duì)你的基礎(chǔ)設(shè)施進(jìn)行監(jiān)控。
- 使用服務(wù)發(fā)現(xiàn)為你的機(jī)器和服務(wù)提供不同的監(jiān)控視角。
- 在Kubernetes中使用Prometheus,并測(cè)試你可以在容器中使用的導(dǎo)出器。
- 將其他監(jiān)控系統(tǒng)的數(shù)據(jù)轉(zhuǎn)換為Prometheus能夠識(shí)別的格式。
快來(lái)使用Prometheus,Prometheus是基于指標(biāo)的監(jiān)控系統(tǒng),為成千上萬(wàn)的組織在生產(chǎn)環(huán)境中提供服務(wù)。這本實(shí)用指南為應(yīng)用開(kāi)發(fā)人員、系統(tǒng)管理人員和DevOps人員提供了關(guān)于Prometheus關(guān)鍵部分的相關(guān)介紹,包括基礎(chǔ)設(shè)施和應(yīng)用的監(jiān)控、儀表盤顯示、告警、代碼測(cè)控,以及如何通過(guò)導(dǎo)出器獲取第三方的指標(biāo)。
這個(gè)開(kāi)源系統(tǒng)在過(guò)去幾年中變得流行是有原因的;谒(jiǎn)單而強(qiáng)大的的數(shù)據(jù)模型和查詢語(yǔ)句,Prometheus專注于監(jiān)控這一件事情并將其做到了極致。本書的作者同時(shí)也是Prometheus的開(kāi)發(fā)人員Brian Brazil將會(huì)帶著你學(xué)習(xí)Prometheus配置、節(jié)點(diǎn)導(dǎo)出器、Alertmanager,以及如何對(duì)應(yīng)用和基礎(chǔ)設(shè)施進(jìn)行監(jiān)控。
前言
本書詳細(xì)介紹了如何通過(guò)Prometheus 監(jiān)控系統(tǒng)來(lái)監(jiān)控、繪圖,以及配置針對(duì)應(yīng)用程序和基礎(chǔ)架構(gòu)性能的告警服務(wù)。本書面向應(yīng)用程序開(kāi)發(fā)人員、系統(tǒng)管理員,以及介于兩者之間的用戶。
知識(shí)擴(kuò)展
當(dāng)涉及監(jiān)控時(shí),知道你所關(guān)心的系統(tǒng)是否處于運(yùn)行狀態(tài)是很重要的,但這并不是真正的價(jià)值所在。監(jiān)控最大的優(yōu)勢(shì)在于了解系統(tǒng)的性能。
處理每個(gè)客戶訂單需要多少次數(shù)據(jù)庫(kù)請(qǐng)求?是時(shí)候購(gòu)買更高吞吐量的網(wǎng)絡(luò)設(shè)備了嗎?緩存未命中的機(jī)器數(shù)量是多少?是否有足夠的用戶與復(fù)雜功能進(jìn)行交互以證明其持續(xù)存在的合理性?
這些是基于指標(biāo)的監(jiān)控系統(tǒng)可以幫助你回答的問(wèn)題,除此之外,你還可以深入了解為什么答案就是這樣。我認(rèn)為通過(guò)監(jiān)控可以從整個(gè)系統(tǒng)中獲取洞察力,從上層概覽到對(duì)調(diào)試有用的細(xì)節(jié)等。用于調(diào)試和分析的全套監(jiān)控工具不僅包括指標(biāo),還包括日志、跟蹤和剖析。但是,當(dāng)你想要回答系統(tǒng)級(jí)問(wèn)題時(shí),指標(biāo)應(yīng)該是首選項(xiàng)。
Prometheus 鼓勵(lì)你將測(cè)控?cái)U(kuò)展到系統(tǒng)中,從應(yīng)用程序一直到裸機(jī)。通過(guò)測(cè)控,你可以觀察所有子系統(tǒng)和組件之間的交互方式,并將未知數(shù)轉(zhuǎn)換為已知信息。
本書約定
本書使用以下排版約定:
斜體(Italic)
表示新術(shù)語(yǔ)、URL、電子郵件地址、文件名、擴(kuò)展名。
等寬字體(Constant Width)
用于程序列表以及段落中引用程序元素,如變量、函數(shù)名稱、數(shù)據(jù)庫(kù)、數(shù)據(jù)類型、環(huán)境變量、語(yǔ)句和關(guān)鍵字。
加粗等寬字體(Constant Width bold)
表示應(yīng)由用戶按字面輸入的命令或其他文本。
斜體等寬字體(Constant Width Italic)
表示應(yīng)該使用用戶提供的值替換的文本或由上下文確定的值。
使用代碼示例
補(bǔ)充材料(代碼示例,配置文件等)可從https://github.com/prometheus-upand-running/examples 下載。
這本書是為了幫助你完成工作。通常,如果本書提供了示例代碼,你可以在程序和文檔中使用它。除非你復(fù)制了大部分代碼,否則你無(wú)需與我們聯(lián)系以獲得許可。例如,編寫使用本書中幾個(gè)代碼塊的程序不需要許可。出售或分發(fā)O’Reilly 書籍中的示例CD-ROM 需要獲得許可。通過(guò)引用本書并引用示例代碼來(lái)回答問(wèn)題不需要許可。將本書中的大量示例代碼合并到產(chǎn)品文檔中需要獲得許可。
我們感謝,但不要求署名。署名通常包括標(biāo)題、作者、出版社和ISBN。例如:“Prometheus: Up & Running by Brian Brazil (O'Reilly). Copyright 2018 Robust Perception Ltd., 978-1-492-03414-8”。
如果你認(rèn)為對(duì)代碼示例的使用超出了合理使用范圍或上述許可范圍,請(qǐng)隨時(shí)通過(guò)permissions@oreilly.com 與我們聯(lián)系。
O’Reilly 在線學(xué)習(xí)平臺(tái)(O’Reilly Online Learning)
近40 年來(lái),O’Reilly Media 致力于提供技術(shù)和商業(yè)培訓(xùn)、知識(shí)和卓越見(jiàn)解,來(lái)幫助眾多公司取得成功。
我們擁有獨(dú)一無(wú)二的專家和革新者組成的龐大網(wǎng)絡(luò),他們通過(guò)圖書、文章、會(huì)議和我們的在線學(xué)習(xí)平臺(tái)分享他們的知識(shí)和經(jīng)驗(yàn)。O’Reilly 的在線學(xué)習(xí)平臺(tái)允許你按需訪問(wèn)現(xiàn)場(chǎng)培訓(xùn)課程、深入的學(xué)習(xí)路徑、交互式編程環(huán)境,以及O’Reilly 和200 多家其他出版商提供的大量文本和視頻資源。有關(guān)的更多信息,請(qǐng)?jiān)L問(wèn)http://oreilly.com。
聯(lián)系方式
請(qǐng)把涉及本書的評(píng)論及問(wèn)題,發(fā)送到O’Reilly 出版社。我們的聯(lián)系方式如下:
美國(guó):
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中國(guó):
北京市西城區(qū)西直門南大街2號(hào)成銘大廈C座807室(100035)
奧萊利技術(shù)咨詢(北京)有限公司
這本書配有專門的網(wǎng)頁(yè),其中列出了勘誤、范例,以及其他一些信息。這個(gè)網(wǎng)頁(yè)是:http://bit.ly/prometheus-up-and-running。
如果要發(fā)表評(píng)論或詢問(wèn)技術(shù)問(wèn)題,請(qǐng)發(fā)郵件給 bookquestions@oreilly.com。
其他書籍、課程、會(huì)議及新聞,請(qǐng)?jiān)L問(wèn)網(wǎng)站:http://www.oreilly.com。
我們的 Facebook:http://facebook.com/oreilly。
我們的 Twitter:https://twitter.com/oreillymedia。
我們的 YouTube:http://www.youtube.com/oreillymedia。
致謝
如果沒(méi)有Prometheus 團(tuán)隊(duì)的所有工作,以及Prometheus 及其生態(tài)系統(tǒng)的數(shù)百名參與者,就不可能寫成本書。特別感謝Julius Volz,Richard Hartmann,Carl Bergquist,Andrew McMillan 和Greg Stark 提供有關(guān)本書初稿的反饋。
作者介紹
Brian Brazil是Robust Perception創(chuàng)始人,同時(shí)也是一名Prometheus開(kāi)發(fā)人員。他專注于處理監(jiān)控相關(guān)業(yè)務(wù),服務(wù)過(guò)的公司從初創(chuàng)企業(yè)到世界五百?gòu)?qiáng)不等。他在Prometheus社區(qū)享有盛譽(yù),在各類會(huì)議上做了許多演講,在他的博客Robust Perception網(wǎng)站上寫了許多與Prometheus相關(guān)的文章。
譯者介紹
宋佳洋,國(guó)內(nèi)Prometheus布道師,多年工作于一線云計(jì)算公司,對(duì)云計(jì)算、分布式、監(jiān)控告警有深入理解。從 2016 年底開(kāi)始接觸 Prometheus,對(duì)其源碼、架構(gòu)有深入研究,有 Prometheus二次開(kāi)發(fā)經(jīng)驗(yàn),先后幫助公司多個(gè)業(yè)務(wù)系統(tǒng)接入Prometheus。他在國(guó)內(nèi)積極參與Prometheus 的推廣,曾先后舉辦線上線下Prometheus學(xué)習(xí)交流機(jī)會(huì)。
薛錦,計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)專業(yè)碩士,多年一線云計(jì)算公司從業(yè)經(jīng)歷,擁有豐富的Golang 項(xiàng)目實(shí)戰(zhàn)經(jīng)驗(yàn)。2016年開(kāi)始接觸和使用Prometheus,對(duì)Prometheus實(shí)現(xiàn)原理、生產(chǎn)實(shí)踐有一定心得體會(huì)。
目錄
前言 1
第I 部分 概述
第1 章 什么是Prometheus 7
什么是監(jiān)控? 9
監(jiān)控簡(jiǎn)史 10
監(jiān)控分類 11
Prometheus 架構(gòu) 16
客戶端庫(kù) 16
導(dǎo)出器 18
服務(wù)發(fā)現(xiàn) 18
數(shù)據(jù)抓取 19
存儲(chǔ) 20
儀表盤 20
記錄規(guī)則和告警 21
告警管理 21
數(shù)據(jù)持久化22
Prometheus 不是什么 22
第2 章 開(kāi)始使用Prometheus 24
運(yùn)行Prometheus 24
使用表達(dá)式瀏覽器 27
運(yùn)行Node Exporter 33
告警 35
第Ⅱ部分 應(yīng)用監(jiān)控
第3 章 測(cè)控 47
一個(gè)簡(jiǎn)單的程序 47
Counter 數(shù)據(jù)類型 49
統(tǒng)計(jì)異常 52
統(tǒng)計(jì)大小 53
Gauge 數(shù)據(jù)類型 54
使用Gauge 類型 54
回調(diào) 56
summary 數(shù)據(jù)類型 57
histogram 數(shù)據(jù)類型 59
桶 60
測(cè)控單元測(cè)試 63
使用測(cè)控 64
需要測(cè)控什么內(nèi)容 64
需要測(cè)控多少 66
要怎么給指標(biāo)命名 67
第4 章 展示 71
Python 72
WSGI72
Twisted 73
Gunicorn 多進(jìn)程 74
Go 77
Java 78
HTTPServer 78
Servlet 80
Pushgateway 81
橋接 85
解析器 86
展示格式 86
指標(biāo)類型 87
標(biāo)簽 88
Escaping 88
時(shí)間戳 89
檢查指標(biāo) 89
第5 章 標(biāo)簽 91
什么是標(biāo)簽 91
測(cè)控和目標(biāo)標(biāo)簽 92
測(cè)控 93
指標(biāo) 94
多標(biāo)簽 95
子項(xiàng) 95
聚合 97
標(biāo)簽?zāi)J?99
枚舉 99
信息 101
什么時(shí)候使用標(biāo)簽 103
基數(shù) 104
第6 章 Grafana 儀表盤 107
安裝 108
數(shù)據(jù)源 110
儀表盤和面板 110
避免圖形墻 112
圖形面板 113
時(shí)間控件 115
單一統(tǒng)計(jì)面板 116
表格面板 118
模板變量 119
第Ⅲ部分 基礎(chǔ)設(shè)置監(jiān)控
第7 章 Node 導(dǎo)出器 127
CPU 收集器 129
文件系統(tǒng)收集器 129
磁盤狀態(tài)收集器 130
Netdev 收集器 132
Meminfo 收集器 132
hwmom 收集器 133
stat 收集器 134
uname 收集器 134
loadavg 收集器 135
文本文件收集器 135
使用文本文件收集器 136
時(shí)間戳 138
第8 章 服務(wù)發(fā)現(xiàn) 139
服務(wù)發(fā)現(xiàn)機(jī)制 140
靜態(tài)配置 141
文件 142
Consul 145
EC2 146
重置標(biāo)簽 147
選擇要抓取的內(nèi)容 148
目標(biāo)標(biāo)簽 151
如何拉取 159
metric_relabel_configs 161
標(biāo)簽沖突和honor_labels 164
第9 章 容器和Kubernates 166
cAdvisor 166
CPU 168
內(nèi)存 168
標(biāo)簽 169
Kubernetes 170
在 Kubernetes 中運(yùn)行 170
服務(wù)發(fā)現(xiàn) 172
kube-stat-metrics 182
第10 章 常見(jiàn)導(dǎo)出器 183
Cousul 184
HAProxy 185
Grok 導(dǎo)出器 188
黑盒 191
ICMP 193
TCP 196
HTTP 198
DNS 201
Prometheus 配置 203
第11 章 與其他監(jiān)控系統(tǒng)協(xié)同 207
其他監(jiān)控系統(tǒng) 207
InfluxDB 209
StatsD 210
第12 章 編寫導(dǎo)出器 214
Consul 遙測(cè) 214
自定義收集器 218
標(biāo)簽 222
指南 223
第Ⅵ部分 PromQL
第13 章 PromQL 概述 229
聚合基礎(chǔ)知識(shí) 229
Gauge 229
counter 231
summary 232
histogram 234
選擇器 236
匹配器 236
瞬時(shí)向量 238
范圍向量 239
偏移 241
HTTP 接口 242
query 242
query_range 245
第14 章 聚合運(yùn)算符 248
分組 248
without 249
by 250
操作符 252
sum 252
count 253
avg 254
stddev 和stdvar 255
min 和max 256
topk 和bottomk 256
quantile 257
count_values 259
第15 章 二元運(yùn)算符 261
處理標(biāo)量 261
算術(shù)運(yùn)算符262
比較運(yùn)算符263
向量匹配 266
一對(duì)一 266
多對(duì)一和group_left 269
多對(duì)多和邏輯運(yùn)算符 272
運(yùn)算優(yōu)先級(jí) 277
第16 章 函數(shù) 279
改變類型 279
vector280
scalar 280
數(shù)學(xué)函數(shù) 281
abs 282
ln,log2 和log10 282
exp 283
sqrt 283
ceil 和floor 283
round 284
clamp_max 和 clamp_min 284
時(shí)間和日期 285
time 285
minute, hour, day_of_week, day_of_month, days_in_month, month 和year 286
timestamp 287
標(biāo)簽 288
label_replace 288
label_join 289
缺失系列和absent 290
使用sort 和sort_desc 進(jìn)行排序 290
Histogram 類型與histogram_quantile291
計(jì)數(shù)器 292
rate 292
increase294
irate 294
resets 295
改變gauge 值 296
changes 296
deriv 297
predict_linear 297
delta 298
idelta 298
holt_winters 298
隨時(shí)間聚合 299
第17 章 記錄規(guī)則 301
使用記錄規(guī)則 301
何時(shí)使用記錄規(guī)則 304
降低基數(shù)大小 304
編寫范圍向量函數(shù) 306
API 規(guī)則 307
如何不使用規(guī)則 307
記錄規(guī)則的命名 309
第Ⅴ部分 告警
第18 章 告警 315
告警規(guī)則 316
for 318
告警標(biāo)簽 321
注釋和模板323
什么是好的告警? 326
設(shè)置Alertmanager 327
外部標(biāo)簽 328
第19 章 Alertmanager 330
通知管道 330
配置文件 331
路由樹(shù) 332
接收器 340
抑制 350
Alertmanager Web 界面 351
第Ⅵ部分 部署
第20 章 整合 357
計(jì)劃推出 357
Prometheus 規(guī)模增長(zhǎng) 358
使用聯(lián)合機(jī)制監(jiān)控全局 360
長(zhǎng)期存儲(chǔ) 363
運(yùn)行Prometheus 365
硬件 365
配置管理 367
網(wǎng)絡(luò)和身份驗(yàn)證 369
為失敗做準(zhǔn)備 370
Alertmanager 集群 373
元監(jiān)控和交叉監(jiān)控 374
管理性能 375
檢測(cè)問(wèn)題 376
尋找昂貴的指標(biāo)和目標(biāo) 376
減少負(fù)載 378
水平分片 379
管理變革 380
獲得幫助 381