Prometheus:云原生时代的核心监控系统
文章目录Prometheus云原生时代的核心监控系统Prometheus云原生时代的核心监控系统Prometheus 是 CNCF云原生计算基金会旗下的开源监控系统在 GitHub 上获得了超过 6.4 万颗 Star。它专注于系统和服务监控能够从配置好的目标中按设定的时间间隔采集指标数据对规则表达式进行求值展示结果并在满足指定条件时触发告警。Prometheus 的核心特性包括多维数据模型。时间序列由指标名称和一组键值维度定义这使得数据的组织和查询非常灵活。PromQL 是 Prometheus 自带的查询语言能够充分利用多维数据模型的能力进行复杂的聚合和筛选操作。单节点自治。Prometheus 不依赖分布式存储每个服务器节点都是独立运行的。这种设计降低了系统的复杂度也减少了故障点。HTTP 拉取模型。Prometheus 通过 HTTP 协议主动从目标拉取时间序列数据。对于批处理任务等无法直接拉取的场景也支持通过中间网关进行推送。服务发现。Prometheus 支持多种服务发现机制包括 Kubernetes、Consul、DNS 等也可以使用静态配置。这让它能够自动感知基础设施的变化无需手动维护目标列表。可视化和告警。Prometheus 内置了表达式浏览器也可以与 Grafana 等工具集成提供丰富的图表和仪表盘。AlertManager 组件负责处理告警通知支持分组、抑制和静默等功能。联邦支持。Prometheus 支持层级联邦和水平联邦可以从多个 Prometheus 实例中汇总数据适合大规模部署场景。安装方式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 处理告警构成了一套完整的可观测性解决方案。