菜单
文档breadcrumb arrow Grafana Alloybreadcrumb arrow 参考breadcrumb arrow 组件breadcrumb arrow prometheusbreadcrumb arrow prometheus.operator.podmonitors
开源

prometheus.operator.podmonitors

prometheus.operator.podmonitors 发现您 Kubernetes 集群中的 PodMonitor 资源,并抓取它们引用的目标。此组件执行三个主要功能

  1. 从您的 Kubernetes 集群中发现 PodMonitor 资源。
  2. 在您的集群中发现与这些 PodMonitor 匹配的 Pod。
  3. 从这些 Pod 中抓取指标,并将它们转发到接收器。

默认配置假定 Alloy 在 Kubernetes 集群内部运行,并使用集群内配置来访问 Kubernetes API。它可以通过在 client 块中提供连接信息从集群外部运行,但需要网络级访问 Pod 才能从中抓取指标。

PodMonitor 可能会引用密钥以验证目标身份来抓取它们。在这些情况下,密钥仅在 PodMonitor 更新时或此组件刷新其内部状态时加载和刷新,内部状态刷新周期为 5 分钟。

用法

alloy
prometheus.operator.podmonitors "LABEL" {
    forward_to = RECEIVER_LIST
}

参数

支持以下参数

名称类型描述默认值必需
forward_tolist(MetricsReceiver)要将抓取的指标发送到的接收器列表。
namespaceslist(string)要搜索 PodMonitor 资源的命名空间列表。如果未指定,将搜索所有命名空间。
informer_sync_timeoutdurationPodMonitor 资源初始同步的超时时间。1m

prometheus.operator.podmonitors 的定义中支持以下块

层级结构描述必需
clientclient配置用于查找 PodMonitor 的 Kubernetes 客户端。
client > basic_authbasic_auth配置 Kubernetes API 的基本身份验证。
client > authorizationauthorization配置 Kubernetes API 的通用授权。
client > oauth2oauth2配置 OAuth2 以验证 Kubernetes API 的身份。
client > oauth2 > tls_configtls_config配置连接到 Kubernetes API 的 TLS 设置。
client > tls_configtls_config配置连接到 Kubernetes API 的 TLS 设置。
rulerule要应用于发现目标的重新标记规则。
scrapescrape应用于发现目标的默认抓取配置。
selectorselector要发现哪些 PodMonitor 的标签选择器。
selector > match_expressionmatch_expression要发现哪些 PodMonitor 的标签选择器表达式。
clusteringclustering当 Alloy 在集群模式下运行时,配置组件。

> 符号表示更深层次的嵌套。例如,client > basic_auth 指的是在 client 块内定义的 basic_auth 块。

client 块

client 块配置用于发现 PodMonitor 的 Kubernetes 客户端。如果未提供 client 块,则使用默认的集群内配置以及正在运行的 Alloy Pod 的服务帐户。

支持以下参数

名称类型描述默认值必需
api_serverstringKubernetes API 服务器的 URL。
kubeconfig_filestring用于连接到 Kubernetes 的 kubeconfig 文件的路径。
bearer_token_filestring包含用于身份验证的 bearer token 的文件。
bearer_tokensecret用于身份验证的 Bearer token。
enable_http2bool是否支持请求的 HTTP2。true
follow_redirectsbool是否应跟随服务器返回的重定向。true
proxy_urlstring用于发送请求的 HTTP 代理。
no_proxystring以逗号分隔的 IP 地址、CIDR 表示法和域名列表,以排除在代理之外。
proxy_from_environmentbool使用环境变量指示的代理 URL。false
proxy_connect_headermap(list(secret))指定在 CONNECT 请求期间发送到代理的标头。

最多可以提供以下选项之一

no_proxy 可以包含 IP、CIDR 表示法和域名。IP 和域名可以包含端口号。如果配置了 no_proxy,则必须配置 proxy_url

proxy_from_environment 使用环境变量 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY(或其小写版本)。请求使用环境变量中与其方案匹配的代理,除非被 NO_PROXY 排除。如果配置了 proxy_from_environment,则不得配置 proxy_urlno_proxy

只有在配置了 proxy_urlproxy_from_environment 的情况下,才应配置 proxy_connect_header

basic_auth 块

名称类型描述默认值必需
password_filestring包含基本身份验证密码的文件。
passwordsecret基本身份验证密码。
usernamestring基本身份验证用户名。

passwordpassword_file 是互斥的,并且在 basic_auth 块内只能提供一个。

authorization 块

名称类型描述默认值必需
credentials_filestring包含密钥值的文件。
credentialssecret密钥值。
typestring授权类型,例如 “Bearer”。

credentialcredentials_file 是互斥的,并且在 authorization 块内只能提供一个。

oauth2 块

