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