prometheus.scrape
prometheus.scrape
为给定的 targets
配置一个 Prometheus 抓取作业。抓取的度量指标将被转发到 forward_to
中传入的接收器列表。
可以通过指定不同的标签来指定多个 prometheus.scrape
组件。
用法
prometheus.scrape "LABEL" {
targets = TARGET_LIST
forward_to = RECEIVER_LIST
}
参数
该组件配置并启动一个新的抓取作业来抓取所有输入目标。以下列出了可用于配置块的可使用参数。
抓取作业名称默认为组件的唯一标识符。
省略的字段将采用其默认值。如果在传递属性时存在冲突(例如,同时定义 BearerToken 和 BearerTokenFile 或同时配置基本身份验证和 OAuth2),则组件将报告错误。
以下参数被支持
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
targets | list(map(string)) | 要抓取的目标列表。 | yes | |
forward_to | list(MetricsReceiver) | 要发送抓取度量指标的接收器列表。 | yes | |
job_name | string | 如果不已设置,将使用此值作为作业标签。 | component name | no |
extra_metrics | bool | 是否为抓取目标生成额外度量指标。 | false | no |
enable_protobuf_negotiation | bool | 已弃用:使用 scrape_protocols 代替。 | false | no |
honor_labels | bool | 指示抓取的度量指标是否应保持未更改。 | false | no |
honor_timestamps | bool | 指示是否应尊重抓取的时间戳。 | true | no |
track_timestamps_staleness | bool | 指示是否跟踪抓取时间戳的陈旧度。 | false | no |
params | map(list(string)) | 与目标抓取相关的一系列查询参数。 | no | |
scrape_classic_histograms | bool | 是否抓取同时暴露为本地直方图的经典直方图。 | false | no |
scrape_interval | duration | 抓取此抓取配置目标的频率。 | "60s" | no |
scrape_timeout | duration | 此配置下抓取目标的超时时间。 | "10s" | no |
scrape_protocols | list(string) | 在抓取期间按优先级顺序协商的协议。以下为可用值。 | ["OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"] | no |
metrics_path | string | 从目标获取度量的 HTTP 资源路径。 | /metrics | no |
scheme | string | 用于从目标获取度量的 URL 方案。 | no | |
body_size_limit | int | 大于此字节数的未压缩响应体导致抓取失败。0 表示无限制。 | no | |
sample_limit | uint | 在度量指标重标签后,超过此许多样本会导致抓取失败 | no | |
target_limit | uint | 目标重标记后,超过此数量的目标会导致抓取失败。 | no | |
label_limit | uint | 在度量值重标记后,超过此数量的标签会导致抓取失败。 | no | |
label_name_length_limit | uint | 在度量值重标记后,此标签名称长度超过会导致抓取失败。 | no | |
label_value_length_limit | uint | 在度量值重标记后,此标签值长度超过会导致抓取失败。 | no | |
bearer_token_file | string | 包含用于认证的载体令牌的文件。 | no | |
bearer_token | 秘密 | 用于认证的载体令牌。 | no | |
enable_http2 | bool | 是否支持请求中的HTTP2。 | true | no |
follow_redirects | bool | 是否应跟随服务器返回的重定向。 | true | no |
proxy_url | string | 通过它发送请求的HTTP代理。 | no | |
no_proxy | string | 逗号分隔的IP地址、CIDR表示法和域名列表,不包括在代理中。 | no | |
proxy_from_environment | bool | 使用环境变量指示的代理URL。 | false | no |
proxy_connect_header | map(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_url
和 no_proxy
。
proxy_connect_header
只应配置如果已配置 proxy_url
或 proxy_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_auth | basic_auth | 配置用于目标身份验证的基本认证。 | no |
authorization | authorization | 配置通用的目标授权。 | no |
oauth2 | oauth2 | 配置OAuth2以进行目标身份验证。 | no |
oauth2 > tls_config | tls_config | 配置通过OAuth2连接到目标的TLS设置。 | no |
tls_config | tls_config | 配置通过OAuth2连接到目标的TLS设置。 | no |
clustering | clustering | 配置Alloy以集群模式运行时使用的组件。 | no |
符号 ">
" 表示更深层次的嵌套。例如,oauth2 > tls_config
指的是在oauth2
块内定义的tls_config
块。
basic_auth块
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
password_file | string | 包含基本认证密码的文件。 | no | |
password | 秘密 | 基本认证密码。 | no | |
username | string | 基本认证用户名。 | no |
password
和password_file
是互斥的,在basic_auth
块内只能提供一个。
authorization块
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
credentials_file | string | 包含密钥值的文件。 | no | |
credentials | 秘密 | 密钥值。 | no | |
type | string | 授权类型,例如,“Bearer”。 | no |
credentials
和credentials_file
是互斥的,在authorization
块内只能提供一个。
oauth2块
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
client_id | string | OAuth2客户端ID。 | no | |
client_secret_file | string | 包含OAuth2客户端密钥的文件。 | no | |
client_secret | 秘密 | OAuth2客户端密钥。 | no | |
endpoint_params | map(string) | 可选参数,用于追加到令牌URL。 | no | |
proxy_url | string | 通过它发送请求的HTTP代理。 | no | |
no_proxy | string | 逗号分隔的IP地址、CIDR表示法和域名列表,不包括在代理中。 | no | |
proxy_from_environment | bool | 使用环境变量指示的代理URL。 | false | no |
proxy_connect_header | map(list(secret)) | 在连接请求期间发送到代理的标头。 | no | |
scopes | list(string) | 用于身份验证的Scopes列表。 | no | |
token_url | string | 用于获取令牌的URL。 | no |
client_secret
和client_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_url
和 no_proxy
。
proxy_connect_header
只应配置如果已配置 proxy_url
或 proxy_from_environment
。
tls_config块
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
ca_pem | string | 用于验证服务器的CA PEM编码文本。 | no | |
ca_file | string | 用于验证服务器的CA证书。 | no | |
cert_pem | string | 客户端身份验证的证书PEM编码文本。 | no | |
cert_file | string | 客户端身份验证的证书文件。 | no | |
insecure_skip_verify | bool | 禁用服务器证书的验证。 | no | |
key_file | string | 客户端身份验证的密钥文件。 | no | |
key_pem | 秘密 | 客户端身份验证的密钥PEM编码文本。 | no | |
min_version | string | 可接受的最小TLS版本。 | no | |
server_name | string | ServerName扩展,用于指示服务器的名称。 | no |
以下参数对互斥,不能同时设置
ca_pem
和ca_file
cert_pem
和cert_file
key_pem
和key_file
配置客户端身份验证时,必须提供客户端证书(使用cert_pem
或cert_file
)和客户端密钥(使用key_pem
或key_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块
名称 | 类型 | 描述 | 默认值 | 必需 |
---|---|---|---|---|
enabled | bool | 启用与其他集群节点共享目标。 | false | yes |
当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
,例如
prometheus.scrape "prometheus" {
...
scrape_protocols = ["PrometheusProto", "OpenMetricsText1.0.0", "OpenMetricsText0.0.1", "PrometheusText0.0.4"]
}
scrape_classic_histograms
参数控制组件是否还应爬取原生直方图的“经典”直方图等效,如果存在。
示例
为 blackbox exporter
目标设置爬取作业
以下示例设置了具有某些属性(爬取端点、爬取间隔、查询参数)的爬取作业,并让它爬取两个 blackbox exporter 实例。暴露的指标发送到由其他组件定义的提供者列表中。
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 服务器进行身份验证。
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
可以接受以下组件的参数
- 导出 目标 的组件
- 导出 Prometheus
MetricsReceiver
的组件
注意
连接某些组件可能不合理,或者组件可能需要进一步的配置才能正确地建立连接。有关更多信息,请参阅相关文档。