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
组件。
用法
pyroscope.scrape "LABEL" {
targets = TARGET_LIST
forward_to = RECEIVER_LIST
}
参数
pyroscope.scrape
将开始一个新爬取作业来爬取所有输入目标。在爬取多种配置文件类型时,可以对单个输入目标启动多个爬取作业。
以下列出了可用于配置此块的可用参数列表。
任何省略的参数将采用其默认值。如果传递了冲突的参数(例如,配置了 bearer_token
和 bearer_token_file
),则 pyroscope.scrape
将无法启动并报告错误。
以下参数被支持
名称 | 类型 | 描述 | 默认 | 必需 |
---|---|---|---|---|
targets | list(map(string)) | 要爬取的目标列表。 | 是 | |
forward_to | list(ProfilesReceiver) | 要发送爬取配置文件的接收器列表。 | 是 | |
job_name | string | 要覆盖作业标签的作业名称。 | 组件名称 | 没有 |
参数 | 列表(字符串) | 一组查询参数,用于抓取目标。 | 没有 | |
抓取间隔 | 持续时间 | 抓取配置目标的频率。 | "15s" | 没有 |
抓取超时 | 持续时间 | 该配置的抓取目标的超时时间。必须大于 scrape_interval 。 | "18s" | 没有 |
delta_profiling_duration | 持续时间 | 要抓取的 delta 剖析的持续时间。必须大于1秒。 | "14s" | 没有 |
方案 | string | 用于从目标获取度量的 URL 方案。 | "http" | 没有 |
bearer_token_file | string | 包含用于认证的承载令牌的文件。 | 没有 | |
bearer_token | 秘密 | 用于认证的承载令牌。 | 没有 | |
enable_http2 | bool | 是否支持请求的 HTTP2。 | true | 没有 |
follow_redirects | bool | 是否应遵循服务器返回的重定向。 | true | 没有 |
proxy_url | string | 通过代理发送请求的 HTTP 代理。 | 没有 | |
no_proxy | string | 逗号分隔的 IP 地址、CIDR 表示法和域名列表,排除代理。 | 没有 | |
proxy_from_environment | bool | 使用环境变量指示的代理 URL。 | false | 没有 |
proxy_connect_header | map(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_url
和 no_proxy
。
proxy_connect_header
仅在配置 proxy_url
或 proxy_from_environment
时配置。
job_name
参数
job_name
默认为组件的唯一标识符。
例如,pyroscope.scrape "local" {...}
的 job_name
将是 "pyroscope.scrape.local"
。
targets
参数
可以通过 静态度量、动态度量 或 二者的组合 来提供 targets
列表。
特殊的 __address__
标签 必须始终 存在,对应于用于抓取请求的 <host>:<port>
。
以双下划线 (__
) 开头的标签被视为 内部,在抓取之前将被删除。
特殊的标签 service_name
是必需的,并且必须始终存在。如果没有指定,则 pyroscope.scrape
将尝试按以下顺序从以下来源推断它:
__meta_kubernetes_pod_annotation_pyroscope_io_service_name
是pyroscope.io/service_name
pod 标注。__meta_kubernetes_namespace
和__meta_kubernetes_pod_container_name
__meta_docker_container_name
__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 | 基本认证用户名。 | 没有 |
password
和password_file
是互斥的,一个basic_auth
块内只能提供其中一个。
授权块
名称 | 类型 | 描述 | 默认 | 必需 |
---|---|---|---|---|
凭证文件 | string | 包含秘密值的文件。 | 没有 | |
凭证 | 秘密 | 秘密值。 | 没有 | |
类型 | string | 授权类型,例如,“Bearer”。 | 没有 |
credential
和credentials_file
是互斥的,一个authorization
块内只能提供其中一个。
OAuth2块
名称 | 类型 | 描述 | 默认 | 必需 |
---|---|---|---|---|
客户端ID | string | OAuth2客户端ID。 | 没有 | |
客户端密钥文件 | string | 包含OAuth2客户端密钥的文件。 | 没有 | |
客户端密钥 | 秘密 | OAuth2客户端密钥。 | 没有 | |
末梢参数 | 字符串映射 | 附加到令牌URL的可选参数。 | 没有 | |
proxy_url | string | 通过代理发送请求的 HTTP 代理。 | 没有 | |
no_proxy | string | 逗号分隔的 IP 地址、CIDR 表示法和域名列表,排除代理。 | 没有 | |
proxy_from_environment | bool | 使用环境变量指示的代理 URL。 | false | 没有 |
proxy_connect_header | map(list(secret)) | 指定在连接请求期间发送到代理的头信息。 | 没有 | |
作用域 | 字符串列表 | 需要认证的作用域列表。 | 没有 | |
令牌URL | string | 获取令牌的URL。 | 没有 |
client_secret
和client_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_url
和 no_proxy
。
proxy_connect_header
仅在配置 proxy_url
或 proxy_from_environment
时配置。
tls_config块
名称 | 类型 | 描述 | 默认 | 必需 |
---|---|---|---|---|
CA_pem | string | 用于服务器验证的CA PEM编码文本。 | 没有 | |
ca_file | string | 用于服务器验证的CA证书。 | 没有 | |
cert_pem | string | 客户端认证的证书PEM编码文本。 | 没有 | |
cert_file | string | 客户端认证的证书文件。 | 没有 | |
insecure_skip_verify | bool | 禁用服务器证书的验证。 | 没有 | |
key_file | string | 客户端认证的密钥文件。 | 没有 | |
key_pem | 秘密 | 客户端认证的密钥PEM编码文本。 | 没有 | |
min_version | string | 可接受的最小TLS版本。 | 没有 | |
server_name | string | 用于指示服务器名称的ServerName扩展。 | 没有 |
以下参数对是互斥的,不能同时设置
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)
profiling_config块
当抓取目标时,profiling_config
块配置了分析设置。
以下参数被支持
名称 | 类型 | 描述 | 默认 | 必需 |
---|---|---|---|---|
path_prefix | string | 抓取目标时要使用的路径前缀。 | 没有 |
profile.memory块
profile.memory
块收集内存消耗分析。
以下参数被支持
名称 | 类型 | 描述 | 默认 | 必需 |
---|---|---|---|---|
enabled | 布尔型 | 启用此分析类型以进行抓取。 | true | 没有 |
path | string | 目标上的分析类型路径。 | "/debug/pprof/allocs" | 没有 |
delta | 布尔型 | 是否以差分形式抓取分析。 | false | 没有 |
有关delta
参数的更多信息,请参阅delta参数部分。
profile.block块
profile.block
块收集进程阻塞分析。
以下参数被支持
名称 | 类型 | 描述 | 默认 | 必需 |
---|---|---|---|---|
enabled | 布尔型 | 启用此分析类型以进行抓取。 | true | 没有 |
path | string | 目标上的分析类型路径。 | "/debug/pprof/block" | 没有 |
delta | 布尔型 | 是否以差分形式抓取分析。 | false | 没有 |
有关delta
参数的更多信息,请参阅delta参数部分。
profile.goroutine块
profile.goroutine
块收集goroutine数量分析。
以下参数被支持
名称 | 类型 | 描述 | 默认 | 必需 |
---|---|---|---|---|
enabled | 布尔型 | 启用此分析类型以进行抓取。 | true | 没有 |
path | string | 目标上的分析类型路径。 | "/debug/pprof/goroutine" | 没有 |
delta | 布尔型 | 是否以差分形式抓取分析。 | false | 没有 |
有关delta
参数的更多信息,请参阅delta参数部分。
profile.mutex块
profile.mutex
块收集互斥锁分析。
以下参数被支持
名称 | 类型 | 描述 | 默认 | 必需 |
---|---|---|---|---|
enabled | 布尔型 | 启用此分析类型以进行抓取。 | true | 没有 |
path | string | 目标上的分析类型路径。 | "/debug/pprof/mutex" | 没有 |
delta | 布尔型 | 是否以差分形式抓取分析。 | false | 没有 |
有关delta
参数的更多信息,请参阅delta参数部分。
profile.process_cpu块
profile.process_cpu
块收集进程的CPU消耗分析。
以下参数被支持
名称 | 类型 | 描述 | 默认 | 必需 |
---|---|---|---|---|
enabled | 布尔型 | 启用此分析类型以进行抓取。 | true | 没有 |
path | string | 目标上的分析类型路径。 | "/debug/pprof/profile" | 没有 |
delta | 布尔型 | 是否以差分形式抓取分析。 | true | 没有 |
有关delta
参数的更多信息,请参阅delta参数部分。
profile.fgprof块
profile.fgprof
块从fgprof端点收集分析。
以下参数被支持
名称 | 类型 | 描述 | 默认 | 必需 |
---|---|---|---|---|
enabled | 布尔型 | 启用此分析类型以进行抓取。 | false | 没有 |
path | string | 目标上的分析类型路径。 | "/debug/fgprof" | 没有 |
delta | 布尔型 | 是否以差分形式抓取分析。 | true | 没有 |
有关delta
参数的更多信息,请参阅delta参数部分。
profile.godeltaprof_memory块
《profile.godeltaprof_memory》块从godeltaprof内存端点收集配置文件。增量计算是在目标上进行的。
以下参数被支持
名称 | 类型 | 描述 | 默认 | 必需 |
---|---|---|---|---|
enabled | 布尔型 | 启用此分析类型以进行抓取。 | false | 没有 |
path | string | 目标上的分析类型路径。 | "/debug/pprof/delta_heap" | 没有 |
profile.godeltaprof_mutex块
《profile.godeltaprof_mutex》块从godeltaprof互斥端点收集配置文件。增量计算是在目标上进行的。
以下参数被支持
名称 | 类型 | 描述 | 默认 | 必需 |
---|---|---|---|---|
enabled | 布尔型 | 启用此分析类型以进行抓取。 | false | 没有 |
path | string | 目标上的分析类型路径。 | "/debug/pprof/delta_mutex" | 没有 |
profile.godeltaprof_block块
《profile.godeltaprof_block》块从godeltaprof块端点收集配置文件。增量计算是在目标上进行的。
以下参数被支持
名称 | 类型 | 描述 | 默认 | 必需 |
---|---|---|---|---|
enabled | 布尔型 | 启用此分析类型以进行抓取。 | false | 没有 |
path | string | 目标上的分析类型路径。 | "/debug/pprof/delta_block" | 没有 |
profile.custom块
《profile.custom》块允许从自定义端点收集配置文件。必须用标签指定块。
profile.custom "PROFILE_TYPE" {
enabled = true
path = "PROFILE_PATH"
}
可以指定多个《profile.custom》块。分配给《profile.custom》块的标签在组件中必须是唯一的。
以下参数被支持
名称 | 类型 | 描述 | 默认 | 必需 |
---|---|---|---|---|
enabled | 布尔型 | 启用此分析类型以进行抓取。 | 是 | |
path | string | 目标上的分析类型路径。 | 是 | |
delta | 布尔型 | 是否以差分形式抓取分析。 | false | 没有 |
当《delta》参数为true
时,将自动向请求添加一个seconds
查询参数。使用的seconds
将等于scrape_interval - 1
。
聚类块
名称 | 类型 | 描述 | 默认 | 必需 |
---|---|---|---|---|
enabled | bool | 启动其他集群节点间的目标共享。 | 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数据库。
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
。
动态目标的默认端点
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"
}
}
静态和动态目标的默认端点
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"
}
}
启用和禁用概要信息
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
可以接受以下组件的参数
- 导出 目标 的组件
- 导出 Pyroscope
ProfilesReceiver
的组件
注意
连接某些组件可能不合理,或者组件可能需要进一步配置才能正确连接。请参阅相关文档以获取更多信息。