菜单
文档导航箭头 Grafana Alloy导航箭头 参考导航箭头 组件导航箭头 prometheus导航箭头 prometheus.operator.probes
开源

Prometheus-运营商-检测

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

  1. 从 Kubernetes 集群中查找探测资源。
  2. 查找与那些探测相匹配的目标或入口。
  3. 从这些端点抓取指标,并将它们转发到接收器。

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

探测可能会引用目标以进行验证并抓取它们。在这种情况下,只有在探测更新或此组件刷新其内部状态时(每 5 分钟刷新一次周期),才会加载和刷新这些秘密。

用法

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

参数

支持以下参数

名称类型描述默认值必需
forward_tolist(MetricsReceiver)要发送抓取指标的目标接收器列表。yes
namespaceslist(string)要搜索探测资源的命名空间列表。如果没有指定,则搜索所有命名空间。no

以下块支持在 prometheus.operator.probes 的定义内部

层次结构描述必需
clientclient配置用于查找探测的 Kubernetes 客户端。no
client > basic_authbasic_auth配置到 Kubernetes API 的基本身份验证。no
client > authorizationauthorization配置到 Kubernetes API 的通用身份验证。no
client > oauth2oauth2配置 OAuth2 以认证到 Kubernetes API。no
client > oauth2 > tls_configtls_config配置连接到 Kubernetes API 的 TLS 设置。no
client > tls_configtls_config配置连接到 Kubernetes API 的 TLS 设置。no
rulerule应用在发现目标上的重命名规则。no
scrapescrape将应用于发现目标的基本抓取配置。no
selectorselector用于发现探测的标签选择器。no
selector > match_expressionmatch_expression用于发现探测的标签选择器表达式。no
clusteringclustering配置 Alloy 在集群模式下运行时的组件。no

“>”符号表示更深的嵌套级别。例如,client > basic_auth 指的是在 client 块中定义的 basic_auth 块。

client 块

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

支持以下参数

名称类型描述默认值必需
api_server字符串Kubernetes API 服务器的 URL。no
kubeconfig_file字符串用于连接到 Kubernetes 的kubeconfig文件的路径。no
bearer_token_file字符串包含用于身份验证的令牌的文件。no
bearer_token密钥用于身份验证的令牌。no
enable_http2布尔值是否支持请求的 HTTP2。trueno
follow_redirects布尔值是否应遵循服务器返回的重定向。trueno
proxy_url字符串发送请求通过的 HTTP 代理。no
no_proxy字符串逗号分隔的 IP 地址、CIDR 表示法和域名列表,排除代理。no
proxy_from_environment布尔值使用环境变量指示的代理 URL。falseno
proxy_connect_headermap(list(secret))在连接请求期间发送到代理的标题。no

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

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

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

proxy_connect_header 应该只在配置了 proxy_urlproxy_from_environment 时配置。

basic_auth 块

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

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

authorization 块

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

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

oauth2 块

名称类型描述默认值必需
client_id字符串OAuth2 客户端 ID。no
client_secret_file字符串包含 OAuth2 客户端机密的文件。no
client_secret密钥OAuth2 客户端机密。no
endpoint_paramsmap(string)附加到令牌 URL 的可选参数。no
proxy_url字符串发送请求通过的 HTTP 代理。no
no_proxy字符串逗号分隔的 IP 地址、CIDR 表示法和域名列表,排除代理。no
proxy_from_environment布尔值使用环境变量指示的代理 URL。falseno
proxy_connect_headermap(list(secret))在连接请求期间发送到代理的标题。no
scopeslist(string)要身份验证的域列表。no
token_url字符串从中获取令牌的 URL。no

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(或它们的小写版本)。除非排除在 NO_PROXY 外,否则请求将使用与它们的方案匹配的环境变量的代理。如果配置了 proxy_from_environment,则不得配置 proxy_urlno_proxy

proxy_connect_header 应该只在配置了 proxy_urlproxy_from_environment 时配置。

tls_config 块

