ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Prometheus promtool 的 HTTP 客户端配置:`--http.config.file` 参数体系与源码实现详解

Prometheus promtool 的 HTTP 客户端配置:`--http.config.file` 参数体系与源码实现详解 Prometheus promtool 的 HTTP 客户端配置--http.config.file参数体系与源码实现详解【免费下载链接】prometheusThe Prometheus monitoring system and time series database.项目地址: https://gitcode.com/GitHub_Trending/pr/prometheus本篇指南围绕 promtool 的 HTTP 客户端配置文件展开当 Prometheus 服务端启用了 Basic 认证或 TLS 时promtool 的所有需要与服务器通信的命令都可以通过--http.config.file指向一份 YAML 配置文件来提供认证与传输细节。读完后你将掌握该配置文件完整的参数 schemabasic_auth、authorization、oauth2、tls_config、代理与自定义请求头、互斥约束规则以及 promtool 源码中从命令行参数到 HTTP RoundTripper 的完整构建链路。哪些命令支持--http.config.filePromtool 是 Prometheus 配套的通用 CLI 工具支持配置校验、调试、查询、单元测试、TSDB 管理、数据推送以及实验性的 PromQL 编辑。由于 promtool 需要与 Prometheus 服务器建立 HTTP 连接而服务器侧可能要求认证Basic 认证、Bearer Token、OAuth 2.0或强制 TLS因此 promtool 提供了--http.config.file参数来承载这些认证细节。从源码 cmd/promtool/main.go 可以看到当前为该参数注册了 5 条命令命令用途源码位置promtool check healthy检查 Prometheus 服务器是否健康main.go#L151promtool check ready检查 Prometheus 服务器是否就绪main.go#L155promtool query含 instant / range / series / labels / label-values 等子命令对服务器执行查询main.go#L183promtool push向服务器推送时间序列main.go#L229promtool import-rules从服务器回灌backfill录制规则main.go#L299以检查本地服务器健康状态为例--url默认值为http://localhost:9090见 main.go#L152promtool check healthy --urlhttp://localhost:9090 --http.config.filehttp-config-file.yml其中check healthy实际请求的是服务器的/-/healthy端点check ready请求/-/ready端点这两个端点常量定义在 cmd/promtool/main.go 的checkHealth与checkReadiness中。配置文件整体 Schema配置文件使用 YAML 格式书写参数 schema 如下。方括号表示参数可选非列表类型参数在未指定时取默认值# 注意 basic_auth 和 authorization 两个选项互斥。 # 使用配置的 username/password 设置 Authorization 请求头。 # username_ref 和 password_ref 引用 secret manager 中 secret 的名称。 # password、password_file 与 password_ref 三者互斥。 basic_auth: [ username: string ] [ username_file: filename ] [ username_ref: string ] [ password: secret ] [ password_file: string ] [ password_ref: string ] # 可选的 Authorization 请求头配置。 authorization: # 设置认证类型。 [ type: string | default: Bearer ] # 设置凭据与 credentials_file 互斥。 [ credentials: secret ] # 从配置文件读取凭据与 credentials 互斥。 [ credentials_file: filename ] [ credentials_ref: string ] # 可选的 OAuth 2.0 配置。 # 不能与 basic_auth 或 authorization 同时使用。 oauth2: [ oauth2 ] tls_config: [ tls_config ] [ follow_redirects: bool | default: true ] # 是否启用 HTTP2。 [ enable_http2: bool | default: true ] # 可选的代理 URL。 [ proxy_url: string ] # 逗号分隔字符串包含应被排除出代理的 IP、CIDR 记法或域名 # IP 与域名可以携带端口号。 [ no_proxy: string ] [ proxy_from_environment: bool ] [ proxy_connect_header: [ string: [ secret, ... ] ] ] # http_headers 指定一组注入到每个请求中的请求头。 http_headers: [ string: header ]通用占位符的定义bool布尔值可取true或falsefilename合法的文件路径secret作为机密信息使用的普通字符串例如密码string普通字符串一个可直接参考的完整示例文件位于 documentation/examples/promtool-http-config-file.yml其内容同时演示了 Basic 认证与 TLS 客户端证书# TLS 与 Basic 认证配置示例。 # 对于 basic_auth请使用之前在 web-config.yml 中配置的 Prometheus 凭据。 # 密码必须以明文提供。 # 为避免在该文件中直接写入明文密码建议改用 password_file 或 password_ref。 basic_auth: username: alice password: verylongpassword tls_config: cert_file: server.crt key_file: server.key一个值得注意的行为细节是该配置文件在每一次 HTTP 请求时都会重新读取因此对配置与证书的修改可以立即生效无需重启任何进程。oauth2客户端凭证模式OAuth 2.0 认证采用 client credentials客户端凭证授权类型# client_id 与 client_secret 用于向授权服务器认证你的 # 应用以获取访问令牌access token。 # client_secret、client_secret_file 与 client_secret_ref 三者互斥。 client_id: string [ client_secret: secret ] [ client_secret_file: filename ] [ client_secret_ref: string ] # scopes 指定资源访问的原因范围。 scopes: [ - string ...] # 用于获取令牌的 URL。 token_url: string # 追加到 token URL 的可选参数。 [ endpoint_params: string: string ... ] # 配置 token 请求的 TLS 设置。 tls_config: [ tls_config ] # 可选的代理 URL。 [ proxy_url: string ] # 逗号分隔字符串包含应被排除出代理的 IP、CIDR 记法或域名 # IP 与域名可以携带端口号。 [ no_proxy: string ] [ proxy_from_environment: bool ] [ proxy_connect_header: [ string: [ secret, ... ] ] ]注意token_url与client_id为必填项token 请求本身支持独立的tls_config与代理配置这对应了“取令牌走授权服务器、访问数据走数据服务器”两类不同信任域的常见架构。tls_configTLS 传输配置# 以下配置三选一ca/cert/key、ca_file/cert_file/key_file、 # 或 ca_ref/cert_ref/key_ref。 # CA 证书文本用于验证服务器。 [ ca: string ] # 用于验证服务器证书的 CA 证书文件。 [ ca_file: filename ] # ca_ref 是 secret manager 中用作 CA 证书的 secret 名称。 [ ca_ref: string ] # 客户端证书文本。 [ cert: string ] # 用于客户端证书认证的证书文件。 [ cert_file: filename ] # cert_ref 是 secret manager 中用作客户端证书的 secret 名称。 [ cert_ref: string ] # 客户端私钥文本。 [ key: secret ] # 用于客户端证书认证的私钥文件。 [ key_file: filename ] # key_ref 是 secret manager 中用作客户端私钥的 secret 名称。 [ key_ref: string ] # 指示服务器名称的 ServerName 扩展项SNI。 [ server_name: string ] # 禁用服务器证书验证。 [ insecure_skip_verify: bool ] # 可接受的最低 TLS 版本。可选值TLS10 (TLS 1.0)、TLS11 (TLS 1.1)、 # TLS12 (TLS 1.2)、TLS13 (TLS 1.3)。 # 若未设置promtool 将使用 Go 的默认最低版本即 TLS 1.2。 [ min_version: string ] # 可接受的最高 TLS 版本。可选值TLS10 (TLS 1.0)、TLS11 (TLS 1.1)、 # TLS12 (TLS 1.2)、TLS13 (TLS 1.3)。 # 若未设置promtool 将使用 Go 的默认最高版本即 TLS 1.3。 [ max_version: string ]*_ref系列参数表明该配置与 secret manager 集成凭据不落盘到配置文件中而仅以名称引用形式出现适合对凭据管理有更高要求的部署环境。header自定义请求头http_headers中每个 header 的结构如下header表示单个 HTTP 请求头的配置值可以来自内联字符串、secret 或文件各自可给出多个来源[ values: [ - string ... ] ] [ secrets: [ - secret ... ] ] [ files: [ - filename ... ] ]这一结构适合在请求中注入统一的网关标识、追踪 ID 或多段式认证材料。源码级实现从命令行到 RoundTripper结合 cmd/promtool/main.go 的实现可以看清配置文件的完整生效链路参数注册。所有需要连接服务器的子命令都通过同一常量httpConfigFileDescriptionmain.go#L99注册http.config.file旗标并借助 kingpin 的ExistingFileVar在解析阶段就校验文件必须存在checkServerHealthCmd.Flag(http.config.file, httpConfigFileDescription).PlaceHolder(filename).ExistingFileVar(httpConfigFilePath)互斥校验。在main()中main.go#L342-L356promtool 明确禁止“在服务器 URL 中携带 Basic 认证用户”与“使用 http.config.file”两种方式同时出现if httpConfigFilePath ! { if serverURL ! nil serverURL.User.Username() ! { kingpin.Fatalf(Cannot set base auth in the server URL and use a http.config.file at the same time) } ... }即--urlhttp://user:passhost:9090这种写法与--http.config.file二选一否则直接以 fatal 退出。加载与构建。校验通过后依次调用promconfig.LoadHTTPConfigFile解析 YAML 配置再用promconfig.NewRoundTripperFromConfig构建 HTTP RoundTripper构建时还会通过promconfig.WithUserAgent打上 promtool 的 User-Agent使服务端能识别请求来源为 promtool 而非 Prometheus 客户端httpConfig, _, err : promconfig.LoadHTTPConfigFile(httpConfigFilePath) ... httpRoundTripper, err promconfig.NewRoundTripperFromConfig(*httpConfig, promtool, promconfig.WithUserAgent(version.ComponentUserAgent(promtool)))该 RoundTripper 随后作为httpRoundTripper变量被健康检查、查询、push 等命令共用因此tls_config、代理、http_headers等所有配置项对全部 5 类命令统一生效。从源码结构看配置文件解析复用的是与 Prometheus 抓取/远程写入相同的 promconfig 模块这意味着 promtool 的 HTTP 配置 schema 与主配置文件中http_client_config一脉相承——理解了 promtool 文档中的这份 schema也就理解了 Prometheus 各 HTTP 客户端场景的通用认证/TLS 配置模型。实战要点小结认证方式互斥basic_auth、authorization、oauth2三者不能同时配置basic_auth内部password/password_file/password_ref互斥authorization内部credentials与credentials_file互斥。优先使用文件与引用生产环境中避免在配置文件中写明文密码/私钥改用*_file或 secret manager 的*_ref形式示例文件 documentation/examples/promtool-http-config-file.yml 的注释也给出了同样的建议。默认值follow_redirects与enable_http2默认均为trueTLS 版本上下限未设置时分别取 Go 的默认值 TLS 1.2 与 TLS 1.3。热生效配置文件每次请求重新读取修改凭据或证书后下一次请求即生效便于排查认证故障。与 URL 内嵌认证的冲突不要把用户名直接写在--url中并同时传--http.config.filepromtool 会直接报错退出见上文 main.go#L342-L345 的校验逻辑。排查顺序先用promtool check healthy验证连通性与认证再用promtool check ready确认可服务状态最后执行query等重操作三者共用同一套--http.config.file配置便于隔离是网络/认证问题还是查询本身的问题。【免费下载链接】prometheusThe Prometheus monitoring system and time series database.项目地址: https://gitcode.com/GitHub_Trending/pr/prometheus创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表