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

prometheus.operator.servicemonitors

prometheus.operator.servicemonitors 在您的 Kubernetes 集群中查找 ServiceMonitor 资源,并抓取它们引用的目标。此组件执行三个主要功能

  1. 从您的 Kubernetes 集群中查找 ServiceMonitor 资源。
  2. 查找与这些 ServiceMonitors 匹配的集群中的服务和端点。
  3. 从这些端点抓取指标,并将它们转发到接收器。

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

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

用法

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

参数

支持以下参数

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

以下块在prometheus.operator.servicemonitors的定义内受支持

层次结构描述必需
客户端客户端配置用于查找ServiceMonitors的Kubernetes客户端。
客户端 > basic_auth基本认证配置对Kubernetes API的基本认证。
客户端 > authorization授权配置对Kubernetes API的通用授权。
客户端 > oauth2OAuth2配置OAuth2以对Kubernetes API进行身份验证。
客户端 > oauth2 > tls_configtls_config配置连接到Kubernetes API的TLS设置。
客户端 > tls_configtls_config配置连接到Kubernetes API的TLS设置。
规则规则应用于发现的目标的重命名标签规则。
抓取抓取应用于发现的目标的默认抓取配置。
选择器选择器用于发现ServiceMonitors的标签选择器。
选择器 > match_expressionmatch_expression用于发现ServiceMonitors的标签选择器表达式。
集群集群配置Alloy在集群模式下运行时的组件。

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

客户端块

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

支持以下参数

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

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

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时才应配置。

基本认证块

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

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

授权块

名称类型描述默认值必需
credentials_file字符串包含密钥值的文件。
credentialssecret密钥值。
type字符串授权类型,例如,“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。
proxy_connect_headermap(list(secret))指定在CONNECT请求期间发送到代理的标头。
scopeslist(string)用于认证的权限列表。
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(或它们的低版本)。请求使用与它们的方案匹配的环境变量中的代理,除非被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_labelslist(string)要选择的标签值的列表。它们的内容使用 separator 连接,并与 regex 匹配。
target_label字符串将结果值写入的标签。

可以使用以下操作

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

注意

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

抓取块

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

选择器块

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

支持以下参数

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

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

match_expression块

match_expression块描述了ServiceMonitors发现时使用的Kubernetes标签匹配器表达式。

支持以下参数

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

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

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

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

集群块

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

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

集群假设所有集群节点都使用相同的配置文件,并且所有选择加入使用集群的prometheus.operator.servicemonitors组件在抓取间隔期间具有相同的配置。

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

如果Alloy未以集群模式运行,则此块是无效操作,并且prometheus.operator.servicemonitors将抓取其参数中接收到的每个目标。

导出字段

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

组件健康

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

调试信息

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

它还暴露了每个已发现的ServiceMonitor的调试信息,包括在从ServiceMonitor同步刮取配置时发现的任何错误。

调试指标

prometheus.operator.servicemonitors不暴露任何特定组件的调试指标。

示例

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

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

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

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

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

兼容组件

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

注意

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