名称类型描述默认值必需
client_idstringOAuth2 客户端 ID。
client_secret_filestring包含 OAuth2 客户端密钥的文件。
client_secretsecretOAuth2 客户端密钥。
endpoint_paramsmap(string)要附加到令牌 URL 的可选参数。
proxy_urlstring用于发送请求的 HTTP 代理。
no_proxystring以逗号分隔的 IP 地址、CIDR 表示法和域名列表,以排除在代理之外。
proxy_from_environmentbool使用环境变量指示的代理 URL。false
proxy_connect_headermap(list(secret))指定在 CONNECT 请求期间发送到代理的标头。
scopeslist(string)要进行身份验证的作用域列表。
token_urlstring从中获取令牌的 URL。

client_secretclient_secret_file 是互斥的,并且在 oauth2 块内只能提供一个。

oauth2 块还可以包含单独的 tls_config 子块。

no_proxy 可以包含 IP、CIDR 表示法和域名。IP 和域名可以包含端口号。如果配置了 no_proxy,则必须配置 proxy_url

proxy_from_environment 使用环境变量 HTTP_PROXY、HTTPS_PROXY 和 NO_PROXY(或其小写版本)。请求使用环境变量中与其方案匹配的代理,除非被 NO_PROXY 排除。如果配置了 proxy_from_environment,则不得配置 proxy_urlno_proxy

只有在配置了 proxy_urlproxy_from_environment 的情况下,才应配置 proxy_connect_header

tls_config 块

名称类型描述默认值必需
ca_pemstring用于验证服务器的 CA PEM 编码文本。
ca_filestring用于验证服务器的 CA 证书。
cert_pemstring用于客户端身份验证的证书 PEM 编码文本。
cert_filestring用于客户端身份验证的证书文件。
insecure_skip_verifybool禁用服务器证书的验证。
key_filestring用于客户端身份验证的密钥文件。
key_pemsecret用于客户端身份验证的密钥 PEM 编码文本。
min_versionstring最低可接受的 TLS 版本。
server_namestring用于指示服务器名称的 ServerName 扩展。

以下参数对是互斥的,不能同时设置

  • ca_pemca_file
  • cert_pemcert_file
  • key_pemkey_file

配置客户端身份验证时,必须同时提供客户端证书(使用 cert_pemcert_file)和客户端密钥(使用 key_pemkey_file)。

如果未提供 min_version,则最低可接受的 TLS 版本将从 Go 的默认最低版本 TLS 1.2 继承。如果提供了 min_version,则必须将其设置为以下字符串之一

  • "TLS10" (TLS 1.0)
  • "TLS11" (TLS 1.1)
  • "TLS12" (TLS 1.2)
  • "TLS13" (TLS 1.3)

rule 块

rule 块包含可应用于输入指标的任何重新标记规则的定义。如果定义了多个 rule 块,则按自上而下的顺序应用转换。

以下参数可用于配置 rule。所有参数都是可选的。省略字段采用其默认值。

名称类型描述默认值必需
actionstring要执行的重新标记操作。replace
modulusuint用于计算哈希源标签值的模数的正整数。
regexstring有效的 RE2 表达式,支持带括号的捕获组。用于匹配从 source_labelseparator 字段组合中提取的值,或在 labelkeep/labeldrop/labelmap 操作期间过滤标签。(.*)
replacementstring如果正则表达式与提取的值匹配,则执行正则表达式替换所依据的值。支持先前捕获的组。"$1"
separatorstring用于连接 source_labels 中存在的值的分隔符。;
source_labelslist(string)要选择其值的标签列表。它们的内容使用 separator 连接,并与 regex 匹配。
target_labelstring结果值将写入到的标签。

您可以使用以下操作

  • drop - 删除 regex 与使用 source_labelsseparator 提取的字符串匹配的指标。
  • dropequal - 删除串联的 source_labelstarget_label 匹配的目标。
  • hashmod - 哈希串联的标签,计算其模数 modulus,并将结果写入 target_label
  • keep - 保留 regex 与使用 source_labelsseparator 提取的字符串匹配的指标。
  • keepequal - 删除串联的 source_labelstarget_label 不匹配的目标。
  • labeldrop - 将 regex 与所有标签名称匹配。任何匹配的标签都将从指标的标签集中删除。
  • labelkeep - 将 regex 与所有标签名称匹配。任何不匹配的标签都将从指标的标签集中删除。
  • labelmap - 将 regex 与所有标签名称匹配。任何匹配的标签都将根据 replacement 字段的内容重命名。
  • lowercase - 将 target_label 设置为串联的 source_labels 的小写形式。
  • replace - 将 regex 与串联的标签匹配。如果存在匹配项,它将使用 replacement 字段的内容替换 target_label 的内容。
  • uppercase - 将 target_label 设置为串联的 source_labels 的大写形式。

