菜单
开源

pyroscope.scrape

pyroscope.scrape 收集针对指定 HTTP targets 的性能配置文件 pprof

pyroscope.scrape 模拟了 prometheus.scrape 的爬取行为。就像 Prometheus 通过 HTTP 爬取指标一样,pyroscope.scrape 通过 HTTP 请求收集配置文件。

与 Prometheus 不同,后者通常只对一个目标进行一次 /metrics 端点爬取,pyroscope.scrape 可能需要对相同目标进行多次爬取。这是因为不同类型的配置文件会在不同的端点上被爬取。例如,“互斥锁”配置文件可能被爬取在 /debug/pprof/delta_mutex HTTP 端点上,而内存消耗可能被爬取在 /debug/pprof/allocs HTTP 端点上。

配置文件路径、协议方案、爬取间隔、爬取超时、查询参数以及其他设置均可以在 pyroscope.scrape 中进行配置。

如果爬取请求返回 HTTP 200 OK 状态码并返回了有效的 pprof 配置文件正文,则 pyroscope.scrape 组件将把这次爬取视为成功。

如果爬取请求失败,pyroscope.scrape调试 UI 将显示以下信息

  • 关于失败详情的信息。
  • 最后一次成功爬取的时间。
  • 用于爬取的最后一个标签。

可以通过 forward_to 参数将爬取的性能配置文件转发到 pyroscope.write 等组件。

可以通过为它们提供不同的标签来指定多个 pyroscope.scrape 组件。

用法

alloy
pyroscope.scrape "LABEL" {
  targets    = TARGET_LIST
  forward_to = RECEIVER_LIST
}

参数

pyroscope.scrape 将开始一个新爬取作业来爬取所有输入目标。在爬取多种配置文件类型时,可以对单个输入目标启动多个爬取作业。

以下列出了可用于配置此块的可用参数列表。

任何省略的参数将采用其默认值。如果传递了冲突的参数(例如,配置了 bearer_tokenbearer_token_file),则 pyroscope.scrape 将无法启动并报告错误。

以下参数被支持

名称类型描述默认必需
targetslist(map(string))要爬取的目标列表。
forward_tolist(ProfilesReceiver)要发送爬取配置文件的接收器列表。
job_namestring要覆盖作业标签的作业名称。组件名称没有
参数列表(字符串)一组查询参数,用于抓取目标。没有
抓取间隔持续时间抓取配置目标的频率。"15s"没有
抓取超时持续时间该配置的抓取目标的超时时间。必须大于 scrape_interval"18s"没有
delta_profiling_duration持续时间要抓取的 delta 剖析的持续时间。必须大于1秒。"14s"没有
方案string用于从目标获取度量的 URL 方案。"http"没有
bearer_token_filestring包含用于认证的承载令牌的文件。没有
bearer_token秘密用于认证的承载令牌。没有
enable_http2bool是否支持请求的 HTTP2。true没有
follow_redirectsbool是否应遵循服务器返回的重定向。true没有
proxy_urlstring通过代理发送请求的 HTTP 代理。没有
no_proxystring逗号分隔的 IP 地址、CIDR 表示法和域名列表,排除代理。没有
proxy_from_environmentbool使用环境变量指示的代理 URL。false没有
proxy_connect_headermap(list(secret))指定在连接请求期间发送到代理的头信息。没有

最多可以提供以下之一

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

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

job_name 参数

job_name 默认为组件的唯一标识符。

例如,pyroscope.scrape "local" {...}job_name 将是 "pyroscope.scrape.local"

targets 参数

可以通过 静态度量动态度量二者的组合 来提供 targets 列表。

特殊的 __address__ 标签 必须始终 存在,对应于用于抓取请求的 <host>:<port>

以双下划线 (__) 开头的标签被视为 内部,在抓取之前将被删除。

