概览系统(=> INTRODUCTION/Overview)
Prometheus(我们用 Prom 简写代指),监控及告警工具,由 SoundCloud 构建,现已开源,并且已经加入 CNCF 组织(紧随 Kubernetes 之后)。
Prom 采集指标,并作为时序数据存储。例如 指标信息、时间戳、被称为标签的键值对 一起存储。
特性特征:
1)多维度的数据模型(由指标名、键值对标识的时序数据)
2)PromQL 灵活的数据查询语句;
3)不依赖分布式存储;单个服务器节点是自治的;
4)HTTP and Pull 来主动抓取指标数据;
5)亦能够通过 Push Gateway 来主动推送数据;
6)通过静态配置或服务发现的方式来主动抓取指标;
7)支持多种图形模式和仪表板;
metrics, Time series
非专业术语,metrics 指数值化的测量。Time series,指随着时间的推移而记录的变化。
通过 Metrics 和 Time Series 能够反映出应用程序的运行情况,让我们找到问题所在。
核心组件
1)Prom Server
2)Client Libraries,用于与应用程序集成;
3)Push Gateway,推送网关,以允许应用主动推送;
4)Exporters,暴露指标;
5)Alertmanger,负责告警;
6)其他周边工具;
多数组件以 Go 编写,所以构建和运行比较容易。
系统架构
根据配置的 Job 来抓取指标(直接抓取或通过 Push-Gateway 来获取);
将指标进行本地存储,并针对指标运行规则(聚合并生成新的指标,或产生告警);
通过 Grafana 来显示指标;
应用场景
适用场景:
1)记录纯数字性质的指标;
2)它既适合以机器为中心的监控,也适合监控高度动态的面向服务的架构;
3)在微服务中,它对多维数据收集和查询的支持是一个特殊的优势。
潜在问题(或不适用的场景)
1)Prometheus 重视可靠性,而非精准性,所以如果需要较高精准度,则无法依赖于 Prometheus 来实现;
监控对比(=>INTRODUCTION/Comparison to alternatives)
Comparison to alternatives | Prometheus
官方 Comparison to alternatives 文档,提供 Prom 与其他监控产品的对比。
我们相信市场及多数人的选择,所以我们未曾详细阅读该文档。
常见问题(=> INTRODUCTION/FAQ)
官方 FAQ 文档,是 Prom 出现的常见问题,以及官方的解答内容,这里不再赘述;
发展路线(=> INTRODUCTION/Roadmap)
官方 Roadmap 文档,是官方计划在不久的将来实施的一些主要功能的一部分。
要更全面地了解计划中的功能和当前工作,需要参考项目仓库或者其他的追踪工具。
设计文档(=> INTRODUCTION/Design Documents)
正如官方文档所述:
我们也不会特别关注这部分内容。
相关资源(=> INTRODUCTION/Media)
在 reddit 中,有关 Prom 的内容:https://www.reddit.com/r/prometheusmonitoring
Awesome Prometheus,社区维护,包含 Prom 相关的综合内容:https://github.com/roaldnefs/awesome-prometheus
还有很多其他关于 Prom 的资源,参考 Media 文档,以获取更多内容;
概念术语(=> INTRODUCTION/Glossary)
官方 Glossary 文档,是 Prom 的词汇表,记录相关的概念术语。
我们将对需要了解的概念进行进一步记录(可能存在理解错误,后面将进一步修正):
01)PromQL (Prometheus)
02)Bridge,是个组件,用于将 Prom Metrics 暴露给非 Prom 监控服务;
03)Collector,是 Exporter 的一部分,负责收集指标;
04)Direct instrumentation,通过 client library 应用程序直接暴露 http/metric 接口;
05)Endpoint,可以抓取的指标来源,通常对应于单个进程。
06)Instance,是个标签(唯一标识 Job 中的 Target)
07)Job,具有相同目的的一组 Target;
08)Target,定义需要抓取的目标(包含 要应用的标签、认证信息、抓取方式 等等)
09)Sample,是时间序列中某个时间点的单个值。
Remote Read、Remote Read Adapter、Remote Read Endpoint:
Remote Write、Remote Write Adapter、Remote Write Endpoint:
这套机制,允许从其他系统中透明读/写时序数据,这主要用于长期存储(而非本地存储);
并非所有其他系统能够被直接操作,而 Adapter 是中间层,允许 Prom 对其他系统进行读/写;
Endpoint 则是值最终被读/写的系统;
版本发布(=> INTRODUCTION/Long-Term Support)
Long-Term Support | Prometheus
Prom LTS 版本支持周期较长,但是仅修复 Bug Sec Doc 等等内容。
但是 LTS 版本也不包含某些特性。
每 6 周启动一个新的 Prometheus 次要发布周期。过去这 6 周,次要版本通常不再收到错误修正。
升级直接进行,但是新功能和增强功能也存在回归的风险,需要再次升级。
接口稳定性(=> PROMETHEUS/API Stability)
在主板本号内,接口是稳定的,不会带来破坏性修改。
部分实验或开发阶段的接口可能会发生变化。
特征选项(=> PROMETHEUS/Feature flags)
部分特性,通常处于实验性质,默认是关闭的,需要进行开启才能使用。
Expand environment variables in external labels
Remote Write Receiver,默认不允许其他 Prom Server 向当前 Prom Server 写入数据;
Exemplars storage
Memory snapshot on shutdown
Extra scrape metrics
New service discovery manager
Prometheus agent
Per-step stats
Auto GOMAXPROCS