Prometheus监控系统和时间序列数据库

Prometheus


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

特点

Prometheus 与其他指标和监控系统的区别在于:

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

架构概述

安装

Prometheus 的安装方法多种多样。

预编译二进制文件

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

Docker 镜像

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

您可以启动一个 Prometheus 容器来试用它

bash 复制代码
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:版本 8 或更高版本(使用 npm --version此处 检查)。

首先克隆代码库:

bash 复制代码
git clone https://github.com/prometheus/prometheus.git
cd prometheus

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

bash 复制代码
GO111MODULE=on go install github.com/prometheus/prometheus/cmd/...
prometheus --config.file=your_config.yml

但是,使用 go install 命令构建 Prometheus 时,Prometheus 需要能够从本地文件系统目录 web/ui/staticweb/ui/templates 下读取其 Web 资源。为了找到这些资源,您必须从克隆仓库的根目录运行 Prometheus。另请注意,这些目录不包含React UI,除非已使用 make assetsmake build 明确构建。

上述配置文件的示例可在此处找到。(https://github.com/prometheus/prometheus/blob/main/documentation/examples/prometheus.yml)

您也可以使用 make build 命令进行构建,这将在 Web 资源中进行编译,以便Prometheus 可以从任何位置运行:

bash 复制代码
make build
./prometheus --config.file=your_config.yml

Makefile 提供了几个目标:

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

服务发现插件

Prometheus 捆绑了许多服务发现插件。从源代码构建 Prometheus 时,您可以编辑 plugins.yml文件来禁用某些服务发现。该文件是一个 yaml 格式的go 导入路径列表,这些路径将被构建到 Prometheus 二进制文件中。

更改文件后,需要再次运行 make build

如果您使用其他方法编译 Prometheus,make plugins 将生成相应的插件文件。

如果您添加了我们目前不推荐的外部插件,则可能需要执行额外的步骤来调整 go.modgo.sum 文件。与往常一样,加载第三方代码时要格外小心。

构建 Docker 镜像

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

bash 复制代码
make promu
promu crossbuild -p linux/amd64
make npm_licenses
make common-docker-amd64

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

使用 Prometheus 作为 Go 库

远程写入

我们正在独立发布我们的远程写入 protobuf,地址为buf.build

您可以将其用作库:

shell 复制代码
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 作为库使用的用户可以执行以下操作:

shell 复制代码
go get github.com/prometheus/prometheus@v0.300.0

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

因此,想要使用 Prometheus v2.35.0 作为库的用户可以执行以下操作:

shell 复制代码
go get github.com/prometheus/prometheus@v0.35.0

此解决方案明确指出,我们可能会在面向用户的次要版本发布之间破坏内部 Go API,因为在主要版本零中允许进行重大更改

React UI 开发

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

更多信息

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

贡献

请参阅 CONTRIBUTING.md

许可证

Apache 许可证 2.0,请参阅 LICENSE

关于项目

Prometheus 是云原生计算基金会 (CNCF) 的一个项目,它是一个系统和服务监控系统。使用领先的开源监控解决方案监控您的应用程序、系统和服务。检测、收集、存储和查询您的指标,以用于警报、仪表板和其他用例。
Apache-2.0
Golang
60,736
9855
1118
2012-11-24
2025-10-12

增长趋势 - stars