名称类型描述默认值必需
ca_pem字符串用于验证服务器的 CA PEM 编码文本。no
ca_file字符串用于验证服务器的 CA 证书。no
cert_pem字符串用于客户端认证的证书 PEM 编码文本。no
cert_file字符串用于客户端认证的证书文件。no
insecure_skip_verify布尔值禁用服务器证书的验证。no
key_file字符串用于客户端认证的密钥文件。no
key_pem密钥用于客户端认证的密钥 PEM 编码文本。no
min_version字符串最低可接受的 TLS 版本。no
server_name字符串表示服务器名称的 ServerName 扩展。no

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

  • 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 的以下参数。所有参数都是可选的。省略的字段将采用它们的默认值。

名称类型描述默认值必需
操作字符串执行的重命名操作。replaceno
模量无符号整数用于计算散列源标签值的模数的正整数。no
正则表达式字符串支持括号捕获组的有效 RE2 表达式。用于匹配从 source_labelseparator 字段的组合中提取的值或过滤标签期间的动作。(.*)no
替换字符串如果正则表达式匹配提取的值,则执行正则表达式替换的值。支持以前捕获的组。"$1"no
分隔符字符串用于连接 source_labels 中存在的值的分隔符。;no
源标签list(string)要选择其值的标签的列表。它们的内容使用 separator 连接,并匹配 regexno
目标标签字符串将写入结果值的标签。no

可以使用以下动作:

  • drop - 删除 regex 匹配使用 source_labelsseparator 提取的字符串的指标。
  • dropequal - 删除与拼接的 source_labels 匹配的 target_label 的目标。
  • hashmod - 对拼接的标签进行散列,计算其模数,并将结果写入 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} 语法引用正则表达式捕获组。

抓取块

名称类型描述默认值必需
default_scrape_interval持续默认爬取目标的间隔。如果目标资源没有提供爬取间隔,则用作默认值。1mno
default_scrape_timeout持续爬取请求的默认超时时间。如果目标资源没有提供爬取超时时间,则用作默认值。10sno

选择器块

selector块描述了用于探测的Kubernetes标签选择器。

支持以下参数

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

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

match_expression块

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

支持以下参数

名称类型描述默认值必需
key字符串匹配的标签名称。yes
operator字符串匹配时使用的运算符。yes
valueslist(string)匹配时使用的值。no

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

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

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

聚类块

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

当Alloy以集群模式运行时,并将enabled设置为true,则该组件实例会同意参与集群以在所有集群节点之间分配爬取负载。

聚类假定所有集群节点都使用相同的配置文件,并且所有在爬取间隔期间同意使用聚类的prometheus.operator.probes组件具有相同的配置。

所有选择加入聚类的prometheus.operator.probes组件实例使用目标标签和一致性哈希算法来确定集群对之间每个目标的所有权。然后,每个对只爬取它负责的子集,从而分配爬取负载。当节点加入或离开集群时,每个对都会重新计算所有权并继续使用新的目标集进行爬取。这比所有节点都必须重新分配的hashmod分区表现得更好,因为只有1/N的目标所有权被转移,但最终是一致的(而不是像hashmod分区那样的完全一致)。

如果Alloy没有运行在集群模式下,则该块为空操作,并且prometheus.operator.probes会爬取其参数中收到的每个目标。

导出的字段

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

组件健康

当提供无效配置、Prometheus组件无法初始化或无法正确建立到Kubernetes API的连接时,prometheus.operator.probes报告为不健康。

调试信息

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

它还公开了我们发现的每个探测的某些调试信息,包括在协调从探测的爬取配置过程中发现的任何错误。

调试指标

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

示例

此示例发现集群中的所有探测,并将收集的指标转发到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.probes "pods" {
    forward_to = [prometheus.remote_write.staging.receiver]
}

此示例将限制发现的探测仅在具有标签team=ops的特定命名空间中:my-app

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

此示例将应用额外的重标签规则以发现的目标进行过滤,按主机名。如果在小增效模式中运行Alloy,这可能非常有用。

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

兼容组件

prometheus.operator.probes可以从以下组件接受参数:

注意

连接某些组件可能不合理或组件可能需要进一步配置才能正确连接。请参阅相关文档以获取更多详细信息。