菜单
文档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. 查找与那些 PodMonitors 匹配的集群中的 Pods。
  3. 从这些 Pods 中抓取指标,并将它们转发到接收器。

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

PodMonitors 可能会引用秘密以验证目标以抓取它们。在这些情况下,只有当 PodMonitor 被更新或此组件刷新其内部状态时,才会加载和刷新这些秘密,这发生在 5 分钟刷新周期上。

用法

合金
prometheus.operator.podmonitors "LABEL" {
    forward_to = RECEIVER_LIST
}

参数

以下参数被支持

名称类型描述默认值必需
forward_to列表(指标接收器)要发送抓取指标的目标接收器列表。
namespaces列表(字符串)要搜索PodMonitor资源的命名空间列表。如果未指定,将搜索所有命名空间。
informer_sync_timeout持续时间PodMonitor资源初始同步的超时时间。1m

以下块在prometheus.operator.podmonitors的定义内被支持

层次结构描述必需
clientclient配置用于查找PodMonitors的Kubernetes客户端。
client > basic_auth基本认证配置对Kubernetes API的基本认证。
client > authorization授权配置对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用于发现PodMonitors的标签选择器。
selector > match_expression匹配表达式用于发现PodMonitors的标签选择器表达式。
clusteringclustering配置当Alloy以集群模式运行时使用的组件。

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

client块

client块配置用于发现PodMonitors的Kubernetes客户端。如果没有提供client块,则使用运行Alloy pod的服务帐户的默认集群配置。

以下参数被支持

名称类型描述默认值必需
api_server字符串Kubernetes API服务器的URL。
kubeconfig_file字符串用于连接到Kubernetes的kubeconfig文件的路径。
bearer_token_file字符串包含用于认证的bearer令牌的文件。
bearer_tokensecret用于认证的bearer令牌。
enable_http2布尔值是否支持请求的HTTP2。
follow_redirects布尔值是否应遵循服务器返回的重定向。
proxy_url字符串用于发送请求的HTTP代理。
no_proxy字符串以逗号分隔的IP地址、CIDR表示法和域名列表,不包括在代理中。
proxy_from_environment布尔值使用环境变量指示的代理URL。false
proxy_connect_headermap(list(secret))指定在连接请求期间发送到代理的头信息。

以下之一最多只能提供一项

no_proxy可以包含IP、CIDR表示法和域名。IP和域名可以包含端口号。proxy_url必须在配置no_proxy时配置。

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

proxy_connect_header仅在配置了proxy_urlproxy_from_environment时配置。

基本认证块

名称类型描述默认值必需
password_file字符串包含基本认证密码的文件。
密码secret基本认证密码。
用户名字符串基本认证用户名。

passwordpassword_file 是互斥的,在 basic_auth 块内部只能提供其中一个。

授权块

名称类型描述默认值必需
credentials_file字符串包含密钥值的文件。
凭证secret密钥值。
类型字符串授权类型,例如,“Bearer”。

credentialcredentials_file 是互斥的,在 authorization 块内部只能提供其中一个。

oauth2 块

名称类型描述默认值必需
client_id字符串OAuth2 客户端 ID。
client_secret_file字符串包含 OAuth2 客户端密钥的文件。
client_secretsecretOAuth2 客户端密钥。
endpoint_paramsmap(string)要附加到令牌 URL 的可选参数。
proxy_url字符串用于发送请求的HTTP代理。
no_proxy字符串以逗号分隔的IP地址、CIDR表示法和域名列表,不包括在代理中。
proxy_from_environment布尔值使用环境变量指示的代理URL。false
proxy_connect_headermap(list(secret))指定在连接请求期间发送到代理的头信息。
scopes列表(字符串)用于验证的权限列表。
token_url字符串获取令牌的 URL。

client_secretclient_secret_file 是互斥的,在 oauth2 块内部只能提供其中一个。

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