特殊的标签 service_name 是必需的,并且必须始终存在。如果没有指定,则 pyroscope.scrape 将尝试按以下顺序从以下来源推断它:

  1. __meta_kubernetes_pod_annotation_pyroscope_io_service_namepyroscope.io/service_name pod 标注。
  2. __meta_kubernetes_namespace__meta_kubernetes_pod_container_name
  3. __meta_docker_container_name
  4. __meta_dockerswarm_container_label_service_name__meta_dockerswarm_service_name

如果没有指定 service_name 且无法推断,则将其设置为 unspecified

以下标签将被自动注入到抓取的配置文件中,以便与抓取目标链接:

标签描述
"job"属于目标的 job_name
"instance"抓取目标 URL 的 __address__<host>:<port>
"service_name"推断出的 Pyroscope 服务名称。

scrape_interval 参数

描述必需
没有
没有
没有
没有
没有
没有
没有
没有
没有
没有
没有
没有
没有
没有
没有
没有
没有

名称类型描述默认必需
string没有
秘密基本认证密码。没有
用户名string基本认证用户名。没有

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

授权块

名称类型描述默认必需
凭证文件string包含秘密值的文件。没有
凭证秘密秘密值。没有
类型string授权类型,例如,“Bearer”。没有

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

OAuth2块

名称类型描述默认必需
客户端IDstringOAuth2客户端ID。没有
客户端密钥文件string包含OAuth2客户端密钥的文件。没有
客户端密钥秘密OAuth2客户端密钥。没有
末梢参数字符串映射附加到令牌URL的可选参数。没有
proxy_urlstring通过代理发送请求的 HTTP 代理。没有
no_proxystring逗号分隔的 IP 地址、CIDR 表示法和域名列表,排除代理。没有
proxy_from_environmentbool使用环境变量指示的代理 URL。false没有
proxy_connect_headermap(list(secret))指定在连接请求期间发送到代理的头信息。没有
作用域字符串列表需要认证的作用域列表。没有
令牌URLstring获取令牌的URL。没有

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

oauth2块还可以包含一个独立的tls_config子块。

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

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_pemstring用于服务器验证的CA PEM编码文本。没有
ca_filestring用于服务器验证的CA证书。没有
cert_pemstring客户端认证的证书PEM编码文本。没有
cert_filestring客户端认证的证书文件。没有
insecure_skip_verifybool禁用服务器证书的验证。没有
key_filestring客户端认证的密钥文件。没有
key_pem秘密客户端认证的密钥PEM编码文本。没有
min_versionstring可接受的最小TLS版本。没有
server_namestring用于指示服务器名称的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)

profiling_config块

当抓取目标时,profiling_config块配置了分析设置。

以下参数被支持

名称类型描述默认必需
path_prefixstring抓取目标时要使用的路径前缀。没有

profile.memory块

profile.memory块收集内存消耗分析。

以下参数被支持

名称类型描述默认必需
enabled布尔型启用此分析类型以进行抓取。true没有
pathstring目标上的分析类型路径。"/debug/pprof/allocs"没有
delta布尔型是否以差分形式抓取分析。false没有

有关delta参数的更多信息,请参阅delta参数部分。

profile.block块

profile.block块收集进程阻塞分析。

以下参数被支持

名称类型描述默认必需
enabled布尔型启用此分析类型以进行抓取。true没有
pathstring目标上的分析类型路径。"/debug/pprof/block"没有
delta布尔型是否以差分形式抓取分析。false没有

有关delta参数的更多信息,请参阅delta参数部分。

profile.goroutine块

profile.goroutine块收集goroutine数量分析。

以下参数被支持

名称类型描述默认必需
enabled布尔型启用此分析类型以进行抓取。true没有
pathstring目标上的分析类型路径。"/debug/pprof/goroutine"没有
delta布尔型是否以差分形式抓取分析。false没有

有关delta参数的更多信息,请参阅delta参数部分。

profile.mutex块

profile.mutex块收集互斥锁分析。

以下参数被支持

