date
related_level
slug
type
relate_date
summary
status
tags
category
last_updated
Jan 10, 2026 07:17 PM
是否已更新
orginal_page
是否推荐
功能:用于验证配置与规则、测试指标、执行查询、调试 TSDB 及性能分析
- 验证 Prometheus 配置文件
- 验证告警规则(Alerting Rules)和记录规则(Recording Rules)
- 校验指标格式
- 对 Prometheus 服务执行查询
- 直接通过命令行执行 PromQL 表达式
- 规则单元测试
- 编写测试用例,验证告警/记录规则在给定模拟数据下的行为是否符合预期
- 调试与性能分析(Debugging & Profiling)
- 获取 Prometheus 的运行时状态(如 TSDB 快照信息)
- 触发 pprof 性能分析(需配合 Web API)
- 检查 WAL 或 block 数据
安装 promtool 二进制工具
export PROM_VER=3.9.1
curl -Lo prometheus.tar.gz https://github.com/prometheus/prometheus/releases/download/v$PROM_VER/prometheus-$PROM_VER.linux-amd64.tar.gz
tar -xzf prometheus.tar.gz --wildcards "*/promtool" --strip-components=1
chmod +x ./promtool
mv ./promtool /usr/local/bin/
promtool 的 HTTP 客户端配置文件
- 用于配置 HTTP 客户端 YAML 格式配置文件
- 不是所有指令都会用到该配置,需要连接到 Prometheus 服务器才会用到
- 配置章节:
basic_auth,authorization,oauth2,tls_config,header
basic_auth, authorization 配置认证方式
- 这两者互斥只能配置一个
oauth2 配置使用客户端凭据授权类型的 OAuth 2.0 身份验证
tls_config 配置 TLS 认证
http_headers.header 配置单个 HTTP header 的配置
其他:重定向,代理,HTTP2
promtool check 检查资源配置的有效性
通用选项
--query.lookback-delta服务器 lookback 窗口,默认为 5 分钟
promtool check config <config-file> 检查配置文件有效性
- 可用选项
--syntax-only仅检查配置文件的语法,跳过对引用的外部资源(如规则文件、服务发现文件等)的内容验证--lint对配置中的规则(rules)和抓取(scrape)设置执行额外的“最佳实践”检查- 可选值:默认为
duplicate-rules all:启用所有 lint 规则。duplicate-rules:检查是否有重复的记录规则或告警规则名too-long-scrape-interval:检查抓取间隔是否过长(例如 > 10m,可能影响数据精度)none:禁用所有 lint 检查--lint-fatal如果 lint 检查失败(如发现重复规则),则以退出码 3 退出- 默认为 false
--ignore-unknown-fields忽略规则文件(rule files)中的未知字段- 默认为 false
- 允许在规则文件中添加自定义元数据(如
team: backend,owner: alice),便于团队管理,但必须在加载到 Prometheus 前移除否则会报错 --agent以 Prometheus Agent 模式检查配置文件
promtool check web-config <web-config-files>检查 web 配置文件有效性
promtool check rules [<rule-files>...]检查规则文件是否有效
promtool check metrics 从 stdin 获取文本验证指标的一致性和正确性,并可选择执行基数分析
- 可用选项
--extended打印与指标基数相关的扩展信息--lint控制 lint 规则- 可选值(默认为
all):all,none
- 样例
cat metrics.prom | promtool check metricscurl -s http://localhost:9090/metrics | promtool check metrics --extendedcurl -s http://localhost:9090/metrics | promtool check metrics --extended --lint=none
promtool check healthy 检查服务器是否有效
- 可用选项
--http.config.fileHTTP 客户端配置文件--url服务器 URL
promtool check ready 检查服务器是否就绪
- 可用选项
--http.config.fileHTTP 客户端配置文件--url服务器 URL
promtool query 执行各种查询
通用选项
--http.config.fileHTTP 客户端配置文件
promtool query instant <server> <expr>
- 可用选项
--time查询的执行时间(RFC3339 或 UNIX 时间戳)
promtool query range <server> <expr>
- 可用选项
--start,--end:查询时间范围(RFC3339 或 UNIX 时间戳)--step:查询步长--header:添加自定义 HTTP 请求头
promtool query series <server> --match=MATCH [--match=MATCH ...] 查询匹配的时间序列元数据
- 可用选项
--match一个或多个时间序列选择器--start,--end:查询时间范围(RFC3339 或 UNIX 时间戳)
promtool query labels <server> <name> 查询标签
- 可用选项
--match一个或多个时间序列选择器--start,--end:查询时间范围(RFC3339 或 UNIX 时间戳)
promtool query analyze --server=SERVER --type=TYPE --match=MATCH 针对 Prometheus 服务器运行查询以分析某些指标的使用模式
- 可用选项
--match一个或多个时间序列选择器--type指标类型:histogram--time查询的执行时间(RFC3339 或 UNIX 时间戳)--duration分析的时间范围,默认为 1h
promtool promql 格式化或编辑现有 PromQL 查询
- 均需要启用
--experimental标志
promtool promql format <query>将 PromQL 查询格式化
promtool promql label-matchers set <query> <name> <value> 在现有 PromQL 查询中添加或修改某个标签匹配器
- 可用选项
-t,--type要设置的标签匹配器的类型,默认为=
标签匹配运算符 =, !=, =~, !~
操作符 | 含义 |
= | 精确等于 |
!= | 不等于 |
=~ | 正则匹配(完全锚定,等价于 ^...$) |
!~ | 正则不匹配 |
promtool promql delete <query> <name>从现有 PromQL 查询中移除指定标签匹配器
promtool test rule <test-rule-file>… 执行单元规则
可用选项
--run <regex>可多次使用,仅运行名称匹配正则表达式的测试组
--junit存放 JUnix XML 测试结果的路径
--diff以彩色差异格式显示预期 vs 实际结果,提升可读性- 实验性
--ignore-unknown-fields忽略测试文件或规则文件中的自定义字段- 方便扩展元数据(如 team: backend,但需在部署前清理)
--debug启用调试模式
单元测试文件格式及样例
- 参考资料
Unit testing for rules | Prometheus

