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