Heidi Labs
GitHub TrendingGitHub Trending 项目约 8 分钟3,239 字

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

本文目录

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

Prometheus 是一个云原生计算基金会(Cloud Native Computing Foundation,CNCF)项目,是一个系统与服务监控系统。它按给定间隔从配置的目标采集指标(metrics),评估规则表达式,展示结果,并在观察到指定条件时触发告警。

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

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

架构概览

安装#

安装 Prometheus 有多种方式。

预编译二进制文件#

发布版本的预编译二进制文件可在 prometheus.io 的下载区获取。推荐使用最新的生产发布版二进制文件安装 Prometheus。所有细节见文档中的「Installing」章节。

Docker 镜像#

Docker 镜像可在 Quay.io 或 Docker 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 工具把 prometheus 和 promtool 二进制文件构建并安装到 GOPATH:

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

不过,使用 go install 构建 Prometheus 时,Prometheus 会期望从 web/ui/static 下的本地文件系统目录读取其 Web 资源(assets)。要找到这些资源,你必须从克隆仓库的根目录运行 Prometheus。另请注意,除非已用 make assets 或 make build 显式构建,该目录不包含 React UI。

示例配置文件可在此处找到。

你也可以使用 make build,它会把 Web 资源编译进去,因此 Prometheus 可从任意位置运行:

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

Makefile 提供多个目标:

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

服务发现插件#

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

要在使用 make build 构建时排除服务发现,请把所需标签加入 .promu.yml 的 build.tags.all 下:

build:
  tags:
    all:
      - netgo
      - builtinassets
      - remove_all_sd # Exclude all optional SDs
      - enable_kubernetes_sd # Re-enable only 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 时重新启用特定 SD

如果你添加树外(out-of-tree)插件——我们目前不认可这种做法——可能需要额外步骤来调整 go.mod 和 go.sum 文件。一如既往,加载第三方代码时要格外小心。

构建 Docker 镜像#

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

make promu
promu crossbuild -p linux/$(go env GOHOSTARCH)
make common-docker-current-arch

要为不同架构构建,请把 $(go env GOHOSTARCH) 替换为 Makefile.common 中 DOCKER_ARCHS 里的某个架构(如 amd64),并运行相应的 make common-docker-<architecture> 目标。

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

把 Prometheus 作为 Go 库使用#

在 Prometheus 项目中,prometheus/common 和 prometheus/client_golang 等仓库被设计为可复用的库。

prometheus/prometheus 仓库构建的是独立程序,并非为作为库使用而设计。我们知道有人会这样使用它的部分内容,我们不会故意制造不便,但请注意,我们并未付出精力让它作为库良好工作。例如,你可能会遇到仅在作为库使用时才出现的错误。

Remote Write#

我们独立地在 buf.build 发布 Remote Write protobuf。

你可以把它作为库使用:

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

这是实验性的。

Prometheus 代码库#

为遵守 go mod 规则,Prometheus 的发布号与 Go module 发布号并不完全一致。

对于 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。

更多信息#

Godoc 文档可通过 pkg.go.dev 获取。由于 Go Modules 的特性,v3.y.z 会显示为 v0.3y.z(其中 y 总是补足为两位数,必要时加前导零),而 v2.y.z 会显示为 v0.y.z。

有关在各种沟通渠道上联系 Prometheus 开发者和用户的方式,见 Community 页面。

贡献#

参见 CONTRIBUTING.md。

许可证#

Apache License 2.0,见 LICENSE。

关于#

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

prometheus.io/

主题:alerting、graphing、hacktoberfest、metrics、monitoring、prometheus、time-series