名称类型描述默认必需
enabled布尔型启用此分析类型以进行抓取。true没有
pathstring目标上的分析类型路径。"/debug/pprof/mutex"没有
delta布尔型是否以差分形式抓取分析。false没有

有关delta参数的更多信息,请参阅delta参数部分。

profile.process_cpu块

profile.process_cpu块收集进程的CPU消耗分析。

以下参数被支持

名称类型描述默认必需
enabled布尔型启用此分析类型以进行抓取。true没有
pathstring目标上的分析类型路径。"/debug/pprof/profile"没有
delta布尔型是否以差分形式抓取分析。true没有

有关delta参数的更多信息,请参阅delta参数部分。

profile.fgprof块

profile.fgprof块从fgprof端点收集分析。

以下参数被支持

名称类型描述默认必需
enabled布尔型启用此分析类型以进行抓取。false没有
pathstring目标上的分析类型路径。"/debug/fgprof"没有
delta布尔型是否以差分形式抓取分析。true没有

有关delta参数的更多信息,请参阅delta参数部分。

profile.godeltaprof_memory块

《profile.godeltaprof_memory》块从godeltaprof内存端点收集配置文件。增量计算是在目标上进行的。

以下参数被支持

名称类型描述默认必需
enabled布尔型启用此分析类型以进行抓取。false没有
pathstring目标上的分析类型路径。"/debug/pprof/delta_heap"没有

profile.godeltaprof_mutex块

《profile.godeltaprof_mutex》块从godeltaprof互斥端点收集配置文件。增量计算是在目标上进行的。

以下参数被支持

名称类型描述默认必需
enabled布尔型启用此分析类型以进行抓取。false没有
pathstring目标上的分析类型路径。"/debug/pprof/delta_mutex"没有

profile.godeltaprof_block块

《profile.godeltaprof_block》块从godeltaprof块端点收集配置文件。增量计算是在目标上进行的。

以下参数被支持

名称类型描述默认必需
enabled布尔型启用此分析类型以进行抓取。false没有
pathstring目标上的分析类型路径。"/debug/pprof/delta_block"没有

profile.custom块

《profile.custom》块允许从自定义端点收集配置文件。必须用标签指定块。

alloy
profile.custom "PROFILE_TYPE" {
  enabled = true
  path    = "PROFILE_PATH"
}

可以指定多个《profile.custom》块。分配给《profile.custom》块的标签在组件中必须是唯一的。

以下参数被支持

名称类型描述默认必需
enabled布尔型启用此分析类型以进行抓取。
pathstring目标上的分析类型路径。
delta布尔型是否以差分形式抓取分析。false没有

当《delta》参数为true时,将自动向请求添加一个seconds查询参数。使用的seconds将等于scrape_interval - 1

聚类块

名称类型描述默认必需
enabledbool启动其他集群节点间的目标共享。false

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

聚类导致将目标集局部过滤为每个节点的唯一子集,其中每个节点大致被分配相同数量的目标。如果集群状态发生变化,例如新节点加入,则将重新计算每个节点抓取的目标子集。

当启用聚类模式时,参与集群的所有Alloy实例必须使用相同的配置文件并且可以访问相同的服务发现API。

如果Alloy没有运行在集群模式中,则此块是空的。

常规配置

《delta》参数

当《delta》参数为false时,pprof HTTP查询将是瞬时的。

当《delta》参数为true

  • pprof HTTP查询将持续一段时间。
  • 将自动向HTTP请求添加一个seconds参数。
  • seconds查询参数的默认值是scrape_interval - 1。如果您设置了delta_profiling_duration,则将seconds分配给与delta_profiling_duration相同的值。但是,delta_profiling_duration不能大于scrape_interval。例如,如果将scrape_interval设置为"15s",则seconds默认为14s。如果您将delta_profiling_duration设置为16s,则scrape_interval必须设置为至少17s。如果HTTP端点是/debug/pprof/profile,则HTTP查询将变为/debug/pprof/profile?seconds=14

