菜单
开源

prometheus.scrape

prometheus.scrape 为给定的 targets 配置一个 Prometheus 抓取作业。抓取的度量指标将被转发到 forward_to 中传入的接收器列表。

可以通过指定不同的标签来指定多个 prometheus.scrape 组件。

用法

prometheus.scrape "LABEL" {
  targets    = TARGET_LIST
  forward_to = RECEIVER_LIST
}

参数

该组件配置并启动一个新的抓取作业来抓取所有输入目标。以下列出了可用于配置块的可使用参数。

抓取作业名称默认为组件的唯一标识符。

省略的字段将采用其默认值。如果在传递属性时存在冲突(例如,同时定义 BearerToken 和 BearerTokenFile 或同时配置基本身份验证和 OAuth2),则组件将报告错误。

以下参数被支持

名称类型描述默认值必需
targetslist(map(string))要抓取的目标列表。yes
forward_tolist(MetricsReceiver)要发送抓取度量指标的接收器列表。yes
job_namestring如果不已设置,将使用此值作为作业标签。component nameno
extra_metricsbool是否为抓取目标生成额外度量指标。falseno
enable_protobuf_negotiationbool已弃用:使用 scrape_protocols 代替。falseno
honor_labelsbool指示抓取的度量指标是否应保持未更改。falseno
honor_timestampsbool指示是否应尊重抓取的时间戳。trueno
track_timestamps_stalenessbool指示是否跟踪抓取时间戳的陈旧度。falseno
paramsmap(list(string))与目标抓取相关的一系列查询参数。no
scrape_classic_histogramsbool是否抓取同时暴露为本地直方图的经典直方图。falseno
scrape_intervalduration抓取此抓取配置目标的频率。"60s"no
scrape_timeoutduration此配置下抓取目标的超时时间。"10s"no
scrape_protocolslist(string)在抓取期间按优先级顺序协商的协议。以下为可用值。["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"]no
metrics_pathstring从目标获取度量的 HTTP 资源路径。/metricsno
schemestring用于从目标获取度量的 URL 方案。no
body_size_limitint大于此字节数的未压缩响应体导致抓取失败。0 表示无限制。no
sample_limituint在度量指标重标签后,超过此许多样本会导致抓取失败no
target_limituint目标重标记后,超过此数量的目标会导致抓取失败。no
label_limituint在度量值重标记后,超过此数量的标签会导致抓取失败。no
label_name_length_limituint在度量值重标记后,此标签名称长度超过会导致抓取失败。no
label_value_length_limituint在度量值重标记后,此标签值长度超过会导致抓取失败。no
bearer_token_filestring包含用于认证的载体令牌的文件。no
bearer_token秘密用于认证的载体令牌。no
enable_http2bool是否支持请求中的HTTP2。trueno
follow_redirectsbool是否应跟随服务器返回的重定向。trueno
proxy_urlstring通过它发送请求的HTTP代理。no
no_proxystring逗号分隔的IP地址、CIDR表示法和域名列表,不包括在代理中。no
proxy_from_environmentbool使用环境变量指示的代理URL。falseno
proxy_connect_headermap(list(secret))在连接请求期间发送到代理的标头。no

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

scrape_protocols 控制抓取期间协商的协议首选顺序。以下值受支持

  • OpenMetricsText1.0.0
  • OpenMetricsText0.0.1
  • PrometheusProto
  • PrometheusText0.0.4

如果您正在使用现已弃用的 enable_protobuf_negotiation 参数,改用 scrape_protocols = ["PrometheusProto", "OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"]

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

track_timestamps_staleness 控制Prometheus是否跟踪抓取数据中显式时间戳存在的度量值的陈旧性。

  • “显式时间戳”是在 Prometheus度量暴露格式 中的可选时间戳。例如,此样本的时间戳为 1395066363000
    http_requests_total{method="post",code="200"} 1027 1395066363000
  • 如果将 track_timestamps_staleness 设置为 true,则在度量值不再存在或目标故障时,将插入陈旧性标记。
  • “陈旧性标记”只是一个带有特定NaN值的 sample ,Prometheus将其保留为内部使用。
  • 建议将 track_timestamps_staleness 设置为 true,如果写入度量值的数据库已启用 乱序样本摄入
  • 如果将track_timestamps_staleness设置为false,则只会在一个特定的时间段后标记具有显式的时间戳的样本为过时,在Prometheus中默认为5分钟。

