Prometheus 3.x 配置参数详解
详解 Prometheus 3.15.0(实测)的配置文件(prometheus.yml)核心段与运行时参数,并实测确认 3.x 与 2.x 的关键差异(PromQL 变化、UTF-8 指标名、配置文件/CLI 变化、promtool 子命令变化)。所有输出均来自 Prometheus 3.15.0 官方预编译二进制实测
Prometheus 3.x 配置参数详解
目标:详解 Prometheus 3.15.0(实测)的配置文件(prometheus.yml)核心段与运行时参数,并实测确认 3.x 与 2.x 的关键差异(PromQL 变化、UTF-8 指标名、配置文件/CLI 变化、promtool 子命令变化)。所有输出均来自 Prometheus 3.15.0 二进制真实实测。
环境信息
| 信息项 | 值 |
|---|---|
| Prometheus 版本 | 3.15.0(最新 3.x) |
| 配置文件 | prometheus.yml(tar.gz 自带,默认相对运行时所在目录) |
| 默认监听 | 0.0.0.0:9090 |
| 默认数据目录 | data/ |
| 默认数据保留 | 15d |
| 实测方式 | ./prometheus --help 全量参数 + prometheus.yml 配置热加载 + HTTP API 验证 |
配置文件(prometheus.yml)核心段
Prometheus 配置文件为 YAML 格式,由 --config.file 指定。3.15.0 自带默认配置实测如下:
# my global config
global:
scrape_interval: 15s # 抓取间隔:每 15 秒抓取一次目标(默认 1m)
evaluation_interval: 15s # 规则评估间隔:每 15 秒评估一次规则(默认 1m)
# scrape_timeout: 10s # 单次抓取超时(默认 10s,不能大于 scrape_interval)
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
labels:
app: "prometheus"
scrape_native_histograms: true # 3.x 默认配置新增(2.x 无此行)
段 1:global(全局配置)
| 参数 | 默认值 | 说明 |
|---|---|---|
scrape_interval | 1m | 默认抓取间隔,被未显式指定的 job 继承 |
evaluation_interval | 1m | 规则(记录规则/告警规则)评估间隔 |
scrape_timeout | 10s | 单次抓取超时,不能大于 scrape_interval |
external_labels | 无 | 对外通信(告警/远程存储)附加的标签 |
metric_name_validation_scheme | utf8 | 3.x 新增:抓取指标名校验(utf8/legacy,见 UTF-8 说明) |
段 2:scrape_configs(抓取配置)
每个抓取任务为一个 job,核心子参数(实测默认配置 + promtool 校验):
| 参数 | 说明 |
|---|---|
job_name | 任务名,作为 job 标签写入时序 |
static_configs | 静态目标列表,targets 为 host:port 数组 |
metrics_path | 抓取路径(默认 /metrics) |
scheme | http/https(默认 http) |
scrape_interval | 覆盖全局抓取间隔 |
scrape_timeout | 覆盖全局抓取超时 |
labels | 附加标签 |
scrape_native_histograms | 3.x 默认 true:抓取原生直方图(protobuf 协商) |
💡 说明:
targets支持静态列表,也可用服务发现(file_sd、consul_sd、kubernetes_sd 等)动态生成。
段 3:rule_files(规则文件)
rule_files:
- "alerts.yml" # 支持通配符,如 /etc/prometheus/rules/*.yml
规则文件内可定义记录规则(recording rule)与告警规则(alerting rule)。实测:
promtool check config /etc/prometheus/prometheus.yml
实测输出:
Checking /etc/prometheus/prometheus.yml
SUCCESS: 1 rule files found
SUCCESS: /etc/prometheus/prometheus.yml is valid prometheus config file syntax
Checking /etc/prometheus/alerts.yml
SUCCESS: 2 rules found
段 4:alerting(告警配置)
alerting:
alertmanagers:
- static_configs:
- targets: []
# - "alertmanager:9093"
💡 说明:配置 Alertmanager 地址列表,Prometheus 将触发告警推送过去。不配告警则留空。3.x 起 Alertmanager 仅支持 v2 API(实测 release notes 确认:
Disallow configuring AM with the v1 api)。
段 5:otlp(3.x 新增,OTLP 接收配置)
otlp:
translation_strategy: NoUTF8EscapingWithSuffixes
💡 说明:配合
--web.enable-otlp-receiver使用。默认对 OTLP 指标名做规范化(UTF-8 转 ASCII),实测中文指标名默认推送报 HTTP 500normalization for metric "温度计" resulted in empty name;配置NoUTF8EscapingWithSuffixes后保留 UTF-8 名称(实测配置后配置校验通过)。
运行时参数(命令行 flag)
用 ./prometheus --help 实测。以下为运维最常用的参数:
| 参数 | 默认值 | 实测说明 |
|---|---|---|
--config.file | prometheus.yml | 配置文件路径 |
--web.listen-address | 0.0.0.0:9090 | HTTP 监听地址(远程访问需显式指定 0.0.0.0) |
--web.enable-lifecycle | 关闭 | HTTP 热加载 POST /-/reload(实测未开返回 403,开启返回 200) |
--web.enable-admin-api | 关闭 | 管理 API(实测 3.15 仍存在且默认关;未开调用返回 admin APIs disabled) |
--web.enable-otlp-receiver | 关闭 | OTLP 写入端点 /api/v1/otlp/v1/metrics(3.x 新增) |
--storage.tsdb.path | data/ | TSDB 数据目录 |
--storage.tsdb.retention.time | 15d | 数据保留时长,如 30d、720h |
--storage.tsdb.retention.size | 无 | 按大小保留(如 50GB),二选一 |
--log.level | info | 日志级别(3.x 标记 deprecated,建议配置文件 runtime.log_level) |
--agent | 关闭 | Agent 模式(3.x 起替代 --enable-feature=agent) |
--enable-feature | 无 | 逗号分隔的特性开关(实测 3.15 共 29 项,见下) |
--no-auto-gomaxprocs | 自动 | 3.x 自动按 CPU quota 设置 GOMAXPROCS(--no- 前缀关闭) |
--no-auto-gomemlimit | 自动 | 3.x 自动按进程可用内存上限设置 GOMEMLIMIT |
实测 --enable-feature 完整选项(./prometheus --help):
Valid options: concurrent-rule-eval, created-timestamp-zero-ingestion,
delayed-compaction, exemplar-storage, extra-scrape-metrics,
histograms-st-encoding, memory-snapshot-on-shutdown, metadata-wal-records,
old-ui, openmetrics2, otlp-deltatocumulative, otlp-native-delta-ingestion,
promql-binop-fill-modifiers, promql-delayed-name-removal,
promql-experimental-functions, promql-extended-range-selectors,
promql-per-step-stats, search-api, st-storage, st-synthesis,
type-and-unit-labels, use-start-timestamps, use-uncached-io, xor2-encoding,
zstd-scrape
💡 说明:其中
old-ui可切回 2.x 老 UI;promql-experimental-functions开启实验性 PromQL 函数;auto-reload-config(3.0 新增)支持配置自动重载(release notes 确认)。
热加载配置实测(--web.enable-lifecycle)
# 未开启 flag:实测返回 403
curl -s -X POST http://localhost:9090/-/reload -o /dev/null -w "%{http_code}"
# 开启 flag 后:实测返回 200
curl -s -X POST http://localhost:9090/-/reload -o /dev/null -w "%{http_code}"
实测输出:
403
200
admin API 实测(--web.enable-admin-api)
curl -s -X POST http://localhost:9090/api/v1/admin/tsdb/snapshot
未开 flag 实测输出:
{"status":"error","errorType":"unavailable","error":"admin APIs disabled"}
开启 flag 后实测输出:
{"status":"success","data":{"name":"20260926T213128Z-5e7a03741436bdd5"}}
3.x 与 2.x 的关键差异(实测确认)
| 差异点 | 2.x | 3.x(实测) |
|---|---|---|
| Web UI | 老 UI | 全新 React UI(/ 重定向 /query),--enable-feature=old-ui 可回退 |
| UTF-8 指标名 | 需 --enable-feature=utf8-name | 默认启用(utf8-name flag 已移除);但实测 text 抓取仍拒 UTF-8,OTLP 需配置 translation_strategy |
| 默认配置文件 | 无 scrape_native_histograms | 自带 scrape_native_histograms: true |
| 移除的 flag | — | --storage.tsdb.retention、--storage.tsdb.allow-overlapping-blocks、--alertmanager.timeout(实测 --help 已无) |
| Agent 模式 | --enable-feature=agent | --agent(feature flag 移除,实测 --help 有 --[no-]agent) |
| OTLP 接收 | --enable-feature=otlp-write-receiver | --web.enable-otlp-receiver(实测) |
| promtool tsdb | tsdb ls / tsdb snapshot / tsdb check | tsdb list / tsdb dump / tsdb analyze(实测 ls 报 expected command,snapshot/check 已移除,快照改走 admin API) |
| PromQL | 经典函数 | holt_winters 改名 double_exponential_smoothing(实验性);range selector 左开区间;新函数需 promql-experimental-functions |
| 日志格式 | logfmt 自定义 | Go structured logging(实测日志 time=... level=INFO source=... msg=...) |
| 资源自适应 | 手动设置 | 自动 GOMAXPROCS/GOMEMLIMIT(--no-auto-* 关闭) |
scrape_classic_histograms | 原名 | 改名 always_scrape_classic_histograms(3.0 release notes) |
--log.level | 正常 | 标记 deprecated(改配置文件 runtime.log_level,实测 --help 说明) |
PromQL 变化实测
查询 UTF-8 指标名(3.x 新语法,实测):
curl -s --get "http://localhost:9090/api/v1/query" --data-urlencode 'query={"温度计"}'
💡 说明:2.x 指标名必须符合
[a-zA-Z_:][a-zA-Z0-9_:]*;3.x 支持 UTF-8 名称,查询时名称需加引号并放入大括号:{"温度计"},标签同理{"metric.name", "label"=...}。
注意事项
--web.enable-lifecycle与--web.enable-admin-api默认关闭(实测 403 / admin APIs disabled),生产按需开启;admin API 无鉴权,勿暴露公网scrape_timeout不能大于scrape_interval,否则抓取会重叠--storage.tsdb.retention.time与.size同时设置时先达者生效- 3.x 移除的 flag 直接使用会启动报错,升级 2.x→3.x 前先
promtool check config校验并阅读迁移指南 - UTF-8 指标名:抓取 text 格式实测不支持(
expected metric name after HELP),接入 OTLP 并配置otlp.translation_strategy: NoUTF8EscapingWithSuffixes才可保留中文名
常见问题
问题 1:启动报 unknown flag / 2.x 参数在 3.x 失效
原因: 3.x 移除了一批 2.x 参数(--storage.tsdb.retention、--alertmanager.timeout、--enable-feature=agent 等,实测 --help 已无)。
解决: 用 prometheus --help 核对新参数:retention 改 --storage.tsdb.retention.time;agent 用 --agent;OTLP 用 --web.enable-otlp-receiver。
问题 2:修改 prometheus.yml 后不生效
原因: 未开 --web.enable-lifecycle 时 /-/reload 返回 403(实测)。
解决: 启动加 --web.enable-lifecycle,改完配置执行 curl -X POST http://localhost:9090/-/reload(实测返回 200);或用 kill -HUP <pid>。
问题 3:抓取含中文指标名目标一直 down
原因: 实测 Prometheus 3.15 text/OpenMetrics 抓取报 expected metric name after HELP, got "\xe6" ("INVALID"),抓取失败——UTF-8 支持默认启用但抓取解析路径仍按 legacy 校验。
解决: 抓取目标用 ASCII 指标名;需 UTF-8 名称时走 OTLP(--web.enable-otlp-receiver + otlp.translation_strategy: NoUTF8EscapingWithSuffixes)。
问题 4:promtool tsdb ls 报 expected command but got "ls"
原因: 3.x 重命名了 tsdb 子命令(实测报错)。
解决: 用 promtool tsdb list / tsdb dump;快照功能改走 admin API POST /api/v1/admin/tsdb/snapshot(需 --web.enable-admin-api)。
参考链接
- 官方配置文档:https://prometheus.io/docs/prometheus/latest/configuration/configuration/
- Feature flags:https://prometheus.io/docs/prometheus/latest/feature_flags/
- 3.0 迁移指南:https://prometheus.io/docs/prometheus/3.0/migration/
- UTF-8 指南:https://next.prometheus.io/docs/guides/utf8/
- 3.0.0 Release Notes:https://github.com/prometheus/prometheus/releases/tag/v3.0.0
本文档由 www.quzuo.net 平台开发