Prometheus:云原生时代的核心监控系统

Prometheus 是 CNCF(云原生计算基金会)旗下的开源监控系统,在 GitHub 上获得了超过 6.4 万颗 Star。它专注于系统和服务监控,能够从配置好的目标中按设定的时间间隔采集指标数据,对规则表达式进行求值,展示结果,并在满足指定条件时触发告警。

正文顶部截图

Prometheus 的核心特性包括:

多维数据模型。时间序列由指标名称和一组键值维度定义,这使得数据的组织和查询非常灵活。PromQL 是 Prometheus 自带的查询语言,能够充分利用多维数据模型的能力,进行复杂的聚合和筛选操作。

单节点自治。Prometheus 不依赖分布式存储,每个服务器节点都是独立运行的。这种设计降低了系统的复杂度,也减少了故障点。

HTTP 拉取模型。Prometheus 通过 HTTP 协议主动从目标拉取时间序列数据。对于批处理任务等无法直接拉取的场景,也支持通过中间网关进行推送。

服务发现。Prometheus 支持多种服务发现机制,包括 Kubernetes、Consul、DNS 等,也可以使用静态配置。这让它能够自动感知基础设施的变化,无需手动维护目标列表。

可视化和告警。Prometheus 内置了表达式浏览器,也可以与 Grafana 等工具集成,提供丰富的图表和仪表盘。AlertManager 组件负责处理告警通知,支持分组、抑制和静默等功能。

联邦支持。Prometheus 支持层级联邦和水平联邦,可以从多个 Prometheus 实例中汇总数据,适合大规模部署场景。

README区域截图

安装方式

Prometheus 提供了多种安装方式,可以根据实际需求选择。

预编译二进制文件是最简单的安装方式。在 prometheus.io 的下载页面可以获取各版本的二进制文件,下载解压后即可运行。

Docker 镜像也是常用的方式。Quay.io 和 Docker Hub 上都提供了官方镜像,一条命令就能启动:

docker run --name prometheus -d -p 127.0.0.1:9090:9090 prom/prometheus

启动后可以通过浏览器访问 localhost:9090 进入 Prometheus 的 Web 界面。

从源码构建需要 Go 和 Node.js 环境。克隆仓库后,使用 make build 命令可以编译出包含 Web 资源的完整二进制文件。也可以使用 go install 命令直接安装,但需要注意这种方式编译的二进制文件在运行时需要从源码目录读取 Web 资源。

服务发现插件

Prometheus 内置了多种服务发现插件。如果需要精简构建,可以通过 Go build tags 来控制包含哪些插件。使用 remove_all_sd 标签可以排除所有可选的服务发现插件,然后用 enable__sd 标签逐个启用需要的插件。

作为 Go 库使用

Prometheus 项目中的 common 和 client_golang 等仓库是专门设计为可复用的库。但 prometheus/prometheus 仓库本身是构建独立程序的,并非设计为库使用。虽然可以引用其中的代码,但官方并不保证内部 API 的稳定性。

Remote Write 的 protobuf 定义已经独立发布在 buf.build 上,可以作为库引入使用。对于 v3.x 版本,Go module 使用 v0.3x.z 的标签格式;v2.x 版本则使用 v0.x.z 的格式。这种做法符合 Go module 的语义版本规范,在 v0 版本中允许破坏性变更。

React UI 开发

Prometheus 的前端基于 React 构建。如果需要进行 UI 开发,可以参考 web/ui 目录下的说明文档。

Prometheus 作为云原生监控的事实标准,已经得到了广泛的采用。无论是小型团队的单机部署,还是大型企业的联邦集群,Prometheus 都能提供可靠的监控能力。配合 Grafana 进行可视化,以及 AlertManager 处理告警,构成了一套完整的可观测性解决方案。

Grafana 进行可视化,以及 AlertManager 处理告警,构成了一套完整的可观测性解决方案。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