注意

可以使用 $CAPTURE_GROUP_NUMBER${CAPTURE_GROUP_NUMBER} 表示法引用正则表达式捕获组。

scrape 块

名称类型描述默认值必需
default_scrape_intervalduration抓取目标之间的默认间隔。如果目标资源未提供抓取间隔,则用作默认值。1m
default_scrape_timeoutduration抓取请求的默认超时时间。如果目标资源未提供抓取超时时间,则用作默认值。10s

selector 块

selector 块描述了 PodMonitor 的 Kubernetes 标签选择器。

支持以下参数

名称类型描述默认值必需
match_labelsmap(string)用于发现资源的标签键和值。{}

match_labels 参数为空时,将匹配所有 PodMonitor 资源。

match_expression 块

match_expression 块描述了用于 PodMonitor 发现的 Kubernetes 标签匹配器表达式。

支持以下参数

名称类型描述默认值必需
keystring要匹配的标签名称。
operatorstring匹配时要使用的运算符。
valueslist(string)匹配时使用的值。

operator 参数必须是以下字符串之一

  • "In"
  • "NotIn"
  • "Exists"
  • "DoesNotExist"

如果 selector 块内有多个 match_expressions 块,则它们与 AND 子句组合在一起。

clustering 块

名称类型描述默认值必需
enabledbool启用与其他集群节点共享目标。false

当 Alloy 使用集群,并且 enabled 设置为 true 时,此组件实例选择加入参与集群以在所有集群节点之间分发抓取负载。

集群假定所有集群节点都使用相同的配置文件运行,并且所有选择加入使用集群的 prometheus.operator.podmonitors 组件在抓取间隔过程中都具有相同的配置。

选择加入集群的所有 prometheus.operator.podmonitors 组件实例都使用目标标签和一致的哈希算法来确定集群对等方之间每个目标的所有权。然后,每个对等方仅抓取其负责的目标子集,以便分发抓取负载。当节点加入或离开集群时,每个对等方都会重新计算所有权,并继续使用新的目标集进行抓取。这比 hashmod 分片执行得更好,在 hashmod 分片中,所有节点都必须重新分配,因为仅传输了 1/N 的目标所有权,但最终是一致的(而不是像 hashmod 分片那样完全一致)。

如果 Alloy 在集群模式下运行,则该块是无操作的,并且 prometheus.operator.podmonitors 抓取其参数中接收的每个目标。

导出的字段

prometheus.operator.podmonitors 不导出任何字段。它将抓取的所有指标转发到使用 forward_to 参数配置的接收器。

组件健康状况

当给定无效配置、Prometheus 组件无法初始化或无法正确建立与 Kubernetes API 的连接时,prometheus.operator.podmonitors 将报告为不健康。

调试信息

prometheus.operator.podmonitors 在组件的调试端点上报告每个配置的抓取作业的上次抓取状态,包括发现的标签和上次抓取时间。

它还公开了它发现的每个 PodMonitor 的一些调试信息,包括从 PodMonitor 协调抓取配置时发现的任何错误。

调试指标

prometheus.operator.podmonitors 不公开任何组件特定的调试指标。

示例

此示例发现集群中的所有 PodMonitor,并将收集的指标转发到 prometheus.remote_write 组件。

alloy
prometheus.remote_write "staging" {
  // Send metrics to a locally running Mimir.
  endpoint {
    url = "http://mimir:9009/api/v1/push"

    basic_auth {
      username = "example-user"
      password = "example-password"
    }
  }
}

prometheus.operator.podmonitors "pods" {
    forward_to = [prometheus.remote_write.staging.receiver]
}

此示例将发现的 PodMonitor 限制为具有特定命名空间 my-app 中标签 team=ops 的 PodMonitor。

alloy
prometheus.operator.podmonitors "pods" {
    forward_to = [prometheus.remote_write.staging.receiver]
    namespaces = ["my-app"]
    selector {
        match_expression {
            key = "team"
            operator = "In"
            values = ["ops"]
        }
    }
}

此示例将应用额外的重新标记规则到发现的目标,以按主机名进行过滤。如果将 Alloy 作为 DaemonSet 运行,这可能很有用。

alloy
prometheus.operator.podmonitors "pods" {
    forward_to = [prometheus.remote_write.staging.receiver]
    rule {
      action = "keep"
      regex = sys.env("HOSTNAME")
      source_labels = ["__meta_kubernetes_pod_node_name"]
    }
}

Compatible components

prometheus.operator.podmonitors 可以接受来自以下组件的参数

注意

连接某些组件可能不合理,或者组件可能需要进一步配置才能使连接正常工作。有关更多详细信息,请参阅链接的文档。