以下块可以在prometheus.scrape的定义内使用。

层次结构描述必需
basic_authbasic_auth配置用于目标身份验证的基本认证。no
authorizationauthorization配置通用的目标授权。no
oauth2oauth2配置OAuth2以进行目标身份验证。no
oauth2 > tls_configtls_config配置通过OAuth2连接到目标的TLS设置。no
tls_configtls_config配置通过OAuth2连接到目标的TLS设置。no
clusteringclustering配置Alloy以集群模式运行时使用的组件。no

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

basic_auth块

名称类型描述默认值必需
password_filestring包含基本认证密码的文件。no
password秘密基本认证密码。no
usernamestring基本认证用户名。no

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

authorization块

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

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

oauth2块

名称类型描述默认值必需
client_idstringOAuth2客户端ID。no
client_secret_filestring包含OAuth2客户端密钥的文件。no
client_secret秘密OAuth2客户端密钥。no
endpoint_paramsmap(string)可选参数,用于追加到令牌URL。no
proxy_urlstring通过它发送请求的HTTP代理。no
no_proxystring逗号分隔的IP地址、CIDR表示法和域名列表,不包括在代理中。no
proxy_from_environmentbool使用环境变量指示的代理URL。falseno
proxy_connect_headermap(list(secret))在连接请求期间发送到代理的标头。no
scopeslist(string)用于身份验证的Scopes列表。no
token_urlstring用于获取令牌的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_pemstring用于验证服务器的CA PEM编码文本。no
ca_filestring用于验证服务器的CA证书。no
cert_pemstring客户端身份验证的证书PEM编码文本。no
cert_filestring客户端身份验证的证书文件。no
insecure_skip_verifybool禁用服务器证书的验证。no
key_filestring客户端身份验证的密钥文件。no
key_pem秘密客户端身份验证的密钥PEM编码文本。no
min_versionstring可接受的最小TLS版本。no
server_namestringServerName扩展,用于指示服务器的名称。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)

clustering块

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

当Alloy使用集群,并且enabled设置为true时,则此prometheus.scrape组件实例将同意参与集群以在所有集群节点之间分配抓取负载。

集群假设所有集群节点使用相同的配置文件运行,可以访问相同的服务发现API,且所有选择使用集群的prometheus.scrape组件,在整个抓取间隔过程中,都在收敛到targets参数中上游组件的相同目标集。

所有选择集群的prometheus.scrape组件实例使用目标标签和一致性哈希算法来确定集群节点间的每个目标的所有权。然后,每个节点只抓取它负责的子集,以便分散抓取负载。当一个节点加入或离开集群时,每个节点都会重新计算所有权,并继续使用新的目标集进行抓取。这比所有节点都需要重新分配的hashmod sharding表现更好,因为只有1/N的目标所有权被转移,但最终是一致的(而hashmod sharding是全一致的)。

如果Alloy没有以集群模式运行,则该块是无效操作,prometheus.scrape将抓取其参数中接收到的每个目标。

导出的字段

prometheus.scrape没有导出其他组件可以引用的字段。

组件健康状态

如果给定无效配置,prometheus.scrape只会被报告为不健康。

调试信息

prometheus.scrape在组件的调试端点上报告每个配置抓取作业的最后一次抓取状态。

调试指标

  • prometheus_fanout_latency(直方图):向直接和间接组件发送的写入延迟。
  • prometheus_scrape_targets_gauge(仪表):此组件配置抓取的目标数量。
  • prometheus_forwarded_samples_total(计数器):发送到下游组件的总样本数。

抓取行为

prometheus.scrape组件借用了Prometheus的抓取行为。Prometheus以及此组件,使用拉模型从给定的目标集抓取指标。每个抓取目标被定义为称为标签的键值对集合。目标集可以是静态的,或由服务发现组件如discovery.kubernetes定期提供的动态内容。特殊的标签__address__必须始终存在,对应于用于抓取请求的<host>:<port>

默认情况下,抓取作业尝试用HTTP抓取所有可用的目标的/metrics端点,抓取间隔为1分钟,抓取超时为10秒。指标路径、协议方案、抓取间隔和超时、查询参数以及其他任何设置都可以使用组件参数进行配置。

如果一个目标托管在由run命令指定的内存流量地址,prometheus.scrape将内存抓取指标,绕过网络。

抓取作业期望端点暴露的指标遵循OpenMetrics格式。然后,将所有指标传播到组件forward_to参数中列出的每个接收器。

来自目标并以后双下划线__开头的标签被视为内部的,在抓取之前会被移除。

prometheus.scrape组件认为抓取成功是指它以HTTP 200 OK状态码响应,并返回有效的指标主体。

如果抓取请求失败,组件的调试UI部分包含有关失败、最后一次成功的抓取以及最后用于抓取的标签的更详细的信息。

以下标签会自动注入到抓取的时间序列中,有助于确定抓取目标。

标签描述
job目标所属的配置作业名称。默认为完整组件名称。
instance抓取目标URL的__address__<host>:<port>

同样,这些记录爬取目标行为的指标也自动可用。

指标名称描述
up如果实例健康且可达,则为1;如果爬取失败,则为0。
scrape_duration_seconds爬取持续时间(秒)。
scrape_samples_scraped目标暴露的样本数量。
scrape_samples_post_metric_relabeling应用指标重命名后剩余的样本数量。
scrape_series_added此次爬取中新系列的大致数量。
scrape_timeout_seconds针对目标的配置爬取超时。通过使用 scrape_duration_seconds / scrape_timeout_seconds 可用于衡量目标超时的接近程度。
scrape_sample_limit针对目标的配置样本限制。通过使用 scrape_samples_post_metric_relabeling / (scrape_sample_limit > 0) 可用于衡量目标接近样本限制的接近程度。
scrape_body_size_bytes如果成功,则为最近一次爬取的响应的未压缩大小。如果由于超出了 body_size_limit 而失败,则报告 -1,其他爬取失败报告 0。

up 指标尤其有用,可用于监控和警报爬取作业的健康状况。如果爬取目标有任何问题,如不可达、连接爬取时超时或无法处理目标的样本,则将其设置为 0。当目标表现正常时,up 指标设置为 1

要启用通过 gRPC 对 Prometheus 原生直方图的爬取,应将 scrape_protocols 中的第一个协商协议指定为 PrometheusProto,例如

alloy
prometheus.scrape "prometheus" {
  ...
  scrape_protocols = ["PrometheusProto", "OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"]
}

scrape_classic_histograms 参数控制组件是否还应爬取原生直方图的“经典”直方图等效,如果存在。

示例

blackbox exporter 目标设置爬取作业

以下示例设置了具有某些属性(爬取端点、爬取间隔、查询参数)的爬取作业,并让它爬取两个 blackbox exporter 实例。暴露的指标发送到由其他组件定义的提供者列表中。

alloy
prometheus.scrape "blackbox_scraper" {
  targets = [
    {"__address__" = "blackbox-exporter:9115", "instance" = "one"},
    {"__address__" = "blackbox-exporter:9116", "instance" = "two"},
  ]

  forward_to = [prometheus.remote_write.grafanacloud.receiver, prometheus.remote_write.onprem.receiver]

  scrape_interval = "10s"
  params          = { "target" = ["grafana.com"], "module" = ["http_2xx"] }
  metrics_path    = "/probe"
}

以下是每10秒被爬取的端点

http://blackbox-exporter:9115/probe?target=grafana.com&module=http_2xx
http://blackbox-exporter:9116/probe?target=grafana.com&module=http_2xx

使用 Kubernetes API 服务器进行身份验证

以下示例显示了如何使用 Kubernetes API 服务器进行身份验证。

alloy
prometheus.scrape "kubelet" {
        scheme = "https"
        tls_config {
            server_name = "kubernetes"
            ca_file = "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
            insecure_skip_verify = false
        }
        bearer_token_file = "/var/run/secrets/kubernetes.io/serviceaccount/token"
}

技术细节

prometheus.scrape 支持 gzip 压缩。

以下特殊标签可以改变 prometheus.scrape 的行为

  • __address__ 是包含爬取目标 <host>:<port> 地址的标签名称。
  • __metrics_path__ 是包含爬取目标路径的标签名称。
  • __scheme__ 是包含爬取目标方案的标签名称(http、https)。
  • __scrape_interval__ 是包含爬取目标间隔的标签名称。
  • __scrape_timeout__ 是包含爬取目标超时的标签名称。
  • __param_<name> 是提供 URL 参数 <name>用的标签的名称,用于爬取目标。

爬取后添加的特殊标签

  • __name__ 是表示时序指标名称的标签名称。
  • job 是表示爬取时序的作业的标签名称。
  • instance 是用于实例标签的标签名称。

兼容组件

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

注意

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