导出字段

《pyroscope.scrape》不会导出其他组件可以引用的字段。

组件健康状态

《pyroscope.scrape》只有在提供无效配置时才会报告为不健康。

调试信息

《pyroscope.scrape》在其组件的调试端点上报告每个配置抓取作业上次抓取的状态。

调试指标

  • 《pyroscope_fanout_latency》(直方图):向直接和间接组件发送的写入延迟。

示例

静态目标的默认端点

以下示例设置了一个对静态配置目标列表的抓取作业 - Alloy本身和Pyroscope。抓取的配置文件被发送到pyroscope.write,然后远程写入到Pyroscope数据库。

alloy
pyroscope.scrape "local" {
  targets = [
    {"__address__" = "localhost:4040", "service_name"="pyroscope"},
    {"__address__" = "localhost:12345", "service_name"="alloy"},
  ]

  forward_to = [pyroscope.write.local.receiver]
}

pyroscope.write "local" {
  endpoint {
    url = "http://pyroscope:4040"
  }
}

这些端点将每15秒抓取一次。

https://127.0.0.1:4040/debug/pprof/allocs
https://127.0.0.1:4040/debug/pprof/block
https://127.0.0.1:4040/debug/pprof/goroutine
https://127.0.0.1:4040/debug/pprof/mutex
https://127.0.0.1:4040/debug/pprof/profile?seconds=14

https://127.0.0.1:12345/debug/pprof/allocs
https://127.0.0.1:12345/debug/pprof/block
https://127.0.0.1:12345/debug/pprof/goroutine
https://127.0.0.1:12345/debug/pprof/mutex
https://127.0.0.1:12345/debug/pprof/profile?seconds=14

seconds=14 被添加到 /debug/pprof/profile 端点,因为

  • profile.process_cpu 块的 delta 参数默认值为 true
  • scrape_interval 默认为 "15s"

/debug/fgprof 端点将不会被抓取,因为 profile.fgprof 块的 enabled 参数默认为 false

动态目标的默认端点

alloy
discovery.http "dynamic_targets" {
  url = "https://example.com/scrape_targets"
  refresh_interval = "15s"
}

pyroscope.scrape "local" {
  targets = [discovery.http.dynamic_targets.targets]

  forward_to = [pyroscope.write.local.receiver]
}

pyroscope.write "local" {
  endpoint {
    url = "http://pyroscope:4040"
  }
}

静态和动态目标的默认端点

alloy
discovery.http "dynamic_targets" {
  url = "https://example.com/scrape_targets"
  refresh_interval = "15s"
}

pyroscope.scrape "local" {
  targets = concat([
    {"__address__" = "localhost:4040", "service_name"="pyroscope"},
    {"__address__" = "localhost:12345", "service_name"="alloy"},
  ], discovery.http.dynamic_targets.targets)

  forward_to = [pyroscope.write.local.receiver]
}

pyroscope.write "local" {
  endpoint {
    url = "http://pyroscope:4040"
  }
}

启用和禁用概要信息

alloy
pyroscope.scrape "local" {
  targets = [
    {"__address__" = "localhost:12345", "service_name"="alloy"},
  ]

  profiling_config {
    profile.fgprof {
      enabled = true
    }
    profile.block {
      enabled = false
    }
    profile.mutex {
      enabled = false
    }
  }

  forward_to = [pyroscope.write.local.receiver]
}

这些端点将每15秒抓取一次。

https://127.0.0.1:12345/debug/pprof/allocs
https://127.0.0.1:12345/debug/pprof/goroutine
https://127.0.0.1:12345/debug/pprof/profile?seconds=14
https://127.0.0.1:12345/debug/fgprof?seconds=14

由于它们已被显式禁用,以下端点将 不会 被抓取

https://127.0.0.1:12345/debug/pprof/block
https://127.0.0.1:12345/debug/pprof/mutex

兼容组件

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

注意

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