OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  代码  ›  Prometheus — 监控与指标系统

Prometheus — 监控与指标系统

 
  ci ·  2026-02-28 00:56:11 · 3 次点击  · 0 条评论  

Prometheus
Prometheus

访问 prometheus.io 获取完整文档、示例和指南。

[![CI](https://github.com/prometheus/prometheus/actions/workflows/ci.yml/badge.svg)](https://github.com/prometheus/prometheus/actions/workflows/ci.yml) [![Docker Repository on Quay](https://quay.io/repository/prometheus/prometheus/status)][quay] [![Docker Pulls](https://img.shields.io/docker/pulls/prom/prometheus.svg?maxAge=604800)][hub] [![Go Report Card](https://goreportcard.com/badge/github.com/prometheus/prometheus)](https://goreportcard.com/report/github.com/prometheus/prometheus) [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/486/badge)](https://bestpractices.coreinfrastructure.org/projects/486) [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/prometheus/prometheus/badge)](https://securityscorecards.dev/viewer/?uri=github.com/prometheus/prometheus) [![CLOMonitor](https://img.shields.io/endpoint?url=https://clomonitor.io/api/projects/cncf/prometheus/badge)](https://clomonitor.io/projects/cncf/prometheus) [![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/prometheus/prometheus) [![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/prometheus.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:prometheus)

Prometheus 是一个 云原生计算基金会 项目,是一个系统和服务的监控系统。它按照设定的时间间隔从配置的目标收集指标,评估规则表达式,展示结果,并在观察到指定条件时触发警报。

Prometheus 区别于其他指标和监控系统的特点包括:

  • 多维数据模型(由指标名称和一组键/值维度定义的时间序列)
  • PromQL,一种强大而灵活的查询语言,可充分利用其多维特性
  • 不依赖分布式存储;单服务器节点是自治的
  • 采用 HTTP 拉取模型进行时间序列收集
  • 通过中间网关支持推送时间序列,适用于批处理作业
  • 通过服务发现静态配置发现目标
  • 支持多种图表和仪表盘模式
  • 支持分层和水平的联邦集群

架构概览

架构概览

安装

有多种方式可以安装 Prometheus。

预编译二进制文件

已发布版本的预编译二进制文件可在 prometheus.io 网站的 下载 部分 获取。建议使用最新的生产版本二进制文件来安装 Prometheus。
有关所有详细信息,请参阅文档中的 安装 章节。

Docker 镜像

Docker 镜像可在 Quay.ioDocker Hub 获取。

你可以运行以下命令启动一个 Prometheus 容器进行试用:

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

现在可以通过 http://localhost:9090/ 访问 Prometheus。

从源码构建

要从源代码构建 Prometheus,你需要:

  • Go: go.mod 中指定的版本或更高版本。
  • NodeJS: .nvmrc 中指定的版本或更高版本。
  • npm: 版本 10 或更高(使用 npm --version 检查,参考这里)。

首先克隆仓库:

git clone https://github.com/prometheus/prometheus.git
cd prometheus

你可以使用 go 工具将 prometheuspromtool 二进制文件构建并安装到你的 GOPATH 中:

go install github.com/prometheus/prometheus/cmd/...
prometheus --config.file=your_config.yml

但是,当使用 go install 构建 Prometheus 时,Prometheus 期望能够从 web/ui/static 下的本地文件系统目录读取其 Web 资源。为了让这些资源被找到,你必须从克隆的仓库根目录运行 Prometheus。同时请注意,除非使用 make assetsmake build 显式构建,否则此目录不包含 React UI。

上述配置文件的示例可以在这里找到。

你也可以使用 make build 进行构建,这将编译 Web 资源,使得 Prometheus 可以从任何位置运行:

make build
./prometheus --config.file=your_config.yml

Makefile 提供了几个目标:

  • build: 构建 prometheuspromtool 二进制文件(包括构建和编译 Web 资源)
  • test: 运行测试
  • test-short: 运行短测试
  • format: 格式化源代码
  • vet: 检查源代码中的常见错误
  • assets: 构建 React UI

服务发现插件

Prometheus 捆绑了许多服务发现插件。你可以使用 Go 构建标签自定义构建中包含哪些服务发现。

要在使用 make build 构建时排除服务发现,请将所需的标签添加到 .promu.yml 文件中的 build.tags.all 下:

build:
    tags:
        all:
            - netgo
            - builtinassets
            - remove_all_sd           # 排除所有可选的服务发现
            - enable_kubernetes_sd    # 仅重新启用 kubernetes

然后像往常一样运行 make build。或者,直接使用 go build 时:

go build -tags "remove_all_sd,enable_kubernetes_sd" ./cmd/prometheus

可用的构建标签:
* remove_all_sd - 排除所有可选的服务发现(保留 file_sd、static_sd 和 http_sd)
* enable_<name>_sd - 当使用 remove_all_sd 时,重新启用特定的服务发现

如果你添加我们目前不认可的树外插件,可能需要额外的步骤来调整 go.modgo.sum 文件。请务必在加载第三方代码时格外小心。

构建 Docker 镜像

你可以使用以下命令在本地构建 Docker 镜像:

make promu
promu crossbuild -p linux/amd64
make npm_licenses
make common-docker-amd64

make docker 目标仅用于我们的 CI 系统,在本地运行时不会生成完全可用的镜像。

将 Prometheus 用作 Go 库

在 Prometheus 项目中,像 prometheus/commonprometheus/client-golang 这样的仓库被设计为可重用的库。

prometheus/prometheus 仓库构建的是一个独立的程序,并非设计为库使用。我们知道有人将其部分用作库,我们不会故意设置障碍,但希望你意识到,我们并未刻意使其作为库能良好工作。例如,你可能会遇到仅在作为库使用时才会出现的错误。

远程写入

我们在 buf.build 上独立发布了我们的远程写入 Protobuf。

你可以将其用作库:

go get buf.build/gen/go/prometheus/prometheus/protocolbuffers/go@latest

这是实验性的。

Prometheus 代码库

为了遵守 go mod 规则,Prometheus 的发布号并不完全匹配 Go 模块的发布。

对于 Prometheus v3.y.z 版本,我们发布等效的 v0.3y.z 标签。v0.3y.z 中的 y 始终填充为两位数字,如果需要则前导补零。

因此,想要将 Prometheus v3.0.0 用作库的用户可以这样做:

go get github.com/prometheus/prometheus@v0.300.0

对于 Prometheus v2.y.z 版本,我们发布了等效的 v0.y.z 标签。

因此,想要将 Prometheus v2.35.0 用作库的用户可以这样做:

go get github.com/prometheus/prometheus@v0.35.0

这种解决方案清楚地表明,我们可能会在面向用户的次要版本之间破坏内部的 Go API,因为在主要版本零中允许破坏性更改

React UI 开发

有关基于 React 的 UI 的构建、运行和开发的更多信息,请参阅 React 应用的 README.md

更多信息

  • 可通过 pkg.go.dev 获取 Godoc 文档。由于 Go 模块的特殊性,v3.y.z 将显示为 v0.3y.z(v0.3y.z 中的 y 始终填充为两位数字,如果需要则前导补零),而 v2.y.z 将显示为 v0.y.z。
  • 查看 社区页面,了解如何通过各种沟通渠道联系 Prometheus 开发者和用户。

贡献

参考 CONTRIBUTING.md

许可证

Apache 许可证 2.0,参见 LICENSE

3 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor