- 了解对你的应用程序代码进行测控的位置以及对应的测控量级。
- 使用标签来区分指标:唯W一的键值对。
- 对Grafana这个流行的仪表盘工具进行介绍。
- 学习如何使用节点导出器对你的基础设施进行监控。
- 使用服务发现为你的机器和服务提供不同的监控视角。
- 在Kubernetes中使用Prometheus,并测试你可以在容器中使用的导出器。
- 将其他监控系统的数据转换为Prometheus能够识别的格式。
前言
本书详细介绍了如何通过Prometheus 监控系统来监控、绘图,以及配置针对应用程序和基础架构性能的告警服务。本书面向应用程序开发人员、系统管理员,以及介于两者之间的用户。
知识扩展
当涉及监控时,知道你所关心的系统是否处于运行状态是很重要的,但这并不是真正的价值所在。监控最大的优势在于了解系统的性能。
处理每个客户订单需要多少次数据库请求?是时候购买更高吞吐量的网络设备了吗?缓存未命中的机器数量是多少?是否有足够的用户与复杂功能进行交互以证明其持续存在的合理性?
这些是基于指标的监控系统可以帮助你回答的问题,除此之外,你还可以深入了解为什么答案就是这样。我认为通过监控可以从整个系统中获取洞察力,从上层概览到对调试有用的细节等。用于调试和分析的全套监控工具不仅包括指标,还包括日志、跟踪和剖析。但是,当你想要回答系统级问题时,指标应该是首选项。
Prometheus 鼓励你将测控扩展到系统中,从应用程序一直到裸机。通过测控,你可以观察所有子系统和组件之间的交互方式,并将未知数转换为已知信息。
本书约定
本书使用以下排版约定:
斜体(Italic)
表示新术语、URL、电子邮件地址、文件名、扩展名。
等宽字体(Constant Width)
用于程序列表以及段落中引用程序元素,如变量、函数名称、数据库、数据类型、环境变量、语句和关键字。
加粗等宽字体(Constant Width bold)
表示应由用户按字面输入的命令或其他文本。
斜体等宽字体(Constant Width Italic)
表示应该使用用户提供的值替换的文本或由上下文确定的值。
使用代码示例
补充材料(代码示例,配置文件等)可从https://github.com/prometheus-upand-running/examples 下载。
这本书是为了帮助你完成工作。通常,如果本书提供了示例代码,你可以在程序和文档中使用它。除非你复制了大部分代码,否则你无需与我们联系以获得许可。例如,编写使用本书中几个代码块的程序不需要许可。出售或分发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 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。O’Reilly 的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及O’Reilly 和200 多家其他出版商提供的大量文本和视频资源。有关的更多信息,请访问http://oreilly.com。
联系方式
请把涉及本书的评论及问题,发送到O’Reilly 出版社。我们的联系方式如下:
美国:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
这本书配有专门的网页,其中列出了勘误、范例,以及其他一些信息。这个网页是:http://bit.ly/prometheus-up-and-running。
如果要发表评论或询问技术问题,请发邮件给 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 及其生态系统的数百名参与者,就不可能写成本书。特别感谢Julius Volz,Richard Hartmann,Carl Bergquist,Andrew McMillan 和Greg Stark 提供有关本书初稿的反馈。
目录
前言 1
第I 部分 概述
第1 章 什么是Prometheus 7
什么是监控? 9
监控简史 10
监控分类 11
Prometheus 架构 16
客户端库 16
导出器 18
服务发现 18
数据抓取 19
存储 20
仪表盘 20
记录规则和告警 21
告警管理 21
数据持久化22
Prometheus 不是什么 22
第2 章 开始使用Prometheus 24
运行Prometheus 24
使用表达式浏览器 27
运行Node Exporter 33
告警 35
第Ⅱ部分 应用监控
第3 章 测控 47
一个简单的程序 47
Counter 数据类型 49
统计异常 52
统计大小 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
单一统计面板 116
表格面板 118
模板变量 119
第Ⅲ部分 基础设置监控
第7 章 Node 导出器 127
CPU 收集器 129
文件系统收集器 129
磁盘状态收集器 130
Netdev 收集器 132
Meminfo 收集器 132
hwmom 收集器 133
stat 收集器 134
uname 收集器 134
loadavg 收集器 135
文本文件收集器 135
使用文本文件收集器 136
时间戳 138
第8 章 服务发现 139
服务发现机制 140
静态配置 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
服务发现 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 章 与其他监控系统协同 207
其他监控系统 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
运算优先级 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 章 记录规则 301
使用记录规则 301
何时使用记录规则 304
降低基数大小 304
编写范围向量函数 306
API 规则 307
如何不使用规则 307
记录规则的命名 309
第Ⅴ部分 告警
第18 章 告警 315
告警规则 316
for 318
告警标签 321
注释和模板323
什么是好的告警? 326
设置Alertmanager 327
外部标签 328
第19 章 Alertmanager 330
通知管道 330
配置文件 331
路由树 332
接收器 340
抑制 350
Alertmanager Web 界面 351
第Ⅵ部分 部署
第20 章 整合 357
计划推出 357
Prometheus 规模增长 358
使用联合机制监控全局 360
长期存储 363
运行Prometheus 365
硬件 365
配置管理 367
网络和身份验证 369
为失败做准备 370
Alertmanager 集群 373
元监控和交叉监控 374
管理性能 375
检测问题 376
寻找昂贵的指标和目标 376
减少负载 378
水平分片 379
管理变革 380
获得帮助 381