
前言
无论是传统数据中心还是云数据中心,无论是物理机、虚拟机还是容器,整个数据中心的建设都绕不开监控这个话题。优秀的监控系统不仅需要兼容各种设备和环境,还需要具备高性能、高可靠及易运维等特性,Prometheus 正是其中之一。伴随着容器相关技术的兴起,Prometheus 正逐步成为容器监控的标准,并且对于传统应用和设备也有很好的兼容性。
Prometheus由 Go 语言编写而成,采用 Pull 方式获取监控信息,并提供了多维度的数据模型和灵活的查询接口。Prometheus不仅可以通过静态文件配置监控对象,还支持自动发现机制,能够通过 Kubernetes、Consul、DNS 等多种方式动态获取监控对象。在数据采集方面,借助 Go语言的高并发特性,单机 Prometheus可以采集数百个节点的监控数据;在数据存储方面,随着本地时序数据库的不断优化,单机Prometheus 每秒可以采集一千万个指标,如果需要存储大量的历史监控数据,则还支持远端存储。
本书共分为4篇12章,分别讲解Prometheus原理、在传统应用监控和Kubernetes监控中的应用,以及源码和拓展,具体内容如下所述。
第1章主要介绍监控系统的概念和架构设计,并剖析监控系统的内部结构,从程序运行的角度讲解基础资源监控、中间件监控、应用程序监控和日志监控,并将多种监控系统的优缺点进行对比,指出Prometheus独特的优势。
第2章首先介绍Prometheus的相关概念,包括数据指标的定义和分类;然后介绍Prometheus的总体架构和工作原理,包括数据采集、数据处理、数据存储、数据查询及告警;最后讲解Prometheus联邦及Thanos的原理。
第3章主要介绍Prometheus数据存储。首先从历史演进、设计理念、实现原理等多个方面详细介绍Prometheus的本地时序数据库(Prometheus TSDB);然后介绍Prometheus远端存储的使用方式和实现原理,并以InfluxDB为例,详解Adapter的工作原理。
第4章主要介绍Prometheus exporter的背景、使用方式和工作原理。首先介绍几个常用的exporter,包括Node exporter、Redis exporter、MySQL server exporter的内部构造;然后从源码角度解析exporter,并编写一个简单的exporter。
第 5 章主要介绍 Kubernetes 集群的常用监控方案,包括 Heapster、kube-state-metrics、metrics-server,并介绍将Prometheus应用于Kubernetes集群的优势。
第6章主要介绍Prometheus在Kubernetes集群中的安装和配置。首先介绍如何用常规的手动方式在Kubernetes集群中安装Prometheus;然后介绍Kubernetes中的另一种更高级的监控方案Prometheus Operator的安装和使用,包括添加自定义监控项、添加自定义告警、自动发现配置、数据持久化配置等。
第7章主要介绍Prometheus监控Kubernetes集群服务的一些配置方法。首先介绍手动的静态配置方法,然后介绍如何使用Prometheus中的服务发现机制来自动发现Kubernetes中的Service。
第8章主要介绍 Prometheus 在 Kubernetes 集群中的一些常用监控对象,包括cAdvisor监控、apiserver监控、Service监控、kube-state-metrics监控,并介绍如何使用node-exporter监控Kubernetes集群中的节点。
第9章主要介绍 Prometheus 监控 Kubernetes 集群的数据展示。首先介绍在Kubernetes 集群中安装 Grafana 的方法;然后介绍如何将 Grafana 配置 Prometheus数据源,以及一些常用的 Dashboard 配置方法;并介绍 Grafana 针对 Kubernetes 集群监控的一个常用插件 grafana-kuberentes-app 的安装和使用;最后介绍如何使用Grafana告警,包括邮件告警、钉钉告警等。
第10章主要介绍 Prometheus监控 Kubernetes集群的告警功能。首先介绍如何在Kubernetes集群中安装Prometheus的告警模块AlertManager;然后介绍如何通过ConfigMap 资源对象配置告警规则;最后编写一个 webhook 接收器来处理AlertManager告警数据。
第11章主要对 Prometheus源码进行分析,涉及Prometheus数据采集、规则管理、通知管理、存储管理和查询引擎方面的内容,并以二次开发实战的方式加深读者对Prometheus程序结构的理解。
第12章主要对 AlertManager 源码进行分析,涉及接收告警、告警调度、告警匹配、告警处理和告警通知方面的内容,并结合配置文件中的配置项,带领读者从源码角度理解告警分组、告警频次控制、告警路由、告警抑制和告警静默功能的实现。
致谢
本书作者分别来自宜信容器云团队(陈晓宇)、“k8s 技术圈”社区(杨川胡)及深信服安全感知团队(陈啸),感谢这些团队及社区对本书作者的支持和鼓励。
感谢张国霞编辑在成书过程中对作者的协助和鞭策。
感谢作者家人对作者的支持和鼓励,来自家人的爱,让我们时刻拥有信心与力量!
本书作者