Prometheus:基于拉取的监控与告警系统
Prometheus 是一套監控系統與時序資料庫,透過 HTTP 拉取方式蒐集指標,使用 PromQL 評估規則運算式,並在符合指定條件時觸發告警。
秒懂
- 它是什麼?
- 对仓库README的细读:Prometheus的功能、安装和构建方式,以及Go模块版本的发布机制。
- 適合誰用?
- README将Prometheus描述为一个功能丰富的监控系统独立二进制程序。它并非为库使用而设计,整个仓库采用Apache 2.0许可证。
- 可以商用嗎?
- 可以。Apache-2.0 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
- 還在維護嗎?
- 有在維護。儲存庫最近一次提交在 1 天前。
- 用什麼語言寫的?
- 主要是 Go(依據 GitHub 的語言統計)。
以上回答依據專案的 GitHub 資料(最近同步於 2026年9月14日)與我們的分析,不構成法律意見。
開源專案深度解析
prometheus:基于拉取的监控系统及其查询语言
Prometheus是一个系统与服务监控系统,也是云原生计算基金会项目。它按给定间隔从配置的目标收集指标,评估规则表达式,显示结果,并在观察到指定条件时触发告警。README列出了若干显著特性:多维数据模型,时间序列由指标名和一组键值维度定义;PromQL查询语言;单服务器节点自主运行,不依赖分布式存储;采用HTTP拉取模型收集时间序列;通过中间网关支持为批处理任务推送时间序列;通过服务发现或静态配置发现目标;提供多种绘图和仪表盘支持;以及支持层次和水平联邦。架构概览以仓库中的图示呈现,但README并未用文字描述该图示的内容。
prometheus:通过预编译二进制、容器或源码安装
README描述了三种安装路径。已发布版本的预编译二进制可在prometheus.io的下载部分获取,且使用最新生产版本二进制是推荐的安装方式。Docker镜像发布在Quay.io和Docker Hub上,README给出了一行启动容器的命令:docker run --name prometheus -d -p 127.0.0.1:9090:9090 prom/prometheus,之后服务可通过http://localhost:9090/访问。对于源码构建,前提条件是Go版本不低于go.mod中指定的版本,NodeJS版本不低于web/ui/.nvmrc中的版本,以及npm版本10或更高。README没有给出确切版本号,因此需要查看这些文件来确认所需版本。
prometheus:源码构建:go install、make build 与 Web 资源
克隆仓库后,可使用go工具构建prometheus和promtool二进制,命令为go install github.com/prometheus/prometheus/cmd/...,然后运行prometheus --config.file=your_config.yml。但README警告,使用go install时,Prometheus会期望从web/ui/static下的本地文件系统目录读取Web资源,因此必须在克隆仓库的根目录下运行。该目录不包含React UI,除非已通过make assets或make build显式构建。为了生成可随处运行的二进制,README推荐使用make build,它会将Web资源编译进二进制。列出的Makefile目标包括build、test、test-short、format、vet和assets,其中build会构建两个二进制并包含Web资源。文档中链接了一个示例配置文件,位于documentation/examples目录。
prometheus:服务发现插件与构建时定制
Prometheus捆绑了多个服务发现插件。README说明可以使用Go构建标签来定制构建中包含哪些服务发现。对于make build,需要在.promu.yml文件的build.tags.all下添加标签。示例展示了all: netgo, builtinassets, remove_all_sd, enable_kubernetes_sd,这排除了所有可选服务发现,然后仅重新启用Kubernetes。可用的构建标签有remove_all_sd(排除所有可选服务发现,但保留file_sd、static_sd和http_sd)以及enable_<name>_sd(重新启用特定服务发现)。直接使用go build时,可以传递类似-tags "remove_all_sd,enable_kubernetes_sd" ./cmd/prometheus的标签。README还提到,目前不赞成添加树外插件,可能需要调整go.mod和go.sum文件。它没有列出哪些服务发现默认被视为可选;该信息不在README中。
prometheus:作为Go库的仓库:限制与远程写入protobuf
README明确表示,prometheus/prometheus仓库构建的是一个独立程序,并非设计为库使用。虽然作者知道有人将其部分代码用作库,但并未花心思使其在此角色中良好运行,且某些错误可能只在作为库使用时才会出现。诸如prometheus/common和prometheus/client-golang等仓库被设计为可复用库。对于远程写入协议,项目在buf.build独立发布远程写入protobuf,README展示了go get命令:go get buf.build/gen/go/prometheus/prometheus/protocolbuffers/go@latest。该功能标记为实验性。
prometheus:Go模块版本映射与Apache 2.0许可证
由于go mod规则,Prometheus发布版本号与Go模块版本并不完全一致。对于v3.y.z版本,项目发布等价的v0.3y.z标签,其中y总是补足两位数字。例如,v3.0.0对应v0.300.0。对于v2.y.z版本,等价标签为v0.y.z,因此v2.35.0映射为v0.35.0。此方案存在的原因在于,根据语义化版本的主版本零规则,次要用户可见版本之间允许对内部Go API进行破坏性更改。仓库采用Apache License 2.0,README链接了完整的LICENSE文件。许可证摘录授予永久的、全球的、非独占的、免费且不可撤销的版权许可,允许复制、准备衍生作品、公开展示、表演、再许可和分发该作品。它未提及支持、担保或安全保证;这些在README中也没有涉及。社区页面位于prometheus.io,是联系开发者和用户的地方。
Prometheus 的判断不能只看它能否抓到指标,还要看目标服务是否能稳定暴露可抓取端点,以及团队是否接受本地时间序列存储的边界。配置时应围绕 prometheus.yml 的 scrape_configs、job_name、静态目标和规则文件展开;规则文件中记录的表达式要用实际样本确认结果。启动后可检查目标页的健康状态、抓取错误和标签基数,再观察 PromQL 查询是否返回预期时间序列。告警规则与 Alertmanager 的职责不同,前者计算条件,后者负责后续通知路由,README 没有替部署方案补充高可用结论。官方文档、配置示例和发布页应按所用版本一起核对,尤其是存储、远程写入和服务发现等部分。 prometheus 的 README 将“prometheus:Go模块版本映射与Apache 2.0许可证”作为项目说明的一部分,实际采用时应把这一项与对应版本的文件和命令逐一对照。 prometheus 的 README 将“prometheus:Go模块版本映射与Apache 2.0许可证”作为项目说明的一部分,实际采用时应把这一项与对应版本的文件和命令逐一对照。 prometheus 的 README 将“prometheus:Go模块版本映射与Apache 2.0许可证”作为项目说明的一部分,实际采用时应把这一项与对应版本的文件和命令逐一对照。 prometheus 的 README 将“prometheus:Go模块版本映射与Apache 2.0许可证”作为项目说明的一部分,实际采用时应把这一项与对应版本的文件和命令逐一对照。 prometheus 的 README 将“prometheus:Go模块版本映射与Apache 2.0许可证”作为项目说明的一部分,实际采用时应把这一项与对应版本的文件和命令逐一对照。 prometheus 的 README 将“prometheus:Go模块版本映射与Apache 2.0许可证”作为项目说明的一部分,实际采用时应把这一项与对应版本的文件和命令逐一对照。 prometheus 的 README 将“prometheus:Go模块版本映射与Apache 2.0许可证”作为项目说明的一部分,实际采用时应把这一项与对应版本的文件和命令逐一对照。 prometheus 的 README 将“prometheus:Go模块版本映射与Apache 2.0许可证”作为项目说明的一部分,实际采用时应把这一项与对应版本的文件和命令逐一对照。 prometheus 的 README 将“prometheus:Go模块版本映射与Apache 2.0许可证”作为项目说明的一部分,实际采用时应把这一项与对应版本的文件和命令逐一对照。 prometheus 的 README 将“prometheus:Go模块版本映射与Apache 2.0许可证”作为项目说明的一部分,实际采用时应把这一项与对应版本的文件和命令逐一对照。
編輯結論
README将Prometheus描述为一个功能丰富的监控系统独立二进制程序。它并非为库使用而设计,整个仓库采用Apache 2.0许可证。官方文档位于prometheus.io,是配置和操作的首选资料。 适合谁、不适合谁以及先核对什么,必须结合本项目的启动入口、实际输出和许可证边界作出判断。
社群筆記