Unit testing for rules | Prometheus
Prometheus project documentation for Unit testing for rules
单元测试文件格式
<test_group> 测试组,包括模拟输入,告警规则,需要评估的表达式以及期望样本
<series> 用于模拟时间序列数据的输入格式
series: <string>时间序列标识
values: <string>样本值序列
<alert_test_case> 要评估的告警规则
<alert> 告警应包含的标签和注解
<promql_test_case> 要评估的 PromQL 表达式以及期望返回的样本
<sample>
单元测试的时间处理机制
time()返回值为start_timestamp + eval_time- 所有测试(包括
alert_test_case和promql_test_case)中,与当前时间相关的函数的默认起始时间(start_timestamp)为 Unix 时间 0 eval_time是相对于start_timestamp的持续时间(如5m)
- 通过在测试组(test group)中设置
start_timestamp来改变基准时间 - Unix 时间戳:如
1609459200(对应 2021-01-01T00:00:00Z) - RFC3339 字符串:如
"2021-01-01T00:00:00Z"
单元测试文件样例
- 两个文件在同一目录
test.yml
alerts.yml
./promtool test rules test.yml
promtool push metrics <remote-write-url> [<metric-files>...] 推送数据
- 将指标数据以 Prometheus Remote Write 协议推送到指定端点,主要用于远程写入(Remote Write)测试
- 可用选项
--http.config.fileHTTP 客户端配置文件--label为所有指标添加固定标签--timeout超时时间,默认为 30s--header添加自定义 HTTP 请求头--protobuf_message指定使用的 Protobuf 消息格式- 默认为
prometheus.WriteRequest,还支持io.prometheus.write.v2.Request
promtool tsdb 操作 TSDB 数据库
promtool tsdb bench write [<file>] 模拟写入负载,测试 TSDB 写入性能
- 需要提供样本数据文件
- 可用选项
--metrics模拟的指标数量(默认 10,000)--scrapes模拟抓取次数(默认 3,000)--out输出结果目录(默认 benchout)
promtool tsdb analyze [<db path>] [<block id>] 分析 TSDB 块(block)
- 分析内容包括标签对基数(高基数风险),时间序列变更率(churn)和压缩效率
- 可用选项
--extended启用更深入分析--match一个或多个时间序列选择器--limit每类结果最多显示条目数(默认 20)
promtool tsdb list [<db path>] 列出所有 TSDB 块(block)及其元数据
- 可用选项
-r,--human-readable以易读格式(如 MB、时间)显示
promtool tsdb dump [<db path>] 将 TSDB 中的时间序列和样本数据导出为文本
- 可用选项
--format输出 dump 文件格式- 默认为 prom,可选时间序列 json
--match一个或多个时间序列选择器--min-time,--max-time按时间范围筛选(UNIX 时间戳)--sandbox-dir-root根目录,用于创建沙盒目录(沙盒最后会被清理干净),以防 WAL 重放生成区块(默认为数据库路径)
promtool tsdb dump-openmetrics [<db path>] 以 OpenMetrics 文本格式导出样本
- 不支持 native histograms 和过期标记
- 可用选项
--match一个或多个时间序列选择器--min-time,--max-time按时间范围筛选(UNIX 时间戳)--sandbox-dir-root根目录,用于创建沙盒目录(沙盒最后会被清理干净),以防 WAL 重放生成区块(默认为数据库路径)
promtool tsdb create-blocks-from openmetrics <input file> [<output directory>] 从 OpenMetrics 文件生成标准 TSDB 块
- 可用选项
-r,--human-readable以易读格式(如 MB、时间)显示-q,--quiet静默输出,不显示创建的块--label为所有指标添加固定标签
promtool tsdb create-blocks-from rules <rule-files>… 为新的 recording rules 创建块
- 默认只对新的生效,补全历史聚合规则
- 可用选项
--http.config.fileHTTP 客户端配置文件--url服务器 URL--start(必须),--end需要回填(backfill)记录规则的时间范围(RFC3339 或 UNIX 时间戳)--output-dir生成 TSDB 块的存放目录,默认为/data--eval-interval如果 recording rules 中没有设置值时应多久评估一次规则
promtool debug 获取服务器信息用于调试
promtool debug pprof <server>获取 pprof 性能剖析数据
promtool debug metrics <server>获取 Prometheus 服务器暴露的完整指标文本
promtool debug all <server>同时获取 pprof 和 metrics 等所有可用的调试信息
- Author:白鸟3
- URL:https://blog.kun2peng.top/operation/prometheus_promtool
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
