- 了解對你的應(yīng)用程序代碼進(jìn)行測控的位置以及對應(yīng)的測控量級。
- 使用標(biāo)簽來區(qū)分指標(biāo):唯W一的鍵值對。
- 對Grafana這個流行的儀表盤工具進(jìn)行介紹。
- 學(xué)習(xí)如何使用節(jié)點(diǎn)導(dǎo)出器對你的基礎(chǔ)設(shè)施進(jìn)行監(jiān)控。
- 使用服務(wù)發(fā)現(xiàn)為你的機(jī)器和服務(wù)提供不同的監(jiān)控視角。
- 在Kubernetes中使用Prometheus,并測試你可以在容器中使用的導(dǎo)出器。
- 將其他監(jiān)控系統(tǒng)的數(shù)據(jù)轉(zhuǎn)換為Prometheus能夠識別的格式。
前言
本書詳細(xì)介紹了如何通過Prometheus 監(jiān)控系統(tǒng)來監(jiān)控、繪圖,以及配置針對應(yīng)用程序和基礎(chǔ)架構(gòu)性能的告警服務(wù)。本書面向應(yīng)用程序開發(fā)人員、系統(tǒng)管理員,以及介于兩者之間的用戶。
知識擴(kuò)展
當(dāng)涉及監(jiān)控時,知道你所關(guān)心的系統(tǒng)是否處于運(yùn)行狀態(tài)是很重要的,但這并不是真正的價值所在。監(jiān)控最大的優(yōu)勢在于了解系統(tǒng)的性能。
處理每個客戶訂單需要多少次數(shù)據(jù)庫請求?是時候購買更高吞吐量的網(wǎng)絡(luò)設(shè)備了嗎?緩存未命中的機(jī)器數(shù)量是多少?是否有足夠的用戶與復(fù)雜功能進(jìn)行交互以證明其持續(xù)存在的合理性?
這些是基于指標(biāo)的監(jiān)控系統(tǒng)可以幫助你回答的問題,除此之外,你還可以深入了解為什么答案就是這樣。我認(rèn)為通過監(jiān)控可以從整個系統(tǒng)中獲取洞察力,從上層概覽到對調(diào)試有用的細(xì)節(jié)等。用于調(diào)試和分析的全套監(jiān)控工具不僅包括指標(biāo),還包括日志、跟蹤和剖析。但是,當(dāng)你想要回答系統(tǒng)級問題時,指標(biāo)應(yīng)該是首選項。
Prometheus 鼓勵你將測控擴(kuò)展到系統(tǒng)中,從應(yīng)用程序一直到裸機(jī)。通過測控,你可以觀察所有子系統(tǒng)和組件之間的交互方式,并將未知數(shù)轉(zhuǎn)換為已知信息。
本書約定
本書使用以下排版約定:
斜體(Italic)
表示新術(shù)語、URL、電子郵件地址、文件名、擴(kuò)展名。
等寬字體(Constant Width)
用于程序列表以及段落中引用程序元素,如變量、函數(shù)名稱、數(shù)據(jù)庫、數(shù)據(jù)類型、環(huán)境變量、語句和關(guān)鍵字。
加粗等寬字體(Constant Width bold)
表示應(yīng)由用戶按字面輸入的命令或其他文本。
斜體等寬字體(Constant Width Italic)
表示應(yīng)該使用用戶提供的值替換的文本或由上下文確定的值。
使用代碼示例
補(bǔ)充材料(代碼示例,配置文件等)可從https://github.com/prometheus-upand-running/examples 下載。
這本書是為了幫助你完成工作。通常,如果本書提供了示例代碼,你可以在程序和文檔中使用它。除非你復(fù)制了大部分代碼,否則你無需與我們聯(lián)系以獲得許可。例如,編寫使用本書中幾個代碼塊的程序不需要許可。出售或分發(fā)O’Reilly 書籍中的示例CD-ROM 需要獲得許可。通過引用本書并引用示例代碼來回答問題不需要許可。將本書中的大量示例代碼合并到產(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)為對代碼示例的使用超出了合理使用范圍或上述許可范圍,請隨時通過permissions@oreilly.com 與我們聯(lián)系。
O’Reilly 在線學(xué)習(xí)平臺(O’Reilly Online Learning)
近40 年來,O’Reilly Media 致力于提供技術(shù)和商業(yè)培訓(xùn)、知識和卓越見解,來幫助眾多公司取得成功。
我們擁有獨(dú)一無二的專家和革新者組成的龐大網(wǎng)絡(luò),他們通過圖書、文章、會議和我們的在線學(xué)習(xí)平臺分享他們的知識和經(jīng)驗。O’Reilly 的在線學(xué)習(xí)平臺允許你按需訪問現(xiàn)場培訓(xùn)課程、深入的學(xué)習(xí)路徑、交互式編程環(huán)境,以及O’Reilly 和200 多家其他出版商提供的大量文本和視頻資源。有關(guān)的更多信息,請訪問http://oreilly.com。
聯(lián)系方式
請把涉及本書的評論及問題,發(fā)送到O’Reilly 出版社。我們的聯(lián)系方式如下:
美國:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中國:
北京市西城區(qū)西直門南大街2號成銘大廈C座807室(100035)
奧萊利技術(shù)咨詢(北京)有限公司
這本書配有專門的網(wǎng)頁,其中列出了勘誤、范例,以及其他一些信息。這個網(wǎng)頁是:http://bit.ly/prometheus-up-and-running。
如果要發(fā)表評論或詢問技術(shù)問題,請發(fā)郵件給 bookquestions@oreilly.com。
其他書籍、課程、會議及新聞,請訪問網(wǎng)站:http://www.oreilly.com。
我們的 Facebook:http://facebook.com/oreilly。
我們的 Twitter:https://twitter.com/oreillymedia。
我們的 YouTube:http://www.youtube.com/oreillymedia。
致謝
如果沒有Prometheus 團(tuán)隊的所有工作,以及Prometheus 及其生態(tài)系統(tǒng)的數(shù)百名參與者,就不可能寫成本書。特別感謝Julius Volz,Richard Hartmann,Carl Bergquist,Andrew McMillan 和Greg Stark 提供有關(guān)本書初稿的反饋。
作者介紹
Brian Brazil是Robust Perception創(chuàng)始人,同時也是一名Prometheus開發(fā)人員。他專注于處理監(jiān)控相關(guān)業(yè)務(wù),服務(wù)過的公司從初創(chuàng)企業(yè)到世界五百強(qiáng)不等。他在Prometheus社區(qū)享有盛譽(yù),在各類會議上做了許多演講,在他的博客Robust Perception網(wǎng)站上寫了許多與Prometheus相關(guān)的文章。
譯者介紹
宋佳洋,國內(nèi)Prometheus布道師,多年工作于一線云計算公司,對云計算、分布式、監(jiān)控告警有深入理解。從 2016 年底開始接觸 Prometheus,對其源碼、架構(gòu)有深入研究,有 Prometheus二次開發(fā)經(jīng)驗,先后幫助公司多個業(yè)務(wù)系統(tǒng)接入Prometheus。他在國內(nèi)積極參與Prometheus 的推廣,曾先后舉辦線上線下Prometheus學(xué)習(xí)交流機(jī)會。
薛錦,計算機(jī)系統(tǒng)結(jié)構(gòu)專業(yè)碩士,多年一線云計算公司從業(yè)經(jīng)歷,擁有豐富的Golang 項目實戰(zhàn)經(jīng)驗。2016年開始接觸和使用Prometheus,對Prometheus實現(xiàn)原理、生產(chǎn)實踐有一定心得體會。
目錄
前言 1
第I 部分 概述
第1 章 什么是Prometheus 7
什么是監(jiān)控? 9
監(jiān)控簡史 10
監(jiān)控分類 11
Prometheus 架構(gòu) 16
客戶端庫 16
導(dǎo)出器 18
服務(wù)發(fā)現(xiàn) 18
數(shù)據(jù)抓取 19
存儲 20
儀表盤 20
記錄規(guī)則和告警 21
告警管理 21
數(shù)據(jù)持久化22
Prometheus 不是什么 22
第2 章 開始使用Prometheus 24
運(yùn)行Prometheus 24
使用表達(dá)式瀏覽器 27
運(yùn)行Node Exporter 33
告警 35
第Ⅱ部分 應(yīng)用監(jiān)控
第3 章 測控 47
一個簡單的程序 47
Counter 數(shù)據(jù)類型 49
統(tǒng)計異常 52
統(tǒng)計大小 53
Gauge 數(shù)據(jù)類型 54
使用Gauge 類型 54
回調(diào) 56
summary 數(shù)據(jù)類型 57
histogram 數(shù)據(jù)類型 59
桶 60
測控單元測試 63
使用測控 64
需要測控什么內(nèi)容 64
需要測控多少 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
時間戳 89
檢查指標(biāo) 89
第5 章 標(biāo)簽 91
什么是標(biāo)簽 91
測控和目標(biāo)標(biāo)簽 92
測控 93
指標(biāo) 94
多標(biāo)簽 95
子項 95
聚合 97
標(biāo)簽?zāi)J?99
枚舉 99
信息 101
什么時候使用標(biāo)簽 103
基數(shù) 104
第6 章 Grafana 儀表盤 107
安裝 108
數(shù)據(jù)源 110
儀表盤和面板 110
避免圖形墻 112
圖形面板 113
時間控件 115
單一統(tǒng)計面板 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
時間戳 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 章 常見導(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 遙測 214
自定義收集器 218
標(biāo)簽 222
指南 223
第Ⅵ部分 PromQL
第13 章 PromQL 概述 229
聚合基礎(chǔ)知識 229
Gauge 229
counter 231
summary 232
histogram 234
選擇器 236
匹配器 236
瞬時向量 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
一對一 266
多對一和group_left 269
多對多和邏輯運(yùn)算符 272
運(yùn)算優(yōu)先級 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
時間和日期 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
計數(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
隨時間聚合 299
第17 章 記錄規(guī)則 301
使用記錄規(guī)則 301
何時使用記錄規(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
路由樹 332
接收器 340
抑制 350
Alertmanager Web 界面 351
第Ⅵ部分 部署
第20 章 整合 357
計劃推出 357
Prometheus 規(guī)模增長 358
使用聯(lián)合機(jī)制監(jiān)控全局 360
長期存儲 363
運(yùn)行Prometheus 365
硬件 365
配置管理 367
網(wǎng)絡(luò)和身份驗證 369
為失敗做準(zhǔn)備 370
Alertmanager 集群 373
元監(jiān)控和交叉監(jiān)控 374
管理性能 375
檢測問題 376
尋找昂貴的指標(biāo)和目標(biāo) 376
減少負(fù)載 378
水平分片 379
管理變革 380
獲得幫助 381