no_proxy可以包含IP、CIDR表示法和域名。IP和域名可以包含端口号。proxy_url必须在配置no_proxy时配置。

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

proxy_connect_header仅在配置了proxy_urlproxy_from_environment时配置。

tls_config 块

名称类型描述默认值必需
ca_pem字符串用于验证服务器的 CA PEM 编码文本。
ca_file字符串用于验证服务器的 CA 证书。
cert_pem字符串客户端认证的 PEM 编码证书文本。
cert_file字符串客户端认证的证书文件。
insecure_skip_verify布尔值禁用服务器证书的验证。
key_file字符串客户端认证的密钥文件。
key_pemsecret客户端认证的 PEM 编码密钥文本。
min_version字符串可接受的最小 TLS 版本。
server_name字符串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。所有参数都是可选的。省略的字段采用其默认值。

名称类型描述默认值必需
action字符串要执行的重命名操作。replace
modulusuint用于计算散列的源标签值的模数的正整数。
regex字符串一个有效的 RE2 表达式,支持括号捕获组。用于匹配从 source_labelseparator 字段组合中提取的值,或在 labelkeep/labeldrop/labelmap 操作期间过滤标签。(.*)
replacement字符串如果正则表达式与提取的值匹配,则执行的常规表达式替换值。支持之前捕获的组。"$1"
separator字符串用于连接 source_labels 中存在的值的分隔符。;
source_labels列表(字符串)要选择的标签值的列表。它们的内容使用 separator 连接,并与 regex 匹配。
target_label字符串结果值将被写入的标签。

您可以使用以下操作:

  • drop - 当使用 source_labelsseparator 提取的字符串与 regex 匹配时,丢弃指标。
  • dropequal - 丢弃 source_labels 连接后不匹配 target_label 的目标。
  • hashmod - 对连接的标签进行哈希,计算其模数并将其写入 target_label
  • keep - 当使用 source_labelsseparator 提取的字符串与 regex 匹配时,保留指标。
  • keepequal - 丢弃 source_labels 连接后不匹配 target_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_interval持续时间抓取目标之间的默认间隔。如果目标资源不提供抓取间隔,则用作默认值。1m
default_scrape_timeout持续时间抓取请求的默认超时时间。如果目标资源不提供抓取超时,则用作默认值。10s

selector 块

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

以下参数被支持

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

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

match_expression 块

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

以下参数被支持

名称类型描述默认值必需
key字符串要匹配的标签名称。
operator字符串匹配时使用的操作符。
values列表(字符串)匹配时使用的值。

必须将 operator 参数设置为以下字符串之一

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

如果 selector 块内部有多个 match_expressions 块,它们将使用 AND 子句组合在一起。

clustering 块

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

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

聚类假设所有聚类节点使用相同的配置文件,并且所有选择加入聚类的 prometheus.operator.podmonitors 组件在整个抓取间隔期间具有相同的配置。

所有选择加入聚类的 prometheus.operator.podmonitors 组件实例使用目标标签和一致性哈希算法来决定集群对等节点间每个目标的所有权。然后,每个对等节点只抓取其负责的目标子集,从而实现抓取负载的分配。当一个节点加入或离开集群时,每个对等节点重新计算所有权,并使用新的目标集继续抓取。这比所有节点都需要重新分配的 hashmod 分片性能更好,因为只有目标所有权的 1/N 被转移,但最终是一致的(而不是 hashmod 分片那样的完全一致)。

如果 Alloy 没有以集群模式运行,那么该操作将不执行任何操作,并且 prometheus.operator.podmonitors 将抓取其参数中接收到的每个目标。

导出字段

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

组件健康

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

调试信息

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

它还公开了它发现的每个 PodMonitor 的某些调试信息,包括在从 PodMonitor 一致性化抓取配置时找到的任何错误。

调试指标

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

示例

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

合金
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。

合金
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 时这可能很有用。

合金
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"]
    }
}

兼容组件

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

  • 导出 Prometheus MetricsReceiver 的组件

注意

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