Prometheus

56142
下载
Prometheus 是一个开源的监控和告警系统,专注于时间序列数据的采集与存储。由 SoundCloud 开发,配备高级查询语言PromQL,便于数据挖掘与分析,并无缝对接多种可视化平台。

配置


Prometheus 是通过命令行参数和配置文件进行配置的。其中命令行参数用于配置不可变的系统参数(如存储位置、磁盘和内存中保留的数据量等),而配置文件则定义了与采集任务和实例以及要加载的规则文件(记录规则配置)相关的一切。

要查看所有可用的命令行参数,请运行./prometheus -h

Prometheus 可在运行时重新加载其配置。如果新配置不正确,则不会应用更改。
触发配置重新加载的方法是向 Prometheus 进程发送SIGHUP。或者,向-/reload端点发送 HTTP POST 请求(当启用了--web.enable-lifecycle参数时),这也会重新加载任何配置的规则文件。

配置文件

要指定要加载的配置文件,请使用 --config.file 标志。

文件采用 YAML 格式,由如下方案描述。
方括号表示参数可选。对于非列表参数,值设置为其指定的默认值。

通用占位符定义如下:

  • <boolean>:可以取值为truefalse的布尔值
  • <duration>:匹配正则表达式((([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?|0)的持续时间,例如1d1h30m5m10s
  • <filename>:当前工作目录中的有效路径
  • <float>:浮点数
  • <host>:由主机名或 IP 后跟可选端口号组成的有效字符串
  • <int>:整数值
  • <labelname>:匹配正则表达式[a-zA-Z_][a-zA-Z0-9_]*的字符串。源标签中的任何其他不支持的字符应转换为下划线。例如,标签app.kubernetes.io/name应写为 app_kubernetes_io_name
  • <labelvalue>:由 Unicode 字符组成的字符串
  • <path>:有效的 URL 路径
  • <scheme>:可以取值为httphttps的字符串
  • <secret>:像密码这样的常规字符串,秘文
  • <string>:常规字符串
  • <size>:以字节为单位的大小,例如512MB。需要单位。支持的单位:B、KB、MB、GB、TB、PB、EB。
  • <tmpl_string>:在使用前被模板展开的字符串

其他占位符单独指定。

一个有效的示例文件可以在这里找到。

全局配置指定了适用于所有其他配置上下文的参数。它们也充当其他配置部分的默认值。

global:
# 默认的抓取频率。
[ scrape_interval: <duration> | default = 1m ]
# 抓取请求超时的时间长度。
[ scrape_timeout: <duration> | default = 10s ]
# 与客户端协商抓取期间使用的协议。
# 支持的值(严格区分大小写):PrometheusProto、OpenMetricsText0.0.1、OpenMetricsText1.0.0、PrometheusText0.0.4。
# 当启用 native_histogram 特性标志时,默认值会变为 [PrometheusProto、OpenMetricsText1.0.0、OpenMetricsText0.0.1、PrometheusText0.0.4]。
[ scrape_protocols: [<string>, ...] | default = [OpenMetricsText1.0.0, OpenMetricsText0.0.1, PrometheusText0.0.4] ]
# 默认的规则评估频率。
[ evaluation_interval: <duration> | default = 1m ]
# 确保底层指标已接收时,针对特定组的规则评估时间戳的偏移量。
# 指标可用性延迟更有可能发生在 Prometheus 作为 remote write 目标运行时,但也可能在抓取异常时发生。
[ rule_query_offset: <duration> | default = 0s ]
# 与外部系统通信时要添加的标签(联邦化、远程存储、Alertmanager)。
external_labels:
[ <labelname>: <labelvalue> ... ]
# 记录 PromQL 查询的日志文件。
# 重新加载配置时会重新打开文件。
[ query_log_file: <string> ]
# 超过此大小的未压缩响应体将导致抓取失败。0 表示无限制。示例:100MB。
# 这是一个实验功能,此行为可能会在未来改变或删除。
[ body_size_limit: <size> | default = 0 ]
# 每个抓取允许接受的样本数限制。
# 在指标重标签(relabel)后,如果样本超过这个数量,整个抓取将被视为失败。0 表示无限制。
[ sample_limit: <int> | default = 0 ]
# 每个抓取允许接受的样本标签数量限制。
# 在指标重标签后,如果标签超过这个数量,整个抓取将被视为失败。0 表示无限制。
[ label_limit: <int> | default = 0 ]
# 每个抓取允许接受的标签名称长度限制。
# 在指标重标签后,如果标签名称超过这个长度,整个抓取将被视为失败。0 表示无限制。
[ label_name_length_limit: <int> | default = 0 ]
# 每个抓取允许接受的标签值长度限制。
# 在指标重标签后,如果标签值超过这个长度,整个抓取将被视为失败。0 表示无限制。
[ label_value_length_limit: <int> | default = 0 ]
# 每个抓取配置允许接受的唯一 Target 数量限制。
# 在 Target 重标签后,如果 Target 超过这个数量,Prometheus 将标记这些 Target 为失败而不进行抓取。
# 0 表示无限制。这是一个实验功能,此行为可能在未来改变。
[ target_limit: <int> | default = 0 ]
# 每个抓取配置允许保留的被重标签丢弃的 Target 数量限制。
# 0 表示无限制。
[ keep_dropped_targets: <int> | default = 0 ]
# 指定指标和标签名称验证方案。要么为空或“legacy”(字母、数字、冒号和下划线);或者“utf8”(全面的 UTF-8 支持)。
[ metric_name_validation_scheme <string> | default "legacy" ]
runtime:
# 配置 Go 垃圾收集器 GOGC 参数
# 见:https://tip.golang.org/doc/gc-guide#GOGC
# 降低此数字会增加 CPU 使用率。
[ gogc: <int> | default = 75 ]
# 规则文件指定一组通配符。从匹配的所有文件中读取规则和告警。
rule_files:
[ - <filepath_glob> ... ]
# 抓取配置文件指定一组通配符。从匹配的所有文件中读取抓取配置并附加到抓取配置列表。
scrape_config_files:
[ - <filepath_glob> ... ]
# 抓取配置列表。
scrape_configs:
[ - <scrape_config> ... ]
# 告警系统指定与 Alertmanager 相关的设置。
alerting:
alert_relabel_configs:
[ - <relabel_config> ... ]
alertmanagers:
[ - <alertmanager_config> ... ]
# 与remote write功能相关的设置。
remote_write:
[ - <remote_write> ... ]
# 与 OTLP 接收器功能相关的设置。
otlp:
[ promote_resource_attributes: [<string>, ...] | default = [ ] ]
# 与remote read功能相关的设置。
remote_read:
[ - <remote_read> ... ]
# 运行时可重新加载的存储相关设置。
storage:
[ tsdb: <tsdb> ]
[ exemplars: <exemplars> ]
# 配置追踪。
tracing:
[ <tracing_config> ]

<scrape_config>

scrape_config部分定义了要抓取的 Target 集合以及描述如何抓取它们的参数。在一般情况下,一个抓取配置指定单个采集任务。然而,在高级配置中,这可能会有所不同。

Target 可以通过static_configs参数静态配置,或者通过服务发现机制动态发现。

此外,relabel_configs允许在抓取之前对任何 Target 及其标签进行高级的修改行为(重标签)。

# 默认分配给由抓取的指标的采集任务名称。
job_name: <job_name>
# 指定从此采集任务抓取 Target 的频率。
[ scrape_interval: <duration> | default = <global_config.scrape_interval> ]
# 每次抓取的超时时间。
[ scrape_timeout: <duration> | default = <global_config.scrape_timeout> ]
# 在与客户端协商抓取时使用的协议类型。
# 支持的值(区分大小写):PrometheusProto, OpenMetricsText0.0.1, OpenMetricsText1.0.0, PrometheusText0.0.4。
[ scrape_protocols: [<string>, ...] | default = <global_config.scrape_protocols> ]
# 是否抓取也是作为本地 Histogram 暴露的经典 Histogram(如果没有启用 --enable-feature=native-histograms,则没有效果)。
[ scrape_classic_histograms: <boolean> | default = false ]
# Target 上可获取指标的 HTTP 资源路径。
[ metrics_path: <path> | default = /metrics ]
# `honor_labels` 控制 Prometheus 如何处理抓取数据中已存在的标签与 Prometheus 附加到服务器端的标签(“job”和“instance”标签、手动配置的 Target 标签和由服务发现实现生成的标签)之间的冲突。
# 如果 `honor_labels` 设置为 "true",则通过保留抓取数据中的标签值并忽略冲突的服务器端标签来解决标签冲突。
# 如果 `honor_labels` 设置为 "false",则通过重命名冲突的标签在抓取数据中为 "exported_<original-label>"(例如 "exported_instance"、"exported_job")并然后附加服务器端标签来解决冲突。
# 将 `honor_labels` 设置为 "true" 对于诸如联邦化和抓取 Pushgateway 这样的用例非常有用,在这些用例中,所有指定在 Target 上的标签都应被保留。
# 注意任何全局配置的 "external_labels" 不受此设置的影响。在与外部系统通信时,它们总是应用于时间序列不具有给定标签时,并且在其他情况下被忽略。
[ honor_labels: <boolean> | default = false ]
# `honor_timestamps` 控制 Prometheus 是否尊重抓取数据中存在的时间戳。
# 如果 `honor_timestamps` 设置为 "true",则使用 Target 提供的指标的时间戳。
# 如果 `honor_timestamps` 设置为 "false",则忽略 Target 提供的指标的时间戳。
[ honor_timestamps: <boolean> | default = true ]
# `track_timestamps_staleness` 控制 Prometheus 是否跟踪存在明确时间戳的指标的过时性。
# 如果 `track_timestamps_staleness` 设置为 "true",当指标不再存在或 Target 掉线时,将在 TSDB 中插入过时标记。
[ track_timestamps_staleness: <boolean> | default = false ]
# 配置请求使用的协议方案。
[ scheme: <scheme> | default = http ]
# 可选的 HTTP URL 参数。
params:
[ <string>: [<string>, ...] ]
# 如果 `enable_compression` 设置为 "false",Prometheus 将从抓取的 Target 请求未压缩的响应。
[ enable_compression: <boolean> | default = true ]
# 每次抓取请求上的 `Authorization` 请求头,使用配置的用户名和密码。
# `password` 和 `password_file` 是互斥的。
basic_auth:
[ username: <string> ]
[ password: <secret> ]
[ password_file: <string> ]
# 每次抓取请求上的 `Authorization` 请求头,使用配置的凭据。
authorization:
# 设置请求的认证类型。
[ type: <string> | default: Bearer ]
# 设置请求的凭据。它与 `credentials_file` 相互排斥。
[ credentials: <secret> ]
# 从配置的文件中读取请求的凭据。它与 `credentials` 相互排斥。
[ credentials_file: <filename> ]
# 可选的 OAuth 2.0 配置。
# 不能同时与 `basic_auth` 或 `authorization` 使用。
oauth2:
[ <oauth2> ]
# 配置抓取请求是否遵循 HTTP 3xx 重定向。
[ follow_redirects: <boolean> | default = true ]
# 是否启用 HTTP2。
[ enable_http2: <boolean> | default: true ]
# 配置抓取请求的 TLS 设置。
tls_config:
[ <tls_config> ]
# 可选的代理 URL。
[ proxy_url: <string> ]
# 包含 IP、CIDR 表示法、域名的逗号分隔字符串,这些应该从代理中排除。IP 和域名可以包含端口号。
[ no_proxy: <string> ]
# 使用环境变量指示的代理 URL(HTTP_PROXY、https_proxy、HTTPs_PROXY、https_proxy 和 no_proxy)
[ proxy_from_environment: <boolean> | default: false ]
# 指定在 CONNECT 请求期间发送给代理的自定义头部。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]
# 与每个请求一起发送的自定义 HTTP 头部。
# Prometheus 自己设置的头部无法被覆盖。
http_headers:
# 头部名称。
[ <string>:
# 头部值。
[ values: [<string>, ...] ]
# 隐藏在配置页面中的头部值。
[ secrets: [<secret>, ...] ]
# 从指定的文件读取头部值的文件。
[ files: [<string>, ...] ] ]
# Azure 服务发现配置列表。
azure_sd_configs:
[ - <azure_sd_config> ... ]
# Consul 服务发现配置列表。
consul_sd_configs:
[ - <consul_sd_config> ... ]
# DigitalOcean 服务发现配置列表。
digitalocean_sd_configs:
[ - <digitalocean_sd_config> ... ]
# Docker 服务发现配置列表。
docker_sd_configs:
[ - <docker_sd_config> ... ]
# Docker Swarm 服务发现配置列表。
dockerswarm_sd_configs:
[ - <dockerswarm_sd_config> ... ]
# DNS 服务发现配置列表。
dns_sd_configs:
[ - <dns_sd_config> ... ]
# EC2 服务发现配置列表。
ec2_sd_configs:
[ - <ec2_sd_config> ... ]
# Eureka 服务发现配置列表。
eureka_sd_configs:
[ - <eureka_sd_config> ... ]
# 文件服务发现配置列表。
file_sd_configs:
[ - <file_sd_config> ... ]
# GCE 服务发现配置列表。
gce_sd_configs:
[ - <gce_sd_config> ... ]
# Hetzner 服务发现配置列表。
hetzner_sd_configs:
[ - <hetzner_sd_config> ... ]
# HTTP 服务发现配置列表。
http_sd_configs:
[ - <http_sd_config> ... ]
# IONOS 服务发现配置列表。
ionos_sd_configs:
[ - <ionos_sd_config> ... ]
# Kubernetes 服务发现配置列表。
kubernetes_sd_configs:
[ - <kubernetes_sd_config> ... ]
# Kuma 服务发现配置列表。
kuma_sd_configs:
[ - <kuma_sd_config> ... ]
# Lightsail 服务发现配置列表。
lightsail_sd_configs:
[ - <lightsail_sd_config> ... ]
# Linode 服务发现配置列表。
linode_sd_configs:
[ - <linode_sd_config> ... ]
# Marathon 服务发现配置列表。
marathon_sd_configs:
[ - <marathon_sd_config> ... ]
# 空气bnb的Nerve 服务发现配置列表。
nerve_sd_configs:
[ - <nerve_sd_config> ... ]
# Nomad 服务发现配置列表。
nomad_sd_configs:
[ - <nomad_sd_config> ... ]
# OpenStack 服务发现配置列表。
openstack_sd_configs:
[ - <openstack_sd_config> ... ]
# OVHcloud 服务发现配置列表。
ovhcloud_sd_configs:
[ - <ovhcloud_sd_config> ... ]
# PuppetDB 服务发现配置列表。
puppetdb_sd_configs:
[ - <puppetdb_sd_config> ... ]
# Scaleway 服务发现配置列表。
scaleway_sd_configs:
[ - <scaleway_sd_config> ... ]
# Zookeeper Serverset 服务发现配置列表。
serverset_sd_configs:
[ - <serverset_sd_config> ... ]
# Triton 服务发现配置列表。
triton_sd_configs:
[ - <triton_sd_config> ... ]
# Uyuni 服务发现配置列表。
uyuni_sd_configs:
[ - <uyuni_sd_configs> ... ]

<tls_config>

tls_config可以配置 TLS 连接。

# 验证 API 服务器证书的 CA 证书。最多只能指定 ca 或 ca_file 中的一个。
[ ca: <string> ]
[ ca_file: <filename> ]
# 客户端认证到服务器的证书和密钥。
# 最多只能指定 cert 或 cert_file 中的一个。
# 最多只能指定 key 或 key_file 中的一个。
[ cert: <string> ]
[ cert_file: <filename> ]
[ key: <secret> ]
[ key_file: <filename> ]
# 用于指示服务器名称的 ServerName 扩展。
# https://tools.ietf.org/html/rfc4366#section-3.1
[ server_name: <string> ]
# 禁用对服务器证书的验证。
[ insecure_skip_verify: <boolean> ]
# 可接受的最低 TLS 版本。可接受的值:TLS10(TLS 1.0)、TLS11(TLS 1.1)、TLS12(TLS 1.2)、TLS13(TLS 1.3)。
# 如果未设置,则 Prometheus 将使用 Go 默认的最小版本,即 TLS 1.2。
# 见 https://pkg.go.dev/crypto/tls#Config 中的 MinVersion。
[ min_version: <string> ]
# 可接受的最高 TLS 版本。可接受的值:TLS10(TLS 1.0)、TLS11(TLS 1.1)、TLS12(TLS 1.2)、TLS13(TLS 1.3)。
# 如果未设置,则 Prometheus 将使用 Go 默认的最大版本,即 TLS 1.3。
# 见 https://pkg.go.dev/crypto/tls#Config 中的 MaxVersion。
[ max_version: <string> ]

<oauth2>

使用客户端凭据授权类型的 OAuth 2.0 认证。
Prometheus 通过给定的客户端访问和密钥从指定的端点获取访问令牌。

client_id: <string>
[ client_secret: <secret> ]
# 从文件中读取客户端密钥。与 `client_secret` 相互排斥。
[ client_secret_file: <filename> ]
# 令牌请求的范围。
scopes:
[ - <string> ... ]
# 获取令牌的 URL。
token_url: <string>
# 令牌请求 URL 的可选参数。
endpoint_params:
[ <string>: <string> ... ]
# 配置令牌请求的 TLS 设置。
tls_config:
[ <tls_config> ]
# 可选代理 URL。
[ proxy_url: <string> ]
# 包含 IP、CIDR 表示法、域名的逗号分隔字符串,这些应从代理中排除。IP 和域名可以包含端口号。
[ no_proxy: <string> ]
# 使用环境变量(HTTP_PROXY、https_proxy、HTTPs_PROXY、https_proxy 和 no_proxy)指示的代理 URL。
[ proxy_from_environment: <boolean> | default: false ]
# 在 CONNECT 请求期间向代理发送的自定义头部。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]

<azure_sd_config>

Azure SD 配置允许从 Azure 虚拟机检索抓取目标。

重标签期间,以下元标签可用于 Target:

  • __meta_azure_machine_id:主机 ID
  • __meta_azure_machine_location:运行主机的位置
  • __meta_azure_machine_name:主机名称
  • __meta_azure_machine_computer_name:主机计算机名称
  • __meta_azure_machine_os_type:主机操作系统
  • __meta_azure_machine_private_ip:主机的私有 IP
  • __meta_azure_machine_public_ip:如果存在,主机的公有 IP
  • __meta_azure_machine_resource_group:主机的资源组
  • __meta_azure_machine_tag_<tagname>:主机的每个标签值
  • __meta_azure_machine_scale_set:主机所在的规模集名称(仅当你使用规模集时设置)
  • __meta_azure_machine_size:主机大小
  • __meta_azure_subscription_id:订阅 ID
  • __meta_azure_tenant_id:租户 ID

以下为 Azure 发现的配置选项:

# 访问 Azure API 的信息。
# Azure 环境。
[ environment: <string> | default = AzurePublicCloud ]
# 认证方法,要么是 OAuth、ManagedIdentity 或 SDK。
# 有关详细信息,请参阅 https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/overview
# SDK 认证方法默认使用环境变量。
# 有关详细信息,请参阅 https://learn.microsoft.com/en-us/azure/developer/go/azure-sdk-authentication
[ authentication_method: <string> | default = OAuth]
# 订阅 ID。始终需要。
subscription_id: <string>
# 可选租户 ID。仅当使用认证方法 OAuth 时需要。
[ tenant_id: <string> ]
# 可选客户端 ID。仅当使用认证方法 OAuth 时需要。
[ client_id: <string> ]
# 可选客户端密钥。仅当使用认证方法 OAuth 时需要。
[ client_secret: <secret> ]
# 可选资源组名称。限制发现到此资源组。
[ resource_group: <string> ]
# 重新读取实例列表的刷新间隔。
[ refresh_interval: <duration> | default = 300s ]
# 从该端口抓取指标。如果使用公有 IP 地址,则必须在重写规则中指定此端口。
[ port: <int> | default = 80 ]
# 认证信息,用于认证到 Azure API。
# 注意,`basic_auth`、`authorization` 和 `oauth2` 选项相互排斥。
# `password` 和 `password_file` 也相互排斥。
# 可选的 HTTP 基本认证信息,Azure 目前不支持。
basic_auth:
[ username: <string> ]
[ password: <secret> ]
[ password_file: <string> ]
# 可选的 `Authorization` 头部配置,Azure 目前不支持。
authorization:
# 设置认证类型。
[ type: <string> | default: Bearer ]
# 设置凭据。与 `credentials_file` 相互排斥。
[ credentials: <secret> ]
# 设置凭据来自配置文件中的凭据。
# 与 `credentials` 相互排斥。
[ credentials_file: <filename> ]
# 可选的 OAuth 2.0 配置,Azure 目前不支持。
oauth2:
[ <oauth2> ]
# 可选的代理 URL。
[ proxy_url: <string> ]
# 包含 IP、CIDR 表示法、域名的逗号分隔字符串,这些应从代理中排除。IP 和域名可以包含端口号。
[ no_proxy: <string> ]
# 使用环境变量(HTTP_PROXY、https_proxy、HTTPs_PROXY、https_proxy 和 no_proxy)指示的代理 URL。
[ proxy_from_environment: <boolean> | default: false ]
# 在 CONNECT 请求期间向代理发送的自定义头部。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]
# 配置是否遵循 HTTP 3xx 重定向。
[ follow_redirects: <boolean> | default = true ]
# 是否启用 HTTP2。
[ enable_http2: <boolean> | default: true ]
# TLS 配置。
tls_config:
[ <tls_config> ]

<consul_sd_config>

Consul SD 配置允许从 Consul 目录 API 检索抓取 Target。

在抓取 Target 时可用于重标签的 Target 元标签有:

  • __meta_consul_address:Target 的地址
  • __meta_consul_dc:Target 的数据中心名称
  • __meta_consul_health:服务的健康状态
  • __meta_consul_partition:服务注册的服务管理分区名称
  • __meta_consul_metadata_<key>:Target 的每个节点元数据键值对
  • __meta_consul_node:定义为 Target 的节点名称
  • __meta_consul_service_address:Target 的服务地址
  • __meta_consul_service_id:Target 的服务ID
  • __meta_consul_service_metadata_<key>:Target 的每个服务元数据键值对
  • __meta_consul_service_port:Target 的服务端口
  • __meta_consul_service:Target 所属的服务名称
  • __meta_consul_tagged_address_<key>:Target 的每个节点标记地址键值对
  • __meta_consul_tags:Target 的标签列表,使用标签分隔符连接
# 访问 Consul API 的信息。应按照 Consul 文档要求进行定义。
[ server: <host> | default = "localhost:8500" ]
# 当 Consul 位于 API 网关(反向代理)后时,用于 URI 的前缀。
[ path_prefix: <string> ]
[ token: <secret> ]
[ datacenter: <string> ]
# 只有在 Consul 企业版中支持命名空间。
[ namespace: <string> ]
# 只有在 Consul 企业版中支持管理员分区。
[ partition: <string> ]
[ scheme: <string> | default = "http" ]
# 用户名和密码字段已被废弃,建议使用 basic_auth 配置。
[ username: <string> ]
[ password: <secret> ]
# 从服务中获取的抓取 Target 列表。如果省略,则会抓取所有服务。
services:
[ - <string> ]
# 查看有关可能使用的过滤器的更多信息,请参阅https://www.consul.io/api/catalog.html#list-nodes-for-service
# 用于过滤给定服务的节点的可选标签列表。服务必须包含列表中的所有标签。
tags:
[ - <string> ]
# 用于过滤给定服务的节点元数据键/值对。
[ node_meta:
[ <string>: <string> ... ] ]
# Consul 标签之间的连接标签字符串。
[ tag_separator: <string> | default = "," ]
# 允许过期的 Consul 结果(参见https://www.consul.io/api/features/consistency.html)。这将减少对 Consul 的负载。
[ allow_stale: <boolean> | default = true ]
# 提供名称刷新的时间间隔。在大型设置中,增加此值可能是明智的,因为目录会不断改变。
[ refresh_interval: <duration> | default = 30s ]
# 用于与 Consul 服务器认证的认证信息。请注意,`basic_auth`、`authorization`和`oauth2`选项互斥。
# `password`和`password_file`互斥。
# 选项的 HTTP 基本认证信息。
basic_auth:
[ username: <string> ]
[ password: <secret> ]
[ password_file: <string> ]
# `Authorization` 头配置的可选配置。
authorization:
# 设置认证类型。
[ type: <string> | default: Bearer ]
# 设置凭证。它与`credentials_file`互斥。
[ credentials: <secret> ]
# 将凭证设置为从配置的文件中读取的凭证。
# 它与`credentials`互斥。
[ credentials_file: <filename> ]
# 选项的 OAuth 2.0 配置。
oauth2:
[ <oauth2> ]
# 选项的代理URL。
[ proxy_url: <string> ]
# 包含 IP、CIDR 表示法、域名的逗号分隔字符串,这些应从代理中排除。IP 和域名可以包含端口号。
[ no_proxy: <string> ]
# 使用环境变量(HTTP_PROXY、https_proxy、HTTPs_PROXY、https_proxy和no_proxy)指示的代理 URL。
[ proxy_from_environment: <boolean> | default: false ]
# 指定 CONNECT 请求期间要发送到代理的请求头。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]
# 配置 HTTP 请求是否遵循 HTTP 3xx 重定向。
[ follow_redirects: <boolean> | default = true ]
# 是否启用 HTTP2。
[ enable_http2: <boolean> | default: true ]
# TLS 配置。
tls_config:
[ <tls_config> ]

请注意,用于抓取 Target 的IP号和端口拼接为<__meta_consul_address>:<__meta_consul_service_port>。然而,在某些 Consul 设置中,相关地址在__meta_consul_service_address中。在这种情况下,你可以使用重标签功能来替换特殊__address__标签。

重标签是基于任意标签筛选服务或节点更好及更强大的方式。对于拥有数千个服务的用户来说,直接使用 Consul API 可能更有效率(当前仅支持通过节点元数据和单个标签来过滤节点)。

<digitalocean_sd_config>

在使用 DigitalOcean SD 配置时,可以从 Droplets API 获取抓取 Target 。默认情况下,此服务发现会使用公共 IPv4 地址,但可以通过重标签进行更改,如 Prometheus digitalocean-sd 配置文件中所示。

以下是在抓取 Target 上可用的元标签(在 relabel_config 部分):

  • __meta_digitalocean_droplet_id:droplet 的 ID
  • __meta_digitalocean_droplet_name:droplet 的名称
  • __meta_digitalocean_image:droplet 的镜像的 slug 值
  • __meta_digitalocean_image_name:droplet 的镜像的显示名称
  • __meta_digitalocean_private_ipv4:droplet 的私有 IPv4
  • __meta_digitalocean_public_ipv4:droplet 的公共 IPv4
  • __meta_digitalocean_public_ipv6:droplet 的公共 IPv6
  • __meta_digitalocean_region:droplet 的区域
  • __meta_digitalocean_size:droplet 的大小
  • __meta_digitalocean_status:droplet 的状态
  • __meta_digitalocean_features:droplet 的特性的逗号分隔列表
  • __meta_digitalocean_tags:droplet 的标签的逗号分隔列表
  • __meta_digitalocean_vpc:droplet 的 VPC 的 ID
# 用于与 API 服务器进行身份验证的信息。
# 注意,`basic_auth` 和 `authorization`选项是互斥的。
# `password` 和 `password_file`也是互斥的。
# 可选的 HTTP 基本认证信息,目前不支持 DigitalOcean。
basic_auth:
[ username: <string> ]
[ password: <secret> ]
[ password_file: <string> ]
# 可选的`Authorization`头配置。
authorization:
# 设置认证类型。
[ type: <string> | default: Bearer ]
# 设置凭证。与`credentials_file`互斥。
[ credentials: <secret> ]
# 将凭证设置为从配置的文件中读取的凭证。与`credentials`互斥。
[ credentials_file: <filename> ]
# 可选的 OAuth 2.0 配置。
# 不能同时使用basic_auth或authorization。
oauth2:
[ <oauth2> ]
# 可选的代理URL。
[ proxy_url: <string> ]
# 可以包含 IP、CIDR 表示法、域名的逗号分隔字符串,这些应该从代理中排除。IP和域名可以包含端口号。
[ no_proxy: <string> ]
# 使用环境变量(HTTP_PROXY, https_proxy, HTTPs_PROXY, https_proxy和no_proxy)指示的代理 URL。
[ proxy_from_environment: <boolean> | 默认值: false ]
# 指定在 CONNECT 请求期间发送给代理的头部。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]
# 配置 HTTP 请求是否遵循 HTTP 3xx 重定向。
[ follow_redirects: <boolean> | default = true ]
# 是否启用 HTTP2。
[ enable_http2: <boolean> | default: true ]
# TLS 配置。
tls_config:
[ <tls_config> ]
# 从该端口抓取指标值。
[ port: <integer> | default = 80 ]
# 刷新 droplets 的时间间隔。
[ refresh_interval: <duration> | default = 60s ]

<docker_sd_config>

Docker SD 配置允许从 Docker 引擎主机检索抓取 Target。

此 SD 会发现“容器”,并为每个容器暴露的网络 IP 和端口创建 Target。

可用的元标签:

  • __meta_docker_container_id: 容器的 ID
  • __meta_docker_container_name: 容器的名称
  • __meta_docker_container_network_mode: 容器的网络模式
  • __meta_docker_container_label_<labelname>: 容器的每个标签,任何不支持的字符转换为下划线
  • __meta_docker_network_id: 网络的 ID
  • __meta_docker_network_name: 网络的名称
  • __meta_docker_network_ingress: 网络是否为 Ingress
  • __meta_docker_network_internal: 网络是否为内部
  • __meta_docker_network_label_<labelname>: 网络的每个标签,任何不支持的字符转换为下划线
  • __meta_docker_network_scope: 网络的范围
  • __meta_docker_network_ip: 容器在此网络中的 IP
  • __meta_docker_port_private: 容器上的端口
  • __meta_docker_port_public: 如果存在端口映射,则为外部端口
  • __meta_docker_port_public_ip: 如果存在端口映射,则为公共 IP

以下为 Docker 发现的配置选项:

# Docker 守护进程的地址。
host: <string>
# 可选代理URL。
[ proxy_url: <string> ]
# 以逗号分隔的字符串,可以包含 IP、CIDR 表示法、域名,这些都应该排除在代理之外。IP 和域名可以
# 包含端口号。
[ no_proxy: <string> ]
# 根据环境变量(HTTP_PROXY, https_proxy, HTTPs_PROXY, https_proxy 和 no_proxy)使用指定的代理 URL。
[ proxy_from_environment: <boolean> | 默认值:false ]
# 在 CONNECT 请求期间向代理发送的头部。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]
# TLS 配置。
tls_config:
[ <tls_config> ]
# 当`role`为节点时,以及对于没有发布端口的发现的任务和服务,从哪个端口抓取指标。
[ port: <int> | 默认值 = 80 ]
# 如果容器处于主机网络模式时使用的主机。
[ host_networking_host: <string> | 默认值 = "localhost" ]
# 按网络名称升序排序所有非空网络,并获取如果容器定义了多个网络,则获取的第一个网络,从而避免收集重复的 Target。
[ match_first_network: <boolean> | 默认值 = true ]
# 用于限制发现过程到可用资源子集的可选过滤器。
# 可用的过滤器在上游文档中列出:
# https://docs.docker.com/engine/api/v1.40/#operation/ContainerList
[ filters:
[ - name:<string>
value:<string>, [...] ]
# 容器刷新的时间间隔。
[ refresh_interval: <duration> | default = 60s ]
# 用于与 Docker 守护程序进行身份验证的信息。
# 注意,`basic_auth` 和 `authorization` 选项是互斥的。
# password 和 password_file 是互斥的。
# 可选的 HTTP 基本认证信息。
basic_auth:
[ username:<string> ]
[ password:<secret> ]
[ password_file:<string> ]
# 可选的`Authorization`头部配置。
authorization:
# 设置认证类型。
[ type:<string> | default:Bearer ]
# 设置凭据。它与`credentials_file`互斥。
[ credentials:<secret> ]
# 将凭据设置为从配置的文件中读取的凭据。它与`credentials`互斥。
[ credentials_file:<filename> ]
# 可选的 OAuth 2.0 配置。
# 不能同时与 basic_auth 或 authorization 一起使用。
oauth2:
[ <oauth2> ]
# 配置HTTP请求是否遵循 HTTP 3xx 重定向。
[ follow_redirects: <boolean> | default = true ]
# 是否启用 HTTP2。
[ enable_http2: <boolean> | default:true ]

Relabeling phase 是更强大且更常用的容器过滤方式。对于拥有数千个容器的用户而言,直接使用 Docker API 可能更有效,该 API 基本支持过滤容器(使用filters)。

请参阅此 Prometheus 配置文件示例,了解为 Docker Engine 配置 Prometheus 的详细示例。

<docker_swarm_sd_config>

Docker Swarm SD 配置允许从 Docker Swarm 引擎检索可抓取的 Target。

可以配置以下角色来发现 Target:

services

services(服务)角色会发现所有 Docker Swarm 服务并暴露其端口为 Target。对于服务中发布的每个端口,都会生成一个 Target。如果服务没有发布端口,则使用 SD 配置中定义的port参数创建一个服务级别的 Target。

可用的元标签包括:

  • __meta_dockerswarm_service_id:服务的 ID
  • __meta_dockerswarm_service_name:服务的名称
  • __meta_dockerswarm_service_mode:服务的模式
  • __meta_dockerswarm_service_endpoint_port_name:如果可用,则为端点的名称
  • __meta_dockerswarm_service_endpoint_port_publish_mode:端点的发布模式
  • __meta_dockerswarm_service_label_<labelname>:服务的每个标签,任何不支持的字符转换为下划线
  • __meta_dockerswarm_service_task_container_hostname:目标的容器主机名,如果有的话
  • __meta_dockerswarm_service_task_container_image:目标的容器镜像
  • __meta_dockerswarm_service_updating_status:服务的状态,如果可用
  • __meta_dockerswarm_network_id:网络的 ID
  • __meta_dockerswarm_network_name:网络的名称
  • __meta_dockerswarm_network_ingress:网络是否为 Ingress
  • __meta_dockerswarm_network_internal:网络是否为内部
  • __meta_dockerswarm_network_label_<labelname>:网络的每个标签,任何不支持的字符转换为下划线
  • __meta_dockerswarm_network_scope:网络的范围

tasks

tasks(任务)角色发现所有 Docker Swarm 任务并将其端口作为 Target 暴露出来。对于每个发布的任务端口,生成一个单一的 Target。如果任务没有发布端口,则会根据 SD 配置中定义的port参数为每个任务创建一个 Target。

可用的元标签包括:

  • __meta_dockerswarm_container_label_<labelname>:容器的每个标签,任何不支持的字符转换为下划线
  • __meta_dockerswarm_task_id:任务的 ID
  • __meta_dockerswarm_task_container_id:任务的容器 ID
  • __meta_dockerswarm_task_desired_state:任务的目标状态
  • __meta_dockerswarm_task_slot:任务的槽位
  • __meta_dockerswarm_task_state:任务的状态
  • __meta_dockerswarm_task_port_publish_mode:任务端口的发布模式
  • __meta_dockerswarm_service_id:服务的 ID
  • __meta_dockerswarm_service_name:服务的名称
  • __meta_dockerswarm_service_mode:服务的模式
  • __meta_dockerswarm_service_label_<labelname>:服务的每个标签,任何不支持的字符转换为下划线
  • __meta_dockerswarm_network_id:网络的 ID
  • __meta_dockerswarm_network_name:网络的名称
  • __meta_dockerswarm_network_ingress:是否为网络提供 Ingress 功能
  • __meta_dockerswarm_network_internal:网络是否为内部网络
  • __meta_dockerswarm_network_label_<labelname>:网络的每个标签,任何不支持的字符转换为下划线
  • __meta_dockerswarm_network_label:网络的每个标签,任何不支持的字符转换为下划线
  • __meta_dockerswarm_network_scope:网络的范围
  • __meta_dockerswarm_node_id:节点的 ID
  • __meta_dockerswarm_node_hostname:节点的主机名
  • __meta_dockerswarm_node_address:节点的地址
  • __meta_dockerswarm_node_availability:节点的可用性
  • __meta_dockerswarm_node_label_<labelname>:节点的每个标签,任何不支持的字符转换为下划线
  • __meta_dockerswarm_node_platform_architecture:节点的架构
  • __meta_dockerswarm_node_platform_os:节点的操作系统
  • __meta_dockerswarm_node_role:节点的角色
  • __meta_dockerswarm_node_status:节点的状态

对于使用mode=host发布的端口,__meta_dockerswarm_network_*类型的元标签不会被填充。

nodes

nodes(节点)角色用于发现 Docker Swarm 节点

可用的元标签:

  • __meta_dockerswarm_node_address: 节点的地址
  • __meta_dockerswarm_node_availability: 节点的可用性
  • __meta_dockerswarm_node_engine_version: 节点引擎的版本
  • __meta_dockerswarm_node_hostname: 节点的主机名
  • __meta_dockerswarm_node_id: 节点的 ID
  • __meta_dockerswarm_node_label_<labelname>: 节点的每个标签,其中任何不支持的字符转换为下划线
  • __meta_dockerswarm_node_manager_address: 节点管理组件的地址
  • __meta_dockerswarm_node_manager_leader: 节点管理组件是否为 Leader(true 或 false)
  • __meta_dockerswarm_node_manager_reachability: 节点管理组件的可达性
  • __meta_dockerswarm_node_platform_architecture: 节点的架构
  • __meta_dockerswarm_node_platform_os: 节点的操作系统
  • __meta_dockerswarm_node_role: 节点的角色
  • __meta_dockerswarm_node_status: 节点的状态

以下为 Docker Swarm 发现配置选项:

# Docker守护程序的地址。
host: <string>
# 可选代理 URL。
[ proxy_url: <string> ]
# 包含 IP、CIDR 表示法、域名的逗号分隔字符串,这些应该从代理中排除。IP 和域名可以包含端口号。
[ no_proxy: <string> ]
# 使用由环境变量(HTTP_PROXY, https_proxy, HTTPs_PROXY, https_proxy 和 no_proxy)指示的代理 URL。
[ proxy_from_environment: <boolean> | default:false ]
# 在 CONNECT 请求期间向代理发送的自定义头。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]
# TLS 配置。
tls_config:
[ <tls_config> ]
# 目标获取的角色。必须为`services`、`tasks`或`nodes`。
role: <string>
# 当`role`为nodes时,以及对于没有发布端口的发现的任务和服务,从该端口抓取指标的端口。
[ port: <int> | default = 80 ]
# 可选过滤器,限制发现过程只适用于可用资源的子集。
# 可用过滤器在上游文档中列出:
# 服务:[链接]
# 任务:[链接]
# 节点:[链接]
[ filters:
[ - name: <string>
values: <string>, [...] ]
# 服务发现数据刷新的时间间隔。
[ refresh_interval: <duration> | default = 60s ]
# 用于与Docker守护程序进行身份验证的信息。
# 注意,`basic_auth`和`authorization`选项是互斥的。
# password和password_file也是互斥的。
# 可选 HTTP 基本身份验证信息。
basic_auth:
[ username: <string> ]
[ password: <secret> ]
[ password_file: <string> ]
# 可选`Authorization`头部配置。
authorization:
# 设置认证类型。
[ type: <string> | default:Bearer ]
# 设置凭据。它与`credentials_file`互斥。
[ credentials: <secret> ]
# 设置凭据为从配置文件中读取的凭据。它与`credentials`互斥。
[ credentials_file: <filename> ]
# 可选 OAuth 2.0 配置。
# 不能同时使用basic_auth或authorization。
oauth2:
[ <oauth2> ]
# 配置 HTTP 请求是否遵循 HTTP 3xx 重定向。
[ follow_redirects: <boolean> | default = true ]
# 是否启用HTTP2。
[ enable_http2: <boolean> | default:true ]

重标签是更强大且更常用的容器过滤方式。对于拥有数千个容器的用户而言,直接使用 Docker API 可能更有效,该 API 基本支持过滤容器(使用filters)。

查看这个 Prometheus 配置文件示例,了解为 Docker Swarm 配置 Prometheus 的详细示例。

<dns_sd_config>

基于 DNS 的服务发现配置允许指定一组 DNS 域名,这些域名将用于定期查询以发现 Target 列表。DNS 服务器从/etc/resolv.conf读取。

此服务发现方法仅支持基本的 DNS A、AAAA、MX、NS 和 SRV 记录查询,而不支持在 RFC6763 中指定的高级 DNS-SD 方法。

重标签期间,Target 上可用的元标签如下:

  • __meta_dns_name:产生发现 Target 的记录名称。
  • __meta_dns_srv_record_target:SRV 记录的目标字段。
  • __meta_dns_srv_record_port:SRV记 录的端口号字段。
  • __meta_dns_mx_record_target:MX 记录的目标字段。
  • __meta_dns_ns_record_target:NS 记录的目标字段。
# 要查询的 DNS 域名列表。
names:
[ - <string> ]
# 执行的 DNS 查询类型。可选值为 SRV、A、AAAA、MX或NS。
[ type: <string> | default = 'SRV' ]
# 如果查询类型不是 SRV,则使用的端口号。
[ port: <int>]
# 提供的名称刷新的时间间隔。
[ refresh_interval: <duration> | default = 30s ]

<ec2_sd_config>

EC2 SD 配置允许从 AWS EC2 实例中检索抓取 Target。默认使用私有 IP 地址,但可以通过重标签进行更改以使用公共 IP 地址。

必须使用具有ec2:DescribeInstances权限的 IAM 凭据去发现抓取 Target,并且如果希望获取实例所在可用区 ID 作为标签(参见下文),则可能还需要具有ec2:DescribeAvailabilityZones权限。

在抓取 Target 期间,通过重标签可访问以下元标签:

  • __meta_ec2_ami:EC2 Amazon Machine Image
  • __meta_ec2_architecture:实例的架构
  • __meta_ec2_availability_zone:实例运行的可用区
  • __meta_ec2_availability_zone_id:实例运行的可用区 ID(需要ec2:DescribeAvailabilityZones权限)
  • __meta_ec2_instance_id:EC2实例 ID
  • __meta_ec2_instance_lifecycle:仅对“spot”或“scheduled”实例设置的实例生命周期,否则缺失
  • __meta_ec2_instance_state:实例的状态
  • __meta_ec2_instance_type:实例类型
  • __meta_ec2_ipv6_addresses:实例网络接口分配的 IPv6 地址列表(如果有),以逗号分隔
  • __meta_ec2_owner_id:拥有 EC2 实例的 AWS 账户 ID
  • __meta_ec2_platform:操作系统平台,在 Windows 服务器上设置为“windows”,否则缺失
  • __meta_ec2_primary_ipv6_addresses:实例的主 IPv6 地址列表(如果有)。列表根据每个对应网络接口的附接顺序进行排序。
  • __meta_ec2_primary_subnet_id:主网络接口的子网 ID(如果可用)
  • __meta_ec2_private_dns_name:实例的私有 DNS 名称(如果有)
  • __meta_ec2_private_ip:实例的私有 IP 地址(如果有)
  • __meta_ec2_public_dns_name:实例的公共 DNS 名称(如果有)
  • __meta_ec2_public_ip:实例的公共 IP 地址(如果有)
  • __meta_ec2_region:实例所在的区域
  • __meta_ec2_subnet_id:实例运行的子网 ID 列表(如果有),以逗号分隔
  • __meta_ec2_tag_<tagkey>:实例的每个标签值
  • __meta_ec2_vpc_id:实例运行的 VPC 的 ID(如果有)

有关 EC2 发现配置选项,请参阅下方:

# 访问 EC2 API 的信息。
# AWS 区域。若为空,则使用实例元数据中的区域。
[ region: <string> ]
# 可自定义的端点。
[ endpoint: <string> ]
# AWS API 密钥。若为空,则使用环境变量`AWS_ACCESS_KEY_ID`和`AWS_SECRET_ACCESS_KEY`。
[ access_key: <string> ]
[ secret_key: <secret> ]
# 使用命名的 AWS 配置文件连接到 API。
[ profile: <string> ]
# AWS 角色 ARN,作为使用 AWS API 密钥的替代方式。
[ role_arn: <string> ]
# 重新读取实例列表的时间间隔。
[ refresh_interval: <duration> | default = 60s ]
# 从抓取指标的端口。如果使用公共 IP 地址,则必须在此处指定。
[ port: <int> | default = 80 ]
# 可选过滤器可以用于按其他标准过滤实例列表。可获得的过滤器标准可以在以下位置找到:
# https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeInstances.html
# 过滤 API 文档:https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_Filter.html
filters:
[ - name: <string>
values: <string>, [...] ]
# 用于向 EC2 API 认证的身份信息。请注意,`basic_auth`、`authorization`和`oauth2`选项互斥。
# `password`和`password_file`互斥。
# 选填的 HTTP 基本认证信息,目前不被 AWS 支持。
basic_auth:
[ username: <string> ]
[ password: <secret> ]
[ password_file: <string> ]
# 选填的`Authorization`头部配置,目前不被 AWS 支持。
authorization:
# 设置认证类型。
[ type: <string> | default: Bearer ]
# 设置凭证。与`credentials_file`互斥。
[ credentials: <secret> ]
# 设置凭证为从配置的文件中读取的凭证。与`credentials`互斥。
[ credentials_file: <filename> ]
# 选填的 OAuth 2.0 配置,目前不被 AWS 支持。
oauth2:
[ <oauth2> ]
# 选填的代理 URL。
[ proxy_url: <string> ]
# 包含 IP、CIDR 表示法、域名的逗号分隔字符串,其中应排除代理。IP 和域名可以包含端口号。
[ no_proxy: <string> ]
# 根据环境变量(HTTP_PROXY、https_proxy、HTTPs_PROXY、https_proxy和no_proxy)使用代理 URL。
[ proxy_from_environment: <boolean> | default: false ]
# 指定 CONNECT 请求期间发送给代理的头部。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]
# 配置 HTTP 请求是否遵循 HTTP 3xx 重定向。
[ follow_redirects: <boolean> | default = true ]
# 是否启用 HTTP2。
[ enable_http2: <boolean> | default: true ]
# TLS 配置。
tls_config:
[ <tls_config> ]

重标签是基于任意标签过滤 Target 的更强大的方法。然而,对于具有数千个实例的用户而言,直接使用 EC2 API 可能更有效率,该 API 支持实例过滤。

<openstack_sd_config>

OpenStack SD 配置允许从 OpenStack Nova 实例获取抓取目标。

可以配置以下<openstack_role>类型来发现 Target:

hypervisor

hypervisor角色在每个 Nova 虚拟化节点上发现一个 Target。Target 地址默认为虚拟化节点的 host_ip 属性。

Target 期间可用的元标签如下:

  • __meta_openstack_hypervisor_host_ip:虚拟化节点的 IP 地址。
  • __meta_openstack_hypervisor_hostname:虚拟化节点的名称。
  • __meta_openstack_hypervisor_id:虚拟化节点的 ID。
  • __meta_openstack_hypervisor_state:虚拟化节点的状态。
  • __meta_openstack_hypervisor_status:虚拟化节点的状态。
  • __meta_openstack_hypervisor_type:虚拟化节点的类型。

instance

instance角色在每个 Nova 实例的网络接口上发现一个 Target。Target 的地址默认为网络接口的私有 IP 地址。

Target 期间可用的元标签如下:

  • __meta_openstack_address_pool:私有 IP 的池。
  • __meta_openstack_instance_flavor:OpenStack 实例的风味名称,或者如果风味名称不可用,则是风味 ID。
  • __meta_openstack_instance_id:OpenStack 实例 ID。
  • __meta_openstack_instance_image:OpenStack 实例使用的镜像 ID。
  • __meta_openstack_instance_name:OpenStack 实例名称。
  • __meta_openstack_instance_status:OpenStack 实例的状态。
  • __meta_openstack_private_ip:OpenStack 实例的私有 IP。
  • __meta_openstack_project_id:拥有此实例的项目(租户)ID。
  • __meta_openstack_public_ip:OpenStack 实例的公有 IP。
  • __meta_openstack_tag_<key>:每个实例的元数据项,任何不支持的字符转换为下划线。
  • __meta_openstack_user_id:拥有租户的用户账户 ID。

以下是用于配置 OpenStack 发现的选项:

# 访问 OpenStack API 的信息。
# 应该被发现的 OpenStack 实体的角色。
role: <openstack_role>
# OpenStack 区域。
region: <string>
# identity_endpoint 指定需要与适当版本的 Identity API 进行工作的 HTTP 端点。虽然它最终需要所有身份服务,但通常会由提供程序级别的功能填充。
[ identity_endpoint: <string> ]
# 在使用 Identity V2 API 时,username 是必需的。请咨询你的提供商的控制面板以发现你帐户的用户名。在身份 V3 中,userid 或 username 和 domain_id 或 domain_name 的组合可能需要。
[ username: <string> ]
[ userid: <string> ]
# Identity V2 和 V3 API 的密码。请咨询你的提供商的控制面板以发现你帐户的首选认证方法。
[ password: <secret> ]
# 使用身份验证时,最多只能提供 domain_id 和 domain_name 中的一个。否则,它们都是可选的。
[ domain_name: <string> ]
[ domain_id: <string> ]
# 对于 Identity V2 API,project_name 和 project_id 字段是可选的。一些提供商允许你指定 project_name 而不是 project_id。一些则需要两者。你的提供商的认证策略将决定这些字段如何影响认证。
[ project_name: <string> ]
[ project_id: <string> ]
# 如果使用应用程序凭据进行身份验证,则需要提供 application_credential_name 或 application_credential_id 字段。一些提供商允许你创建应用程序凭据来认证而不是密码。
[ application_credential_name: <string> ]
[ application_credential_id: <string> ]
# 使用应用程序凭据进行身份验证时,需要提供 application_credential_secret 字段。
[ application_credential_secret: <secret> ]
# 是否列出所有项目的所有实例。这仅适用于 'instance' 角色,并且通常需要管理员权限。
[ all_tenants: <boolean> | default: false ]
# 重新读取实例列表的时间间隔。
[ refresh_interval: <duration> | default = 60s ]
# 从该端口抓取指标。如果使用公有 IP 地址,则必须在 relabel 规则中指定。
[ port: <int> | default = 80 ]
# 连接到的端点的可用性。必须是 public、admin 或 internal 中的一个。
[ availability: <string> | default = "public" ]
# TLS 配置。
tls_config:
[ <tls_config> ]

<ovhcloud_sd_config>

OVHcloud SD 配置允许从 OVHcloud 的 Dedicated服务器VPS 通过其 API 获取抓取 Target。Prometheus 将定期检查 REST 端点,并为发现的每一台服务器创建一个 Target。该角色会尝试使用公共 IPv4 地址作为默认地址,如果没有,则尝试使用 IPv6 地址。这可以通过重标签进行更改。
对于 OVHcloud 的公有云实例,可以使用 openstack_sd_config

VPS

  • __meta_ovhcloud_vps_cluster:服务器所在的集群
  • __meta_ovhcloud_vps_datacenter:服务器的数据中心
  • __meta_ovhcloud_vps_disk:服务器的磁盘
  • __meta_ovhcloud_vps_display_name:服务器的显示名称
  • __meta_ovhcloud_vps_ipv4:服务器的 IPv4 地址
  • __meta_ovhcloud_vps_ipv6:服务器的 IPv6 地址
  • __meta_ovhcloud_vps_keymap:服务器的 KVM 键盘布局
  • __meta_ovhcloud_vps_maximum_additional_ip:服务器的最大额外 IP 地址数
  • __meta_ovhcloud_vps_memory_limit:服务器的内存限制
  • __meta_ovhcloud_vps_memory:服务器的内存
  • __meta_ovhcloud_vps_monitoring_ip_blocks:服务器的监控IP块
  • __meta_ovhcloud_vps_name:服务器的名称
  • __meta_ovhcloud_vps_netboot_mode:服务器的网络启动模式
  • __meta_ovhcloud_vps_offer_type:服务器的报价类型
  • __meta_ovhcloud_vps_offer:服务器的报价
  • __meta_ovhcloud_vps_state:服务器的状态
  • __meta_ovhcloud_vps_vcore:服务器的虚拟核心数量
  • __meta_ovhcloud_vps_version:服务器的版本
  • __meta_ovhcloud_vps_zone:服务器的区域

专用服务器

  • __meta_ovhcloud_dedicated_server_commercial_range: 服务器的商业范围
  • __meta_ovhcloud_dedicated_server_datacenter: 服务器的数据中心
  • __meta_ovhcloud_dedicated_server_ipv4: 服务器的 IPv4 地址
  • __meta_ovhcloud_dedicated_server_ipv6: 服务器的 IPv6 地址
  • __meta_ovhcloud_dedicated_server_link_speed: 服务器的链路速度
  • __meta_ovhcloud_dedicated_server_name: 服务器的名称
  • __meta_ovhcloud_dedicated_server_no_intervention: 是否禁用数据中心对服务器的干预
  • __meta_ovhcloud_dedicated_server_os: 服务器的操作系统
  • __meta_ovhcloud_dedicated_server_rack: 服务器的机架
  • __meta_ovhcloud_dedicated_server_reverse: 服务器的反向 DNS 名称
  • __meta_ovhcloud_dedicated_server_server_id: 服务器的 ID
  • __meta_ovhcloud_dedicated_server_state: 服务器的状态
  • __meta_ovhcloud_dedicated_server_support_level: 服务器的支持级别

对于 OVHcloud 发现的配置选项,请参阅以下内容:

# 使用的访问密钥。https://api.ovh.com
application_key: <string>
application_secret: <secret>
consumer_key: <secret>
# 要检索的目标服务。必须是`vps`或`dedicated_server`。
service: <string>
# API端点。https://github.com/ovh/go-ovh#supported-apis
[ endpoint: <string> | default = "ovh-eu" ]
# 重新读取资源列表的刷新间隔。
[ refresh_interval: <duration> | default = 60秒 ]

<puppetdb_sd_config>

PuppetDB SD 配置允许从 PuppetDB 资源中检索采集 Target。

此 SD 发现资源并将 API 返回的每个资源创建为 Target。

资源地址是资源的certname,可以在重标签期间更改。

重标签期间,以下元标签可供 Target 使用:

  • __meta_puppetdb_query: Puppet 查询语言(PQL)查询
  • __meta_puppetdb_certname: 与资源关联的节点名称
  • __meta_puppetdb_resource: 资源类型、标题和参数的 SHA-1 哈希,用于识别
  • __meta_puppetdb_type: 资源类型
  • __meta_puppetdb_title: 资源标题
  • __meta_puppetdb_exported: 资源是否导出(“true”或”false”)
  • __meta_puppetdb_tags: 资源标签的逗号分隔列表
  • __meta_puppetdb_file: 声明资源的 manifest 文件
  • __meta_puppetdb_environment: 与资源关联的节点的环境
  • __meta_puppetdb_parameter_<parametername>: 资源的参数

以下是 PuppetDB 发现的配置选项:

# PuppetDB 根查询端点的 URL。
url: <string>
# Puppet查询语言(PQL)查询。仅支持资源。
# https://puppet.com/docs/puppetdb/latest/api/query/v4/pql.html
query: <string>
# 是否包括参数作为元标签。
# 由于参数类型和 Prometheus 标签之间的差异,
# 可能会有一些参数无法呈现。参数的格式也可能会在未来版本中改变。
#
# 注意:启用此功能会在 Prometheus UI 和 API 中暴露参数。确保如果启用此功能,
# 不要在参数中暴露秘密。
[ include_parameters: <boolean> | default = false ]
# 重新读取资源列表的刷新间隔。
[ refresh_interval: <duration> | default = 60秒 ]
# 从哪个端口抓取指标。
[ port: <integer> | default = 80 ]
# TLS 配置以连接到 PuppetDB。
tls_config:
[ <tls_config> ]
# basic_auth、authorization 和 oauth2 互斥。
# 附加 HTTP 基本认证信息。
basic_auth:
[ username: <string> ]
[ password: <secret> ]
[ password_file: <string> ]
# `Authorization` HTTP 头配置。
authorization:
# 设置认证类型。
[ type: <string> | default = Bearer ]
# 设置凭证。它与`credentials_file`互斥。
[ credentials: <secret> ]
# 设置凭证,并从配置的文件中读取凭证。
# 它与`credentials`互斥。
[ credentials_file: <filename> ]
# 附加 OAuth 2.0 配置。
# 不能同时使用 basic_auth 或 authorization。
oauth2:
[ <oauth2> ]
# 附加代理 URL。
[ proxy_url: <string> ]
# 包含 IP、CIDR 表示法、域名的逗号分隔字符串,
# 应该从代理中排除。IP 和域名可以包含端口号。
[ no_proxy: <string> ]
# 使用由环境变量指示的代理 URL(HTTP_PROXY、https_proxy、HTTPs_PROXY、https_proxy和no_proxy)
[ proxy_from_environment: <boolean> | default = false ]
# 指定在CONNECT请求期间发送给代理的头部。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]
# 配置 HTTP 请求是否遵循 HTTP 3xx 重定向。
[ follow_redirects: <boolean> | default = true ]
# 是否启用 HTTP2。
[ enable_http2: <boolean> | default = true ]

有关详细配置示例,请参阅 Prometheus 与 PuppetDB 配置文件

<file_sd_config>

基于文件的服务发现(file-based service discovery)提供了一种更通用的方式来配置静态 Target,能够作为插件自定义服务发现机制的接口。

它读取一组包含零个或多个<static_config>的文件。所有定义的文件的变化会通过磁盘监控检测,并立即被应用。在监控这些个别文件的变化的同时,其父目录也会被隐式地被监控。这是为了高效处理原子重命名(atomic renaming)和检测匹配配置通配符的新文件。如果父目录包含大量其他文件,则有可能会引起问题。这是因为这些文件中的每一个都会被监控,即使我们并不关心与它们相关联的事件。

文件可以以 YAML 或 JSON 格式提供。只有符合格式要求的变化才会被应用。

文件必须包含静态配置列表,示例格式如下:

JSON

[
{
"targets": [ "<host>", ... ],
"labels": {
"<labelname>": "<labelvalue>", ...
}
},
...
]

YAML

- targets:
[ - '<host>' ]
labels:
[ <labelname>: <labelvalue> ... ]

文件内容会在指定的刷新间隔内定期被重新读取。

每个 Target 在重标签阶段中有一个元标签__meta_filepath,其值设置为从该文件提取 Target 的路径。

这里有与这个发现机制相关的几个集成

# 从其中提取 Target 组的文件模式。
files:
[ - <filename_pattern> ... ]
# 重新读取文件的刷新间隔。
[ refresh_interval: <duration> | default = 5m ]

其中<filename_pattern>可以是以.json.yml.yaml结尾的路径。路径的最后一个部分可以包含单个*,匹配任意字符序列,例如my/path/tg_*.json

<gce_sd_config>

GCE SD 配置允许从 GCP GCE 实例获取 Target。默认使用私有 IP 地址,但可以通过重标签进行更改以使用公共 IP 地址。

重标签期间,Target 上可用的元标签如下:

  • __meta_gce_instance_id:实例的数字 ID
  • __meta_gce_instance_name:实例的名称
  • __meta_gce_label_<labelname>:实例的每个 GCE 标签,任何不支持的字符转换为下划线
  • __meta_gce_machine_type:实例的主机类型完整或部分 URL
  • __meta_gce_metadata_<name>:实例的每个元数据项
  • __meta_gce_network:实例的网络 URL
  • __meta_gce_private_ip:实例的私有 IP 地址
  • __meta_gce_interface_ipv4_<name>:命名接口的 IPv4 地址
  • __meta_gce_project:实例运行的 GCP 项目
  • __meta_gce_public_ip:实例的公共 IP 地址(如果存在)
  • __meta_gce_subnetwork:实例的子网络 URL
  • __meta_gce_tags:实例标签的逗号分隔列表
  • __meta_gce_zone:实例运行的 GCE 区域 URL

以下是有关 GCE 发现配置选项的描述:

# 访问 GCE API 所需的信息。
# GCP 项目
project: <string>
# 抓取 Target 所在的区域。如果你需要多个区域,请使用多个 gce_sd_configs。
zone: <string>
# 可选地,通过其他标准筛选实例列表。此筛选字符串的语法在这里描述:
# https://cloud.google.com/compute/docs/reference/latest/instances/list 在过滤查询参数部分中
[ filter: <string> ]
# 重新读取实例列表的刷新间隔
[ refresh_interval: <duration> | 默认值 = 60s ]
# 从 metrics 中抓取的端口。如果使用公共 IP 地址,则必须在 relabel_config 中指定。
[ port: <int> | 默认值 = 80 ]
# 标签分隔符用于在连接时分离标签
[ tag_separator: <string> | 默认值 = , ]

认证信息由 Google Cloud SDK 默认客户端通过查找以下位置自动发现,优先选择找到的第一个位置:

  1. 通过环境变量GOOGLE_APPLICATION_CREDENTIALS指定的 JSON 文件
  2. $HOME/.config/gcloud/application_default_credentials.json路径中的 JSON 文件
  3. 从 GCE 元数据服务器获取

如果 Prometheus 正在 GCE 内部运行,则与实例关联的服务帐户应至少具有计算资源的只读权限。如果在 GCE 外部运行,请确保创建适当的服务帐户并将凭证文件放置在预期的位置之一。

<hetzner_sd_config>

Hetzner SD 配置允许从 Hetzner API 和 Robot API 获取抓取 Target。此服务发现默认使用公共 IPv4 地址,但可以通过重标签进行更改,如 Prometheus hetzner-sd 配置文件中演示的那样。

所有 Target 在重标签期间可获取以下元标签:

  • __meta_hetzner_server_id:服务器的 ID
  • __meta_hetzner_server_name:服务器的名称
  • __meta_hetzner_server_status:服务器的状态
  • __meta_hetzner_public_ipv4:服务器的公共 IPv4 地址
  • __meta_hetzner_public_ipv6_network:服务器的公共 IPv6 网络(/64)
  • __meta_hetzner_datacenter:服务器的数据中心

对于设置rolehcloud的 Target,以下标签仅可用:

  • __meta_hetzner_hcloud_image_name:服务器的镜像名称
  • __meta_hetzner_hcloud_image_description:服务器镜像的描述
  • __meta_hetzner_hcloud_image_os_flavor:服务器镜像的操作系统类型
  • __meta_hetzner_hcloud_image_os_version:服务器镜像的操作系统版本
  • __meta_hetzner_hcloud_datacenter_location:服务器的位置
  • __meta_hetzner_hcloud_datacenter_location_network_zone:服务器的网络区域
  • __meta_hetzner_hcloud_server_type:服务器的类型
  • __meta_hetzner_hcloud_cpu_cores:服务器的 CPU 核心数
  • __meta_hetzner_hcloud_cpu_type:服务器的 CPU 类型(共享或专用)
  • __meta_hetzner_hcloud_memory_size_gb:服务器的内存大小(以 GB 计)
  • __meta_hetzner_hcloud_disk_size_gb:服务器的磁盘大小(以 GB 计)
  • __meta_hetzner_hcloud_private_ipv4_<networkname>:服务器在给定网络内的私有 IPv4 地址
  • __meta_hetzner_hcloud_label_<labelname>:服务器的每个标签,其中任何不支持的字符转换为下划线
  • __meta_hetzner_hcloud_labelpresent_<labelname>:对于服务器的每个标签,如果有任何不支持的字符转换为下划线,则设置为true

对于设置rolerobot的 Target,以下标签仅可用:

  • __meta_hetzner_robot_product:服务器的产品
  • __meta_hetzner_robot_cancelled:服务器取消状态
# 指定应该被发现的 Hetzner 实体的角色。
# 可以为 robot 或 hcloud 之一。
role: <string>
# 使用来认证到 API 服务器的信息。
# 注意`basic_auth`和`authorization`选项是互斥的。
# password 和 password_file 也是互斥的。
# 用于角色为 robot 的可选 HTTP 基本认证信息。角色 hcloud 不支持基本认证。
basic_auth:
[ username: <string> ]
[ password: <secret> ]
[ password_file: <string> ]
# 用于角色为hcloud的可选`Authorization`头部配置。角色 robot 不支持 bearer 令牌认证。
authorization:
# 设置认证类型。
[ type: <string> | default: Bearer ]
# 设置凭证。与`credentials_file`互斥。
[ credentials: <secret> ]
# 设置凭证来自配置文件中的凭证。
# 与`credentials`互斥。
[ credentials_file: <filename> ]
# 可选的 OAuth 2.0 配置。
# 不能同时与 basic_auth 或 authorization 一起使用。
oauth2:
[ <oauth2> ]
# 可选代理 URL。
[ proxy_url: <string> ]
# 包含 IP、CIDR 表示法、域名的逗号分隔字符串,这些应从代理中排除。IP 和域名可以包含端口号。
[ no_proxy: <string> ]
# 通过环境变量(HTTP_PROXY、https_proxy、HTTPs_PROXY、https_proxy和no_proxy)指示代理 URL。
[ proxy_from_environment: <boolean> | default: false ]
# 指定在 CONNECT 请求期间发送到代理的请求头。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]
# 配置是否遵循 HTTP 3xx 重定向。
[ follow_redirects: <boolean> | default = true ]
# 是否启用 HTTP2。
[ enable_http2: <boolean> | default: true ]
# TLS 配置。
tls_config:
[ <tls_config> ]
# 从哪些端口抓取指标。
[ port: <int> | default = 80 ]
# 服务器刷新的时间间隔。
[ refresh_interval: <duration> | default = 60s ]

<http_sd_config>

基于 HTTP 的服务发现(HTTP-based service discovery)提供了一种更通用的方式来配置静态 Target,能够作为插件自定义服务发现机制的接口。

它从包含零个或多个<static_config>的 HTTP 端点获取 Target。Target 必须响应 HTTP 200 状态码。HTTP 头Content-Type必须为application/json,主体必须是有效的 JSON。

示例响应体:

[
{
"targets": [ "<host>", ... ],
"labels": {
"<labelname>": "<labelvalue>", ...
}
},
...
]

该端点在指定的刷新间隔内被周期性查询。prometheus_sd_http_failures_totalCounter 指标跟踪刷新失败的数量。

每个 Target 在重标签期间具有元标签__meta_url。其值设置为其从中提取 Target 的 URL。

# 从哪个 URL 获取 Target。
url: <string>
# 定期重新查询端点的刷新间隔。
[ refresh_interval: <duration> | default = 60s ]
# 用于向 API 服务器认证的信息。
# 注意`basic_auth`、`authorization`和`oauth2`选项是互斥的。
# `password`和`password_file`是互斥的。
# 可选的 HTTP 基本认证信息。
basic_auth:
[ username: <string> ]
[ password: <secret> ]
[ password_file: <string> ]
# 可选的`Authorization`头部配置。
authorization:
# 设置认证类型。
[ type: <string> | default: Bearer ]
# 设置凭证。与`credentials_file`互斥。
[ credentials: <secret> ]
# 设置凭证,从配置的文件中读取凭证。与`credentials`互斥。
[ credentials_file: <filename> ]
# 可选的 OAuth 2.0 配置。
oauth2:
[ <oauth2> ]
# 可选代理 URL。
[ proxy_url: <string> ]
# 包含 IP、CIDR 表示法、域名的逗号分隔字符串,这些应从代理中排除。IP 和域名可以包含端口号。
[ no_proxy: <string> ]
# 使用环境变量(HTTP_PROXY、https_proxy、HTTPs_PROXY、https_proxy和no_proxy)指示的代理 URL。
[ proxy_from_environment: <boolean> | default: false ]
# 指定在 CONNECT 请求期间发送给代理的头部。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]
# 配置是否遵循 HTTP 3xx 重定向。
[ follow_redirects: <boolean> | default = true ]
# 是否启用 HTTP2。
[ enable_http2: <boolean> | default: true ]
# TLS 配置。
tls_config:
[ <tls_config> ]

<ionos_sd_config>

IONOS SD 配置允许从 IONOS 云 API 获取抓取 Target。此服务发现默认使用第一块网络接口的 IP 地址,但可以通过重标签进行更改。所有 Target 在重标签期间可用的以下元标签如下:

  • __meta_ionos_server_availability_zone: 服务器的可用区域
  • __meta_ionos_server_boot_cdrom_id: 服务器启动时所挂载的 CD-ROM 的 ID
  • __meta_ionos_server_boot_image_id: 服务器启动时使用的启动镜像或快照的 ID
  • __meta_ionos_server_boot_volume_id: 启动卷的 ID
  • __meta_ionos_server_cpu_family: 服务器的 CPU 类型
  • __meta_ionos_server_id: 服务器的 ID
  • __meta_ionos_server_ip: 服务器分配的所有 IP 地址的逗号分隔列表
  • __meta_ionos_server_lifecycle: 服务器资源的生命周期状态
  • __meta_ionos_server_name: 服务器的名称
  • __meta_ionos_server_nic_ip_<nic_name>: 按与服务器关联的每个网卡的名称分组的 IP 列表
  • __meta_ionos_server_servers_id: 服务器所属的服务器的 ID
  • __meta_ionos_server_state: 服务器的执行状态
  • __meta_ionos_server_type: 服务器的类型
# 数据中心的唯一 ID。
datacenter_id: <string>
# 用于向 API 服务器认证的身份信息。
# 注意,basic_auth 和 authorization 选项互斥。
# password 和 password_file 也互斥。
# 选项的 HTTP 基本认证信息,当使用 IONOS 云用户名和密码作为身份验证方法时需要。
basic_auth:
[ username: <string> ]
[ password: <secret> ]
[ password_file: <string> ]
# `Authorization` 头部配置,当使用 IONOS 云令牌作为身份验证方法时需要。
authorization:
# 设置身份验证类型。
[ type: <string> | default: Bearer ]
# 设置凭据。它与 `credentials_file` 相互排斥。
[ credentials: <secret> ]
# 设置凭据来自配置文件中读取的凭据。它与 `credentials` 相互排斥。
[ credentials_file: <filename> ]
# OAuth 2.0 配置。
# 不能同时与 basic_auth 或 authorization 使用。
oauth2:
[ <oauth2> ]
# 代理 URL。
[ proxy_url: <string> ]
# 可以包含 IP、CIDR 表示法、域名的逗号分隔字符串,这些应从代理中排除。IP 和域名可以包含端口号。
[ no_proxy: <string> ]
# 使用由环境变量(HTTP_PROXY、https_proxy、HTTPs_PROXY、https_proxy 和 no_proxy)指示的代理 URL。
[ proxy_from_environment: <boolean> | default: false ]
# 在 CONNECT 请求期间发送到代理的头部指定。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]
# 是否遵循 HTTP 3xx 重定向。
[ follow_redirects: <boolean> | default = true ]
# 是否启用 HTTP2。
[ enable_http2: <boolean> | default: true ]
# TLS 配置。
tls_config:
[ <tls_config> ]
# 从该端口抓取指标值。
[ port: <int> | default = 80 ]
# 服务器刷新的时间间隔。
[ refresh_interval: <duration> | default = 60s ]

<kubernetes_sd_config>

Kubernetes SD 配置允许从 Kubernetes REST API检索集群节点的扫描 Target,并始终保持与集群状态的同步。

可以配置以下role类型来发现 Target:

node

node角色在每个集群节点上发现一个 Target,地址默认为 Kubelet 的 HTTP 端口。
Target 地址默认为 Kubernetes 节点对象中存在的第一个地址,按照地址类型顺序排列:NodeInternalIPNodeExternalIPNodeLegacyHostIPNodeHostName

可用的元标签有:

  • __meta_kubernetes_node_name: 节点对象的名称。
  • __meta_kubernetes_node_provider_id: 节点对象的云提供商名称。
  • __meta_kubernetes_node_label_<labelname>: 节点对象中的每个标签,不支持字符转换为下划线。
  • __meta_kubernetes_node_labelpresent_<labelname>: 对于节点对象中的每个标签返回true,不支持的字符转换为下划线。
  • __meta_kubernetes_node_annotation_<annotationname>: 节点对象中的每个注解。
  • __meta_kubernetes_node_annotationpresent_<annotationname>: 对于节点对象中的每个注解返回true
  • __meta_kubernetes_node_address_<address_type>: 如果存在,则为每个节点地址类型设置的第一个地址。

此外,对于节点,将通过 api-server 检索的节点名设置为instance标签。

service

service角色为每个服务的每个服务端口发现一个 Target。这通常适用于对服务进行黑盒监控。
地址将设置为服务的 Kubernetes DNS 名称和相应的服务端口。

可用的元标签有:

  • __meta_kubernetes_namespace: 服务对象的命名空间。
  • __meta_kubernetes_service_annotation_<annotationname>: 服务对象中的每个注解。
  • __meta_kubernetes_service_annotationpresent_<annotationname>: 对于服务对象中的每个注解返回true
  • __meta_kubernetes_service_cluster_ip: 服务的集群 IP 地址。(不适用于类型为ExternalName的服务)
  • __meta_kubernetes_service_loadbalancer_ip: 负载均衡器的 IP 地址。(适用于类型为LoadBalancer的服务)
  • __meta_kubernetes_service_external_name: 服务的 DNS 名称。(适用于类型为ExternalName的服务)
  • __meta_kubernetes_service_label_<labelname>: 服务对象中的每个标签,不支持的字符转换为下划线。
  • __meta_kubernetes_service_labelpresent_<labelname>: 对于服务对象中的每个标签返回true,不支持的字符转换为下划线。
  • __meta_kubernetes_service_name: 服务对象的名称。
  • __meta_kubernetes_service_port_name: Target 服务端口号名称。
  • __meta_kubernetes_service_port_number: Target 服务端口号数字。
  • __meta_kubernetes_service_port_protocol: Target 服务端口的协议。
  • __meta_kubernetes_service_type: 服务的类型。

pod

pod角色发现所有 pod 并将其容器作为 Target 暴露出来。对于每个声明的容器端口,生成一个单独的 Target。如果容器没有指定端口,则为每个容器创建一个无端口的 Target,以便手动通过重标签添加端口。

可访问的元标签:

  • __meta_kubernetes_namespace:pod 对象的命名空间。
  • __meta_kubernetes_pod_name:pod 对象的名称。
  • __meta_kubernetes_pod_ip:pod 对象的 pod IP。
  • __meta_kubernetes_pod_label_<labelname>:从 pod 对象中获取的每个标签,任何不支持的字符转换为下划线。
  • __meta_kubernetes_pod_labelpresent_<labelname>:对于 pod 对象中的每个标签,将任何不支持的字符转换为下划线的 true
  • __meta_kubernetes_pod_annotation_<annotationname>:从 pod 对象中获取的每个注解。
  • __meta_kubernetes_pod_annotationpresent_<annotationname>:对于 pod 对象中的每个注解,设置为 true
  • __meta_kubernetes_pod_container_init:如果容器是 InitContainer,设置为true
  • __meta_kubernetes_pod_container_name:Target 地址指向的容器的名称。
  • __meta_kubernetes_pod_container_id:Target 地址指向的容器的 ID。ID 形式为 <type>://<container_id>
  • __meta_kubernetes_pod_container_image:容器使用的镜像。
  • __meta_kubernetes_pod_container_port_name:容器端口的名称。
  • __meta_kubernetes_pod_container_port_number:容器端口的编号。
  • __meta_kubernetes_pod_container_port_protocol:容器端口的协议。
  • __meta_kubernetes_pod_ready:设置为 truefalse 以表示 pod 的就绪状态。
  • __meta_kubernetes_pod_phase:设置为生命周期中的PendingRunningSucceededFailedUnknown状态。详情参阅 pod 生命周期
  • __meta_kubernetes_pod_node_name:pod 调度到的节点的名称。
  • __meta_kubernetes_pod_host_ip:pod 对象的当前主机 IP。
  • __meta_kubernetes_pod_uid:pod 对象的 UID。
  • __meta_kubernetes_pod_controller_kind:pod 控制器的对象类型。
  • __meta_kubernetes_pod_controller_name:pod 控制器的名称。

endpoints

endpoints角色从服务列出的端点中发现 Target。对于每个 endpoint,为每个端口发现一个 Target。如果 endpoint 由 pod 支撑,则还会从 pod 中发现所有未绑定到端点端口的额外容器端口作为 Target。

可访问的元标签:

  • __meta_kubernetes_namespace:endpoint 对象的命名空间。
  • __meta_kubernetes_endpoints_name:endpoint 对象的名称。
  • __meta_kubernetes_endpoints_label_<labelname>:从 endpoint 对象获取的每个标签,任何不支持的字符转换为下划线。
  • __meta_kubernetes_endpoints_labelpresent_<labelname>:对于 endpoint 对象中的每个标签,将任何不支持的字符转换为下划线的true
  • __meta_kubernetes_endpoints_annotation_<annotationname>:从 endpoint 对象获取的每个注解。
  • __meta_kubernetes_endpoints_annotationpresent_<annotationname>:对于 endpoint 对象中的每个注解,设置为true
  • 对于直接从 endpoint 列表中发现的所有 Target(那些不是从底层 pod 推断出来的),以下标签附加:
    • __meta_kubernetes_endpoint_hostname:endpoint 的主机名。
    • __meta_kubernetes_endpoint_node_name:托管 endpoint 的节点名称。
    • __meta_kubernetes_endpoint_ready:设置为truefalse以表示 endpoint 的就绪状态。
    • __meta_kubernetes_endpoint_port_name:endpoint 端口的名称。
    • __meta_kubernetes_endpoint_port_protocol:endpoint 端口的协议。
    • __meta_kubernetes_endpoint_address_target_kind:endpoint 目标的对象类型。
    • __meta_kubernetes_endpoint_address_target_name:endpoint 引用对象的名称。
  • 如果 endpoint 属于服务,则附加所有role: service发现的标签。
  • 对于所有由 pod 支持的 Target,附加所有role: pod发现的标签。

endpointslice

endpointslice 角色从现有的 endpointslice 中发现 Target。对于 endpointslice 对象中引用的每个端点地址,发现一个 Target。如果端点由 pod 支撑,则还会从 pod 中发现所有未绑定到端点端口的额外容器端口作为 Target。

可访问的元标签:

  • __meta_kubernetes_namespace:端点对象的命名空间。
  • __meta_kubernetes_endpointslice_name:endpointslice 对象的名称。
  • __meta_kubernetes_endpointslice_label_<labelname>:从 endpointslice 对象获取的每个标签,任何不支持的字符转换为下划线。
  • __meta_kubernetes_endpointslice_labelpresent_<labelname>:对于 endpointslice 对象中的每个标签,将任何不支持的字符转换为下划线的 true
  • __meta_kubernetes_endpointslice_annotation_<annotationname>:从 endpointslice 对象获取的每个注解。
  • __meta_kubernetes_endpointslice_annotationpresent_<annotationname>:对于 endpointslice 对象中的每个注解,设置为 true
  • 对于直接从 EndpointSlice 列表中发现的所有 Target(那些不是从底层 pod 推断出来的),以下标签附加:
    • __meta_kubernetes_endpointslice_address_target_kind:引用对象的类型。
    • __meta_kubernetes_endpointslice_address_target_name:引用对象的名称。
    • __meta_kubernetes_endpointslice_address_type:目标地址的 IP 协议簇。
    • __meta_kubernetes_endpointslice_endpoint_conditions_ready:设置为truefalse以表示引用端点的就绪状态。
    • __meta_kubernetes_endpointslice_endpoint_conditions_serving:设置为truefalse以表示引用端点的服务状态。
    • __meta_kubernetes_endpointslice_endpoint_conditions_terminating:设置为truefalse以表示引用端点的终止状态。
    • __meta_kubernetes_endpointslice_endpoint_topology_kubernetes_io_hostname:托管引用端点的节点名称。
    • __meta_kubernetes_endpointslice_endpoint_topology_present_kubernetes_io_hostname:显示引用对象是否具有 kubernetes.io/hostname 注释的标志。
    • __meta_kubernetes_endpointslice_endpoint_hostname:引用端点的主机名。
    • __meta_kubernetes_endpointslice_endpoint_node_name:托管引用端点的节点名称。
    • __meta_kubernetes_endpointslice_endpoint_zone:引用端点所在的区(仅当使用 discovery.k8s.io/v1 API 组时可用)。
    • __meta_kubernetes_endpointslice_port:引用端点的端口。
    • __meta_kubernetes_endpointslice_port_name:引用端点的命名端口。
    • __meta_kubernetes_endpointslice_port_protocol:引用端点的协议。
  • 如果端点属于服务,则附加所有 role: service 发现的标签。
  • 对于所有由 pod 支持的 Target,附加所有 role: pod 发现的标签。

ingress

ingress 角色为每个 Ingress 的每个路径发现 Target。这通常适用于对入口进行黑盒监控。Target 地址将设置为入口规范中指定的主机。

可用的元标签:

  • __meta_kubernetes_namespace: Ingress 对象的命名空间。
  • __meta_kubernetes_ingress_name: Ingress 对象的名称。
  • __meta_kubernetes_ingress_label_<labelname>: Ingress 对象的每个标签,任何不支持的字符转换为下划线。
  • __meta_kubernetes_ingress_labelpresent_<labelname>: Ingress 对象中带有任何不支持字符的每个标签的布尔值。
  • __meta_kubernetes_ingress_annotation_<annotationname>: Ingress 对象中的每个注解。
  • __meta_kubernetes_ingress_annotationpresent_<annotationname>: Ingress 对象中带有任何不支持字符的每个注解的布尔值。
  • __meta_kubernetes_ingress_class_name: 如果存在,则为 Ingress 规范中的类名。
  • __meta_kubernetes_ingress_scheme: Ingress 协议方案,如果设置了 TLS 配置则为https。默认为http
  • __meta_kubernetes_ingress_path: Ingress 规范中的路径。默认为/

以下是针对Kubernetes发现的配置选项:

# 访问 Kubernetes API 的信息。
# API 服务器地址。如果为空,Prometheus 假定运行在集群内部,并自动发现 API 服务器并使用 pod 的 CA 证书和凭据文件(/var/run/secrets/kubernetes.io/serviceaccount/)。
[ api_server: <host> ]
# 应当被发现的 Kubernetes 实体的角色。可以是 endpoints、endpointslice、service、pod、node 或 ingress。
role: <string>
# 可选的 Kubeconfig 文件路径。
# 注意:api_server 和 kube_config互斥。
[ kubeconfig_file: <filename> ]
# 可选的认证信息用于向API服务器认证。
# 注意:basic_auth和authorization选项互斥。
# password和password_file互斥。
# 可选的 HTTP 基本认证信息。
basic_auth:
[ username: <string> ]
[ password: <secret> ]
[ password_file: <string> ]
# 可选的 Authorization 头配置。
authorization:
# 设置认证类型。
[ type: <string> | default: Bearer ]
# 设置凭证。与`credentials_file`互斥。
[ credentials: <secret> ]
# 设置凭证从配置文件中读取的凭证。与`credentials`互斥。
[ credentials_file: <filename> ]
# 可选的 OAuth 2.0 配置。
# 不能同时与 basic_auth 或 authorization 一起使用。
oauth2:
[ <oauth2> ]
# 可选的代理 URL。
[ proxy_url: <string> ]
# 以逗号分隔的字符串,可以包含 IP、CIDR 表示法、域名,应排除代理。IP 和域名可以包含端口号。
[ no_proxy: <string> ]
# 使用环境变量指示的代理 URL(HTTP_PROXY, https_proxy, HTTPs_PROXY, https_proxy和no_proxy)
[ proxy_from_environment: <boolean> | default: false ]
# 指定CONNECT请求期间发送到代理的头部。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]
# 配置是否遵循 HTTP 3xx 重定向。
[ follow_redirects: <boolean> | default = true ]
# 是否启用HTTP2。
[ enable_http2: <boolean> | default: true ]
# TLS配置。
tls_config:
[ <tls_config> ]
# 可选的命名空间发现。如果省略,则使用所有命名空间。
namespaces:
own_namespace: <boolean>
names:
[ - <string> ]
# 可选的标签和字段选择器,限制发现过程以获取可用资源的子集。
# 有关可能使用的过滤器,请参阅:
# https://kubernetes.io/docs/concepts/overview/working-with-objects/field-selectors/
# 和 https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/。
# endpoints角色支持pod和endpoint选择器。
# pod角色在配置`attach_metadata: {node: true}`时支持节点选择器。
# 其他角色仅支持匹配角色本身的筛选器(例如,node角色只能包含节点选择器)。
# 注意:在决定使用字段/标签选择器时,请确保这是最佳方法 - 这将防止 Prometheus 重用单个列表/监视。这可能导致对 Kubernetes API 的负载更大,因为对于每个选择器组合,将有额外的 LIST/WATCH 动作。另一方面,如果你只想监控大型集群中的小部分 pod,则推荐使用选择器。
# 配置选择器取决于具体的情况。
[ selectors:
[ - role: <string>
[ label: <string> ]
[ field: <string> ] ]]
# 可选的元数据附加到发现的 Target。如果省略,则不附加额外的元数据。
attach_metadata:
# 将节点元数据附加到发现的 Target。适用于角色:pod、endpoints、endpointslice。
# 当设置为 true 时,Prometheus 必须有权获取 Nodes。
[ node: <boolean> | default = false ]

有关详细示例配置文件,请参阅 此Prometheus配置文件示例

你可能希望查看第三方的 Prometheus Operator,它在 Kubernetes 之上自动化了 Prometheus 的设置。

<kuma_sd_config>

Kuma SD 配置允许从 Kuma 控制平面检索抓取 Target。

此 SD 根据Kuma Dataplane 代理,通过 MADS v1(监控采集任务发现服务)xDS API 进行发现,并将在具有 Prometheus 功能的网格内部为每个代理创建 Target。

每个 Target 可用的元标签如下:

  • __meta_kuma_mesh:代理的网格名称
  • __meta_kuma_dataplane:代理的名称
  • __meta_kuma_service:代理关联的服务名称
  • __meta_kuma_label_<tagname>:代理的每个标签

以下为 Kuma 监控采集任务发现配置选项:

# Kuma 控制平面 MADS xDS 服务器的地址。
server: <string>
# 客户端 ID 由 Kuma 控制平面用于为特定 Prometheus 后端计算监控采集任务。当迁移至多个 Prometheus 后端之间或为每个网格拥有单独后端时,这很有用。
# 若未指定,则系统主机名/FQDN可用时使用,否则使用`prometheus`。
[ client_id: <string> ]
# 检索更新请求之间的等待时间。
[ refresh_interval: <duration> | 默认值 = 30s ]
# 监控采集任务刷新的时间间隔。
[ fetch_timeout: <duration> | 默认值 = 2m ]
# 可选的代理 URL。
[ proxy_url: <string> ]
# 包含 IP 地址、CIDR 表示法、域名的逗号分隔字符串,这些应该从代理中排除。IP 和域名可以包含端口号。
[ no_proxy: <string> ]
# 使用环境变量(HTTP_PROXY, https_proxy, HTTPs_PROXY, https_proxy 和 no_proxy)指示的代理 URL。
[ proxy_from_environment: <boolean> | 默认值: false ]
# 在 CONNECT 请求期间发送到代理的自定义头设置。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]
# TLS 配置。
tls_config:
[ <tls_config> ]
# 用于与 Docker 守护进程认证的配置信息。
# `basic_auth`和`authorization`选项互斥。
# `password`和`password_file`选项互斥。
# 可选的 HTTP 基本认证信息。
basic_auth:
[ username: <string> ]
[ password: <secret> ]
[ password_file: <string> ]
# 可选的`Authorization`头部配置。
authorization:
# 设置认证类型。
[ type: <string> | default: Bearer ]
# 设置凭据。与`credentials_file`互斥。
[ credentials: <secret> ]
# 设置凭据并从配置文件中读取凭据。
# 与`credentials`互斥。
[ credentials_file: <filename> ]
# 可选的 OAuth 2.0 配置。
# 不能同时与`basic_auth`或`authorization`一起使用。
oauth2:
[ <oauth2> ]
# 配置HTTP请求是否遵循 HTTP 3xx 重定向。
[ follow_redirects: <boolean> | default = true ]
# 是否启用HTTP2。
[ enable_http2: <boolean> | default: true ]

[relabel_config]:推荐且更强大的方式是使用重标阶段来过滤代理和用户自定义标签。

<lightsail_sd_config>

Lightsail SD 配置允许从 AWS Lightsail 实例获取抓取 Target。默认使用私有 IP 地址,但可以通过重标签更改以使用公有 IP 地址。

重标签过程中,Target 上可用的元标签如下:

  • __meta_lightsail_availability_zone:实例运行的可用区
  • __meta_lightsail_blueprint_id:Lightsail 模板 ID
  • __meta_lightsail_bundle_id:Lightsail 打包 ID
  • __meta_lightsail_instance_name:Lightsail 实例名称
  • __meta_lightsail_instance_state:Lightsail 实例状态
  • __meta_lightsail_instance_support_code:Lightsail 实例支持代码
  • __meta_lightsail_ipv6_addresses:如果存在,实例网络接口分配的 IPv6 地址的逗号分隔列表
  • __meta_lightsail_private_ip:实例的私有 IP 地址
  • __meta_lightsail_public_ip:如果可用,则为实例的公有 IP 地址
  • __meta_lightsail_region:实例所在的区域
  • __meta_lightsail_tag_<tagkey>:实例的每个标签值

以下是 Lightsail 发现配置选项:

# 访问 Lightsail API 的信息。
# AWS 区域。如果为空,则使用实例元数据中的区域。
[ region: <string> ]
# 可自定义的端点。
[ endpoint: <string> ]
# AWS API 密钥。如果为空,则使用环境变量 `AWS_ACCESS_KEY_ID` 和 `AWS_SECRET_ACCESS_KEY`。
[ access_key: <string> ]
[ secret_key: <secret> ]
# 使用命名 AWS 网络连接到 API 的 AWS 环境配置文件。
[ profile: <string> ]
# AWS 角色 ARN,作为使用 AWS API 密钥的替代方案。
[ role_arn: <string> ]
# 刷新间隔,用于重读实例列表。
[ refresh_interval: <duration> | default = 60s ]
# 从其抓取指标的端口。如果使用公有 IP 地址,则必须在 relabel 规则中指定此端口。
[ port: <int> | default = 80 ]
# 用于向 Lightsail API 认证的信息。注意,`basic_auth`、`authorization` 和 `oauth2` 选项互斥。
# `password` 和 `password_file` 也互斥。
# 选填的 HTTP 基本认证信息,目前不支持 AWS。
basic_auth:
[ username: <string> ]
[ password: <secret> ]
[ password_file: <string> ]
# 选填的 `Authorization` 头部配置,目前不支持 AWS。
authorization:
# 设置认证类型。
[ type: <string> | default: Bearer ]
# 设置凭证。与 `credentials_file` 相互排斥。
[ credentials: <secret> ]
# 设置凭证为从配置的文件中读取的凭证。与 `credentials` 相互排斥。
[ credentials_file: <filename> ]
# 选填的 OAuth 2.0 配置,目前不支持 AWS。
oauth2:
[ <oauth2> ]
# 选填的代理 URL。
[ proxy_url: <string> ]
# 可以包含 IP、CIDR 表示法和域名的逗号分隔字符串,应排除代理。IP 和域名可以包含端口号。
[ no_proxy: <string> ]
# 根据环境变量(HTTP_PROXY、https_proxy、HTTPs_PROXY、https_proxy 和 no_proxy)使用代理 URL。
[ proxy_from_environment: <boolean> | default: false ]
# 指定 CONNECT 请求期间发送给代理的头部。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]
# 配置 HTTP 请求是否遵循 HTTP 3xx 重定向。
[ follow_redirects: <boolean> | default = true ]
# 是否启用 HTTP2。
[ enable_http2: <boolean> | default: true ]
# TLS 配置。
tls_config:
[ <tls_config> ]

<linode_sd_config>

Linode SD 配置允许通过 Linode 的 Linode APIv4 获取抓取 Target。此服务发现默认使用公共IPv4地址,可以通过重标签进行更改,如 Linode 的 Prometheus linode-sd 配置文件中所示的示例。

在抓取 Target 上的元标签包括以下内容,在重标签配置中进行:

  • __meta_linode_instance_id:Linode 实例的 ID
  • __meta_linode_instance_label:Linode 实例的标签
  • __meta_linode_image:Linode 实例的镜像的slug
  • __meta_linode_private_ipv4:Linode 实例的私有IPv4
  • __meta_linode_public_ipv4:Linode 实例的公共IPv4
  • __meta_linode_public_ipv6:Linode 实例的公共IPv6
  • __meta_linode_private_ipv4_rdns:Linode 实例的第一个私有 IPv4 的反向 DNS
  • __meta_linode_public_ipv4_rdns:Linode 实例的第一个公共 IPv4 的反向 DNS
  • __meta_linode_public_ipv6_rdns:Linode 实例的第一个公共 IPv6 的反向 DNS
  • __meta_linode_region:Linode 实例所在的区域
  • __meta_linode_type:Linode 实例的类型
  • __meta_linode_status:Linode 实例的状态
  • __meta_linode_tags:Linode 实例的标签列表,由分隔符连接
  • __meta_linode_group:Linode 实例所属的显示组
  • __meta_linode_gpus:Linode 实例的 GPU 数量
  • __meta_linode_hypervisor:驱动 Linode 实例的虚拟化软件
  • __meta_linode_backups:Linode 实例的备份服务状态
  • __meta_linode_specs_disk_bytes:Linode 实例可访问的存储空间大小
  • __meta_linode_specs_memory_bytes:Linode 实例可访问的 RAM 大小
  • __meta_linode_specs_vcpus:Linode 实例可访问的VCPUs数量
  • __meta_linode_specs_transfer_bytes:Linode 实例每月分配的网络传输量
  • __meta_linode_extra_ips:Linode 实例分配的所有额外IPv4地址的列表,由分隔符连接
  • __meta_linode_ipv6_ranges:Linode 实例分配的IPv6范围和掩码的列表,由分隔符连接
# 用于与 API 服务器认证的信息。
# 注意,`basic_auth`和`authorization`选项是互斥的。
# `password`和`password_file`是互斥的。
# 注意:Linode APIv4 令牌必须创建具有以下权限:'linodes:read_only','ips:read_only'和'events:read_only'
# 可选的 HTTP 基本认证信息,当前不支持 Linode APIv4。
basic_auth:
[ username: <string> ]
[ password: <secret> ]
[ password_file: <string> ]
# 可选的`Authorization`头部配置。
authorization:
# 设置认证类型。
[ type: <string> | default:Bearer ]
# 设置凭证。它与`credentials_file`互斥。
[ credentials: <secret> ]
# 通过配置的文件读取凭证。
# 它与`credentials`互斥。
[ credentials_file: <filename> ]
# 可选的 OAuth 2.0 配置。
# 不能同时与 basic_auth 或 authorization 一起使用。
oauth2:
[ <oauth2> ]
# 可选的区域过滤器。
[ region: <string> ]
# 可选的代理URL。
[ proxy_url: <string> ]
# 包含IP、CIDR表示法、域名的逗号分隔字符串,
# 应该从代理中排除。IP和域名可以包含端口号。
[ no_proxy: <string> ]
# 使用环境变量(HTTP_PROXY,https_proxy,HTTPs_PROXY,https_proxy和no_proxy)指示的代理 URL。
[ proxy_from_environment: <boolean> | 默认值:false ]
# 指定在CONNECT请求期间发送到代理的头部。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]
# 配置 HTTP 请求是否遵循 HTTP 3xx 重定向。
[ follow_redirects: <boolean> | default = true ]
# 是否启用 HTTP2。
[ enable_http2: <boolean> | default:true ]
# TLS 配置。
tls_config:
[ <tls_config> ]
# 从哪个端口抓取指标数据。
[ port: <integer> | defualt = 80 ]
# Linode 实例标签连接成标签标签的字符串。
[ tag_separator: <string> | default = , ]
# Linode 实例刷新的时间间隔。
[ refresh_interval: <duration> | default = 60秒 ]

<marathon_sd_config>

Marathon SD 配置允许通过使用 Marathon REST API 来检索抓取 Target。Prometheus 将定期检查 REST 端点以获取当前运行的任务,并为至少有一个健康任务的应用创建一个 Target 组。

relabel_config 中的 Target 上可用的元标签包括:

  • __meta_marathon_app:应用名称(将斜杠替换为短横线)
  • __meta_marathon_image:使用的 Docker 镜像名称(如果可用)
  • __meta_marathon_task:Mesos 任务ID
  • __meta_marathon_app_label_<labelname>:附加到应用的 Marathon 标签,任何不支持的字符转换为下划线
  • __meta_marathon_port_definition_label_<labelname>:端口定义标签,任何不支持的字符转换为下划线
  • __meta_marathon_port_mapping_label_<labelname>:端口映射标签,任何不支持的字符转换为下划线
  • __meta_marathon_port_index:端口索引号(例如,对于PORT1,为1

以下是 Marathon 发现配置选项:

# 要用于联系 Marathon 服务器的 URL 列表。
# 至少需要提供一个服务器 URL。
servers:
- <string>
# 定期检查间隔
[ refresh_interval: <duration> | default = 30s ]
# 用于基于令牌的身份验证的可选认证信息
# https://docs.mesosphere.com/1.11/security/ent/iam-api/#passing-an-authentication-token
# 它与`auth_token_file`和其他身份验证机制互斥。
[ auth_token: <secret> ]
# 用于基于令牌的身份验证的可选认证信息
# https://docs.mesosphere.com/1.11/security/ent/iam-api/#passing-an-authentication-token
# 它与`auth_token`和其他身份验证机制互斥。
[ auth_token_file: <filename> ]
# 在每个请求上设置`Authorization`头,带有配置的用户名和密码。
# 这与其他身份验证机制互斥。
# password 和 password_file 互斥。
basic_auth:
[ username: <string> ]
[ password: <secret> ]
[ password_file: <string> ]
# 可选的`Authorization`头配置。
# 注意:当前 DC/OS marathon 版本(v1.11.0)不支持标准的`Authentication`头,请使用`auth_token`或`auth_token_file`代替。
authorization:
# 设置认证类型。
[ type: <string> | default: Bearer ]
# 设置凭证。与`credentials_file`互斥。
[ credentials: <secret> ]
# 设置凭证为从配置的文件中读取的凭证。
# 与`credentials`互斥。
[ credentials_file: <filename> ]
# 可选的 OAuth 2.0 配置。
# 不能与 basic_auth 或 authorization 同时使用。
oauth2:
[ <oauth2> ]
# 配置 HTTP 请求是否遵循 HTTP 3xx 重定向。
[ follow_redirects: <boolean> | default = true ]
# 是否启用 HTTP2。
[ enable_http2: <boolean> | default: true ]
# TLS 配置用于连接到 Marathon 服务器
tls_config:
[ <tls_config> ]
# 可选代理 URL。
[ proxy_url: <string> ]
# 包含 IP、CIDR 表示法、域名的逗号分隔字符串,这些应从代理中排除。IP 和域名可以包含端口号。
[ no_proxy: <string> ]
# 使用环境变量(HTTP_PROXY, https_proxy, HTTPs_PROXY, https_proxy和no_proxy)指示的代理 URL。
[ proxy_from_environment: <boolean> | default: false ]
# 指定在 CONNECT 请求期间向代理发送的头部。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]

默认情况下,Marathon 中列出的所有应用都将被 Prometheus 抓取。如果你的服务中并非所有都提供Prometheus 指标,则可以通过 Marathon 标签和 Prometheus 重标签来控制实际将被抓取的实例。有关如何设置你的 Marathon 应用和 Prometheus 配置的实用示例,请参阅 Prometheus marathon-sd 配置文件

默认情况下,所有应用都会作为 Prometheus 中的一个单一采集任务显示(在配置文件中指定的那个),也可以通过重标签进行更改。

<nerve_sd_config>

Nerve SD配置允许从 AirBnB 的 Nerve中检索抓取 Target,这些 Target 存储在 Zookeeper 中。

重标签期间,Target 上可用的元标签如下:

  • __meta_nerve_path:Zookeeper 中端点节点的完整路径
  • __meta_nerve_endpoint_host:端点的主机名
  • __meta_nerve_endpoint_port:端点的端口号
  • __meta_nerve_endpoint_name:端点的名称
# Zookeeper 服务器。
servers:
- <host>
# 可以指向单个服务或服务树的根部。
paths:
- <string>
[ timeout: <duration> | default = 10s ]

<nomad_sd_config>

Nomad SD 配置允许从 Nomad 的服务 API 检索抓取 Target。

重标签期间,Target 上可用的元标签如下:

  • __meta_nomad_address:Target 的服务地址
  • __meta_nomad_dc:Target的数据中心名称
  • __meta_nomad_namespace:Target的命名空间
  • __meta_nomad_node_id:为 Target定义的节点名称
  • __meta_nomad_service:Target所属的服务名称
  • __meta_nomad_service_address:Target 的服务地址
  • __meta_nomad_service_id:Target 的服务ID
  • __meta_nomad_service_port:Target 的服务端口
  • __meta_nomad_tags:Target 的标签列表,由分隔符连接
# 访问 Nomad API 所需的信息。应按照 Nomad 文档要求进行定义。
[ allow_stale: <boolean> | default = true ]
[ namespace: <string> | default = default ]
[ refresh_interval: <duration> | default = 60s ]
[ region: <string> | default = global ]
[ server: <host> ]
[ tag_separator: <string> | default = ,]
# 认证信息用于认证到 Nomad 服务器。
# 注意,`basic_auth`、`authorization`和`oauth2`选项是互斥的。
# `password`和`password_file`也是互斥的。
# HTTP 基本认证信息。
basic_auth:
[ username: <string> ]
[ password: <secret> ]
[ password_file: <string> ]
# `Authorization`头配置。
[ type: <string> | default: Bearer ]
[ credentials: <secret> ]
[ credentials_file: <filename> ]
# OAuth 2.0 配置。
oauth2:
[ <oauth2> ]
# 代理URL。
[ proxy_url: <string> ]
# 包含 IP、CIDR 表示法、域名的逗号分隔字符串,这些应该从代理中排除。IP 和域名可以包含端口号。
[ no_proxy: <string> ]
# 根据环境变量(HTTP_PROXY、https_proxy、HTTPs_PROXY、https_proxy和no_proxy)使用代理 URL。
[ proxy_from_environment: <boolean> | default: false ]
# 指定 CONNECT 请求期间发送给代理的头部。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]
# 是否启用 HTTP 重定向。
[ follow_redirects: <boolean> | default = true ]
# 是否启用 HTTP2。
[ enable_http2: <boolean> | default: true ]
# TLS 配置。
tls_config:
[ <tls_config> ]

<serverset_sd_config>

ServerSet SD 配置允许从存储在 Zookeeper 中的服务器集获取抓取 Target。服务器集通常由 FinagleAurora 使用。

以下元标签在重标签期间可以使用:

  • __meta_serverset_path:Zookeeper 中 ServerSet 成员节点的完整路径
  • __meta_serverset_endpoint_host:默认端点的主机
  • __meta_serverset_endpoint_port:默认端点的端口
  • __meta_serverset_endpoint_host_<endpoint>:给定端点的主机
  • __meta_serverset_endpoint_port_<endpoint>:给定端点的端口
  • __meta_serverset_shard:成员的分片号
  • __meta_serverset_status:成员的状态
# Zookeeper 服务器。
servers:
- <host>
# 路径可以指向单个服务器集或服务器集树的根。
paths:
- <string>
[ timeout: <duration> | default = 10s ]

ServerSet 数据必须以 JSON 格式存在,当前不支持 Thrift 格式。

<triton_sd_config>

Triton SD 配置允许从容器监控发现端点获取抓取 Target。

可以配置以下<triton_role>类型之一来发现 Target:

container

container角色每为“虚拟机”中的“帐户”发现一个 Target。这些是SmartOS分区或以 lx/KVM/bhyve 标记的分区。

以下元标签在重标签期间可用:

  • __meta_triton_groups:Target 所属组的列表,用逗号分隔
  • __meta_triton_machine_alias:目标容器的别名
  • __meta_triton_machine_brand:目标容器的品牌
  • __meta_triton_machine_id:目标容器的UUID
  • __meta_triton_machine_image:目标容器的镜像
  • __meta_triton_server_id:目标容器运行的服务器 UUID

cn

cn角色在 Triton 中发现一个针对每个计算节点(也被称为“服务器”或“全局区域”)的 Target。account必须是 Triton Operator,并且当前需要至少拥有一个container的权限。

在 Target 上的元标签在重标签期间可用:

  • __meta_triton_machine_alias:目标主机名(需要 triton-cmon 1.7.0 或更高版本)
  • __meta_triton_machine_id:目标 UUID

以下是关于 Triton 发现配置选项的详细信息:

# 访问 Triton 发现 API 所需的信息。
# 用于发现新 Target 的帐户。
account: <string>
# 要发现的 Target 类型,可以设置为:
# * "container",用于发现运行在 Triton 上的虚拟机(SmartOS 区域、lx/KVM/bhyve 品牌化的区域)
# * "cn",用于发现构成 Triton 基础设施的计算节点(服务器/全局区域)
[ role : <string> | default = "container" ]
# 应应用于 Target 的 DNS 后缀。
dns_suffix: <string>
# 这通常是与 dns_suffix 相同的值的 Triton 发现端点(例如,'cmon.us-east-3b.triton.zone')。
endpoint: <string>
# 获取目标时使用的组列表,仅在`role`等于`container`时支持。如果省略,则会抓取请求帐户拥有的所有容器。
groups:
[ - <string> ... ]
# 用于发现和指标抓取的端口。
[ port: <int> | default = 9163 ]
# 应用于刷新 Target 的间隔。
[ refresh_interval: <duration> | default = 60s ]
# Triton 发现 API 版本。
[ version: <int> | default = 1 ]
# TLS 配置。
tls_config:
[ <tls_config> ]

<eureka_sd_config>

Eureka SD 配置允许通过 Eureka REST API 获取抓取 Target。Prometheus 会周期性地检查REST端点,并为每个应用程序实例创建一个 Target。

在抓取数据时,Target 上可用的元标签包括:

  • __meta_eureka_app_name: 应用程序名称
  • __meta_eureka_app_instance_id: 应用程序实例 ID
  • __meta_eureka_app_instance_hostname: 实例的主机名
  • __meta_eureka_app_instance_homepage_url: 应用程序实例的主页 URL
  • __meta_eureka_app_instance_statuspage_url: 应用程序实例的状态页面 URL
  • __meta_eureka_app_instance_healthcheck_url: 应用程序实例的健康检查 URL
  • __meta_eureka_app_instance_ip_addr: 实例的 IP 地址
  • __meta_eureka_app_instance_vip_address: 实例的 VIP 地址
  • __meta_eureka_app_instance_secure_vip_address: 实例的加密 VIP 地址
  • __meta_eureka_app_instance_status: 实例状态
  • __meta_eureka_app_instance_port: 实例端口
  • __meta_eureka_app_instance_port_enabled: 端口启用状态
  • __meta_eureka_app_instance_secure_port: 加密端口地址
  • __meta_eureka_app_instance_secure_port_enabled: 加密端口启用状态
  • __meta_eureka_app_instance_country_id: 实例所在国家 ID
  • __meta_eureka_app_instance_metadata_<metadataname>: 应用程序实例元数据
  • __meta_eureka_app_instance_datacenterinfo_name: 实例的数据中心名称
  • __meta_eureka_app_instance_datacenterinfo_<metadataname>: 数据中心元数据

以下是 Eureka 发现配置选项:

# Eureka 服务器连接的 URL。
server: <string>
# 在每次请求中设置`Authorization`头,包含配置的用户名和密码。
# password 和 password_file 互斥。
basic_auth:
[ username: <string> ]
[ password: <secret> ]
[ password_file: <string> ]
# 可选的`Authorization`头配置。
authorization:
# 设置认证类型。
[ type: <string> | 默认值: Bearer ]
# 设置凭据。与`credentials_file`互斥。
[ credentials: <secret> ]
# 设置凭据来自配置文件中的凭据。
# 与`credentials`互斥。
[ credentials_file: <filename> ]
# 可选的 OAuth 2.0 配置。
# 不能同时使用 basic_auth 或 authorization。
oauth2:
[ <oauth2> ]
# 配置抓取请求的 TLS 设置。
tls_config:
[ <tls_config> ]
# 可选代理 URL。
[ proxy_url: <string> ]
# 包含 IP、CIDR 表示法、域名的逗号分隔字符串,这些应该从代理中排除。IP 和域名可以包含端口号。
[ no_proxy: <string> ]
# 使用环境变量(HTTP_PROXY, https_proxy, HTTPs_PROXY, https_proxy, no_proxy)指示的代理 URL。
[ proxy_from_environment: <boolean> | 默认值: false ]
# 指定在 CONNECT 请求期间发送到代理的头部。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]
# 配置 HTTP 请求是否遵循 HTTP 3xx 重定向。
[ follow_redirects: <boolean> | 默认值: true ]
# 是否启用 HTTP2。
[ enable_http2: <boolean> | 默认值: true ]
# 重新读取应用实例列表的时间间隔。
[ refresh_interval: <duration> | 默认值: 30s ]

查看 Prometheus eureka-sd配置文件示例,了解如何设置你的 Eureka 应用和 Prometheus 配置的实际用法。

<scaleway_sd_config>

在 Scaleway SD 配置中,可以从 Scaleway 实例裸金属服务获取抓取 Target。

以下是在重标签过程中可用的元标签:

实例角色

  • __meta_scaleway_instance_boot_type: 实例的启动类型
  • __meta_scaleway_instance_hostname: 实例的主机名
  • __meta_scaleway_instance_id: 实例的 ID
  • __meta_scaleway_instance_image_arch: 实例镜像的架构
  • __meta_scaleway_instance_image_id: 实例镜像的 ID
  • __meta_scaleway_instance_image_name: 实例镜像的名称
  • __meta_scaleway_instance_location_cluster_id: 实例位置的集群 ID
  • __meta_scaleway_instance_location_hypervisor_id: 实例位置的 hypervisor ID
  • __meta_scaleway_instance_location_node_id: 实例位置的节点 ID
  • __meta_scaleway_instance_name: 实例的名称
  • __meta_scaleway_instance_organization_id: 实例的组织 ID
  • __meta_scaleway_instance_private_ipv4: 实例的私有 IPv4 地址
  • __meta_scaleway_instance_project_id: 实例的项目 ID
  • __meta_scaleway_instance_public_ipv4: 实例的公有 IPv4 地址
  • __meta_scaleway_instance_public_ipv6: 实例的公有 IPv6 地址
  • __meta_scaleway_instance_region: 实例的区域
  • __meta_scaleway_instance_security_group_id: 实例的安全组 ID
  • __meta_scaleway_instance_security_group_name: 实例的安全组名称
  • __meta_scaleway_instance_status: 实例的状态
  • __meta_scaleway_instance_tags: 实例的标签列表(由分隔符连接)
  • __meta_scaleway_instance_type: 实例的商业类型
  • __meta_scaleway_instance_zone: 实例的区域(如:fr-par-1,完整列表在这里

此角色使用找到的第一个地址,按照以下顺序:私有IPv4、公有IPv4、公有IPv6。可以通过重写进行更改,如在 Prometheus Scaleway SD 配置文件中展示。

如果实例在重标签之前没有地址,则不会将其添加到 Target 列表中,也无法对其进行重写。

裸金属角色

  • __meta_scaleway_baremetal_id: 实例的ID
  • __meta_scaleway_baremetal_public_ipv4: 实例的公有IPv4地址
  • __meta_scaleway_baremetal_public_ipv6: 实例的公有IPv6地址
  • __meta_scaleway_baremetal_name: 实例的名称
  • __meta_scaleway_baremetal_os_name: 实例的操作系统名称
  • __meta_scaleway_baremetal_os_version: 实例的操作系统版本
  • __meta_scaleway_baremetal_project_id: 实例的项目ID
  • __meta_scaleway_baremetal_status: 实例的状态
  • __meta_scaleway_baremetal_tags: 实例的标签列表(由分隔符连接)
  • __meta_scaleway_baremetal_type: 实例的商业类型
  • __meta_scaleway_baremetal_zone: 实例的区域(如:fr-par-1,完整列表 在这里

默认情况下,此角色使用公有IPv4地址。可以通过重写进行更改,如在 Prometheus Scaleway SD 配置文件中展示。

以下是 Scaleway 发现的配置选项:

# 使用的访问密钥。https://console.scaleway.com/project/credentials
access_key: <string>
# 当列出 Target 时使用的秘密密钥。https://console.scaleway.com/project/credentials
# 它与 `secret_key_file` 相互排斥。
[ secret_key: <secret> ]
# 设置通过配置的文件读取凭证时的秘密密钥。
# 它与 `secret_key` 相互排斥。
[ secret_key_file: <filename> ]
# Target 项目的 ID。
project_id: <string>
# 要检索的 Target 角色。必须是 `instance` 或 `baremetal`。
role: <string>
# 从其抓取指标的端口。
[ port: <int> | default = 80 ]
# 做服务器列表请求时使用的 API URL。
[ api_url: <string> | default = "https://api.scaleway.com" ]
# 区域是你的 Target 的可用性区域(例如:fr-par-1)。
[ zone: <string> | default = fr-par-1 ]
# 名称过滤器用于在服务器列表请求上应用筛选条件(作为 LIKE 工作)。
[ name_filter: <string> ]
# 标签过滤器用于在服务器列表请求上应用筛选条件(服务器需要具有所有定义的标签才能被列出)。
tags_filter:
[ - <string> ]
# 重新读取 Target 列表的间隔。
[ refresh_interval: <duration> | default = 60s ]
# 是否启用 HTTP 请求跟随 HTTP 3xx 重定向。
[ follow_redirects: <boolean> | default = true ]
# 是否启用 HTTP2。
[ enable_http2: <boolean> | default: true ]
# 可选代理URL。
[ proxy_url: <string> ]
# 包含 IP、CIDR表示法、域名的逗号分隔字符串,
# 应排除代理。IP 和域名可以包含端口号。
[ no_proxy: <string> ]
# 通过环境变量(HTTP_PROXY、https_proxy、HTTPs_PROXY、https_proxy和no_proxy)指定代理 URL。
[ proxy_from_environment: <boolean> | default: false ]
# 指定在 CONNECT 请求期间发送给代理的头部。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]
# TLS 配置。
tls_config:
[ <tls_config> ]

请注意,你需要将<string><int><secret><filename>等替换为你实际需要的值。

<uyuni_sd_config>

Uyuni SD 配置允许通过 Uyuni API 从管理系统的托管Target 中检索抓取 Target。

重标签期间,Target 上可用的元标签如下:

  • __meta_uyuni_endpoint_name: 应用端点的名称
  • __meta_uyuni_exporter: 为 Target 暴露指标的 Exporter
  • __meta_uyuni_groups: Target 的系统组
  • __meta_uyuni_metrics_path: Target 指标路径
  • __meta_uyuni_minion_hostname: Uyuni 客户端的主机名
  • __meta_uyuni_primary_fqdn: Uyuni 客户端的主要 FQDN
  • __meta_uyuni_proxy_module: 如果为 Target 配置 Exporter 代理,则为此模块名
  • __meta_uyuni_scheme: 请求使用的协议方案
  • __meta_uyuni_system_id: 客户端的系统ID

以下是针对 Uyuni 发现的配置选项:

# 连接到 Uyuni 服务器的 URL。
server: <string>
# 使用来认证到 Uyuni API 的请求的凭证。
username: <string>
password: <secret>
# 过滤符合条件系统的 entitlement 字符串。
[ entitlement: <string> | default = monitoring_entitled ]
# Uyuni 组名称如何组合成 groups 标签的字符串。
[ separator: <string> | default = , ]
# 重新读取托管 Target 列表的时间间隔。
[ refresh_interval: <duration> | default = 60s ]
# 选填的基本 HTTP 认证信息,当前不被 Uyuni 支持。
basic_auth:
[ username: <string> ]
[ password: <secret> ]
[ password_file: <string> ]
# 选填的 Authorization 头部配置,当前不被 Uyuni 支持。
authorization:
# 设置认证类型。
[ type: <string> | default: Bearer ]
# 设置凭证。与`credentials_file`互斥。
[ credentials: <secret> ]
# 设置凭证来自配置文件中读取的凭证。与`credentials`互斥。
[ credentials_file: <filename> ]
# 选填的 OAuth 2.0 配置,当前不被 Uyuni 支持。
# 不能同时使用 basic_auth 或 authorization。
oauth2:
[ <oauth2> ]
# 选填的代理 URL。
[ proxy_url: <string> ]
# 包含 IP、CIDR 表示法、域名的逗号分隔字符串,这些应从代理中排除。IP 和域名可以包含端口号。
[ no_proxy: <string> ]
# 通过环境变量(HTTP_PROXY, https_proxy, HTTPs_PROXY, https_proxy, no_proxy)使用代理 URL。
[ proxy_from_environment: <boolean> | default: false ]
# 指定在 CONNECT 请求期间发送给代理的头部。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]
# 配置 HTTP 请求是否遵循 HTTP 3xx 重定向。
[ follow_redirects: <boolean> | default = true ]
# 是否启用 HTTP2。
[ enable_http2: <boolean> | default: true ]
# TLS 配置。
tls_config:
[ <tls_config> ]

查看 Uyuni Prometheus配置文件以获取如何设置 Uyuni Prometheus 配置的实际示例。

<vultr_sd_config>

Vultr SD 配置允许从 Vultr 获取抓取 Target。

默认情况下,此服务发现使用主 IPv4 地址,可以通过重标签进行更改,如在 Vultr 的 Prometheus vultr-sd 配置文件中展示的那样。

以下是在重标签期间 Target 上可用的元标签:

  • __meta_vultr_instance_id:Vultr 实例的唯一 ID。
  • __meta_vultr_instance_label:用户提供的此实例的标签。
  • __meta_vultr_instance_os:操作系统名称。
  • __meta_vultr_instance_os_id:此实例使用的操作系统 ID。
  • __meta_vultr_instance_region:实例所在区域 ID。
  • __meta_vultr_instance_plan:唯一标识计划的 ID。
  • __meta_vultr_instance_main_ip:主 IPv4 地址。
  • __meta_vultr_instance_internal_ip:私有 IP 地址。
  • __meta_vultr_instance_main_ipv6:主 IPv6 地址。
  • __meta_vultr_instance_features:可用给实例的功能列表。
  • __meta_vultr_instance_tags:与实例关联的标签列表。
  • __meta_vultr_instance_hostname:此实例的主机名。
  • __meta_vultr_instance_server_status:服务器健康状态。
  • __meta_vultr_instance_vcpu_count:虚拟 CPU 的数量。
  • __meta_vultr_instance_ram_mb:内存大小(MB)。
  • __meta_vultr_instance_disk_gb:磁盘大小(GB)。
  • __meta_vultr_instance_allowed_bandwidth_gb:每月带宽配额(GB)。
# 使用来认证到 API 服务器的身份信息。
# 注意,`basic_auth`和`authorization`选项是互斥的。
# `password`和`password_file`也是互斥的。
# 可选的 HTTP 基本认证信息,目前不支持 Vultr。
basic_auth:
[ username: <string> ]
[ password: <secret> ]
[ password_file: <string> ]
# 可选的`Authorization`头配置。
authorization:
# 设置认证类型。
[ type: <string> | default: Bearer ]
# 设置凭据。它与`credentials_file`互斥。
[ credentials: <secret> ]
# 设置凭据为从配置的文件中读取的凭据。
# 它与`credentials`互斥。
[ credentials_file: <filename> ]
# 可选的OAuth 2.0配置。
# 不能同时与basic_auth或authorization一起使用。
oauth2:
[ <oauth2> ]
# 可选的代理URL。
[ proxy_url: <string> ]
# 包含IP、CIDR表示法、域名的逗号分隔字符串,这些应该从代理中排除。IP和域名可以包含端口号。
[ no_proxy: <string> ]
# 使用环境变量(HTTP_PROXY, https_proxy, HTTPs_PROXY, https_proxy, no_proxy)指示的代理URL。
[ proxy_from_environment: <boolean> | default: false ]
# 指定在CONNECT请求期间发送给代理的请求头。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]
# 配置 HTTP 请求是否遵循 HTTP 3xx 重定向。
[ follow_redirects: <boolean> | default = true ]
# 是否启用 HTTP2。
[ enable_http2: <boolean> | default: t rue ]
# TLS 配置。
tls_config:
[ <tls_config> ]
# 从哪些端口抓取指标数据。
[ port: <integer> | default = 80 ]
# 刷新实例的时间间隔。
[ refresh_interval: <duration> | default = 60秒 ]

<static_config>

static_config允许指定 Target 列表和它们的共同标签集。这是在收集配置中指定静态 Target 的标准方式。

# 静态配置中指定的 Target。
targets:
[ - '<host>' ]
# 指派给从 Target 抓取的所有指标的标签。
labels:
[ <labelname>: <labelvalue> ... ]

<relabel_config>

Target 重标签(target relabeling)是一个强大的工具,在 Target 被抓取之前动态地重写其标签集。每份收集配置可以配置多个重标签。这些步骤按配置文件中出现的顺序依次应用于每个 Target 的标签集。

初始状态下,除了配置的 Target 标签外,Target 的job标签设置为对应收集配置的job_name 值。__address__标签设置为 Target 的 <host>:<port> 地址。 标签重写完成后,默认情况下,如果没有设置,则将instance标签默认设置为__address__

__scheme____metrics_path__标签分别设置为 Target 的方案和指标路径,如在scrape_config 中指定。

如在scrape_config中定义,__param_<name>标签设置 Target 首次传递的 URL 参数<name>的值。

如在scrape_config中指定,__scrape_interval____scrape_timeout__标签设置 Target 的采集间隔和超时,

在重标签阶段可用的额外标签以 __meta_ 前缀开头。它们由提供 Target 的服务发现机制设置,不同服务发现机制之间有所不同。

开始后,带有__开头的标签将在 Target 重标签 完成时从标签集移除。

如果重标签步骤需要仅临时存储标签值(作为后续重标签步骤的输入),则使用__tmp标签名前缀。此前缀保证永远不会由 Prometheus 自身使用。

# 选择现有标签的源标签。它们的内容使用配置的分隔符进行拼接,并与替换、保留和丢弃操作的配置正则表达式进行匹配。
[ source_labels: '[' <labelname> [, ...] ']' ]
# 拼接源标签值之间的分隔符。
[ separator: <string> | default = ; ]
# 写入到替换操作的结果值的 Target 标签。替换操作是必需的。正则表达式的捕获组可在替换值中使用。
[ target_label: <labelname> ]
# 对提取的值进行匹配的正则表达式。
[ regex: <regex> | default = (.*) ]
# 对正则表达式匹配的源标签值执行哈希运算的模数。
[ modulus: <int> ]
# 在正则表达式匹配时用于替换的替换值。正则表达式的捕获组可在替换值中使用。
[ replacement: <string> | default = $1 ]
# 根据正则表达式匹配执行的操作。
[ action: <relabel_action> | default = replace ]

<regex>是任何有效的 RE2 正则表达式语法。它对于replacekeepdroplabelmaplabeldroplabelkeep操作都是必需的。正则表达式两端均锚定。要取消锚定正则表达式,请使用 .*<regex>.*

<relabel_action>确定执行的重标签操作类型:

  • replace:使用regex匹配拼接的source_labels。然后,将target_label设置为replacement,其中replacement中的捕获组(${1}${2} 等)会被其值替换。如果regex不匹配,则不会发生替换。
  • lowercase:将拼接的source_labels映射为其小写形式。
  • uppercase:将拼接的source_labels映射为其大写形式。
  • keep:丢弃regex不匹配拼接的source_labels的 Target。
  • drop:丢弃 regex 匹配拼接的 source_labels 的 Target。
  • keepequal:丢弃regex不匹配 target_label 的 Target。
  • dropequal:丢弃regex匹配 target_label 的 Target。
  • hashmod:将target_label设置为拼接的source_labels的哈希值的模数。
  • labelmap:对所有源标签名称进行匹配,而不仅仅是source_labels中指定的那些。然后,将匹配标签的值复制到由replacement给出的标签名中,其中replacement中的捕获组(${1}${2} 等)会被其值替换。
  • labeldrop:对所有标签名称进行匹配。匹配的任何标签都将从标签集移除。
  • labelkeep:对所有标签名称进行匹配。不匹配的任何标签都将从标签集移除。

需要特别小心的是,请确保在删除标签后指标仍唯一标记。

<metric_relabel_configs>

在数据被消费前的最后一个步骤,Prometheus 会应用指标重标签(metrics relabeling)。它的配置格式和操作与 Target 重标签相同。指标重标签不会应用于如up这样的自动生成的时间序列。

使用这个功能的一个例子是排除那些过于昂贵而无法消费的时间序列。

<alert_relabel_configs>

告警重标签(alerts relabeling)在告警被发送到 Alertmanager 之前应用。它具有与 Target 重标签相同的配置格式和操作。告警重标签在外部标签(external labels)之后应用。

使用这个功能的一个例子是:确保具有不同外部标签的 Prometheus 服务器集群发送相同的告警。

<alertmanager_config>

alertmanager_config部分指定 Prometheus 服务器向其发送告警的 Alertmanager 实例。它还提供了配置如何与这些 Alertmanagers 进行通信的参数。

Alertmanagers 可以通过static_configs参数静态配置,或者使用支持的服务发现机制动态发现。

此外,relabel_configs允许从发现的实体中选择 Alertmanagers,并提供对暴露通过__alerts_path__标签的用于推送告警的 HTTP 路径的高级修改。

# 每个 Target 的 Alertmanager 超时时间,当推送告警时。
[ timeout: <duration> | default = 10s ]
# Alertmanager 的 API 版本。
[ api_version: <string> | default = v2 ]
# 推送告警到的 HTTP 路径前缀。
[ path_prefix: <path> | default = / ]
# 配置请求使用的协议方案。
[ scheme: <scheme> | default = http ]
# 在每个请求上设置“Authorization”头,包含配置的用户名和密码。
# password 和 password_file 是互斥的。
basic_auth:
[ username: <string> ]
[ password: <secret> ]
[ password_file: <string> ]
# 可选的“Authorization”头配置。
authorization:
# 设置认证类型。
[ type: <string> | default: Bearer ]
# 设置凭证。它与 `credentials_file` 相互排斥。
[ credentials: <secret> ]
# 设置凭证来自配置的文件中的凭证。
# 它与 `credentials` 相互排斥。
[ credentials_file: <filename> ]
# 选项地配置 AWS 的签名验证 4 签名过程来签署请求。
# 不能同时设置 basic_auth、authorization、oauth2、azuread 或 google_iam。
# 使用 AWS SDK 的默认凭据时,使用 `sigv4: {}`。
sigv4:
# AWS 区域。如果空白,则使用默认凭据链中的区域。
[ region: <string> ]
# AWS API 密钥。如果空白,则使用环境变量 `AWS_ACCESS_KEY_ID` 和 `AWS_SECRET_ACCESS_KEY`。
[ access_key: <string> ]
[ secret_key: <secret> ]
# 命名的 AWS 策略用于认证。
[ profile: <string> ]
# AWS 角色 ARN,作为使用 AWS API 密钥的替代方式。
[ role_arn: <string> ]
# 可选的 OAuth 2.0 配置。
# 不能同时使用 basic_auth 或 authorization。
oauth2:
[ <oauth2> ]
# 配置抓取请求的 TLS 设置。
tls_config:
[ <tls_config> ]
# 可选的代理 URL。
[ proxy_url: <string> ]
# 包含 IP、CIDR 表示法、域名的逗号分隔字符串,应该从代理中排除。IP 和域名可以包含端口号。
[ no_proxy: <string> ]
# 使用环境变量(HTTP_PROXY、https_proxy、HTTPs_PROXY、https_proxy 和 no_proxy)指示的代理 URL。
[ proxy_from_environment: <boolean> | default: false ]
# 指定在 CONNECT 请求期间发送到代理的头部。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]
# 配置是否遵循 HTTP 3xx 重定向。
[ follow_redirects: <boolean> | default = true ]
# 是否启用 HTTP2。
[ enable_http2: <boolean> | default: true ]
# Azure 服务发现配置列表。
azure_sd_configs:
[ - <azure_sd_config> ... ]
# Consul 服务发现配置列表。
consul_sd_configs:
[ - <consul_sd_config> ... ]
# DNS 服务发现配置列表。
dns_sd_configs:
[ - <dns_sd_config> ... ]
# EC2 服务发现配置列表。
ec2_sd_configs:
[ - <ec2_sd_config> ... ]
# Eureka 服务发现配置列表。
eureka_sd_configs:
[ - <eureka_sd_config> ... ]
# 文件服务发现配置列表。
file_sd_configs:
[ - <file_sd_config> ... ]
# DigitalOcean 服务发现配置列表。
digitalocean_sd_configs:
[ - <digitalocean_sd_config> ... ]
# Docker 服务发现配置列表。
docker_sd_configs:
[ - <docker_sd_config> ... ]
# Docker Swarm 服务发现配置列表。
dockerswarm_sd_configs:
[ - <dockerswarm_sd_config> ... ]
# GCE 服务发现配置列表。
gce_sd_configs:
[ - <gce_sd_config> ... ]
# Hetzner 服务发现配置列表。
hetzner_sd_configs:
[ - <hetzner_sd_config> ... ]
# HTTP 服务发现配置列表。
http_sd_configs:
[ - <http_sd_config> ... ]
# IONOS 服务发现配置列表。
ionos_sd_configs:
[ - <ionos_sd_config> ... ]
# Kubernetes 服务发现配置列表。
kubernetes_sd_configs:
[ - <kubernetes_sd_config> ... ]
# Lightsail 服务发现配置列表。
lightsail_sd_configs:
[ - <lightsail_sd_config> ... ]
# Linode 服务发现配置列表。
linode_sd_configs:
[ - <linode_sd_config> ... ]
# Marathon 服务发现配置列表。
marathon_sd_configs:
[ - <marathon_sd_config> ... ]
# AirBnB 的 Nerve 服务发现配置列表。
nerve_sd_configs:
[ - <nerve_sd_config> ... ]
# Nomad 服务发现配置列表。
nomad_sd_configs:
[ - <nomad_sd_config> ... ]
# OpenStack 服务发现配置列表。
openstack_sd_configs:
[ - <openstack_sd_config> ... ]
# OVHcloud 服务发现配置列表。
ovhcloud_sd_configs:
[ - <ovhcloud_sd_config> ... ]
# PuppetDB 服务发现配置列表。
puppetdb_sd_configs:
[ - <puppetdb_sd_config> ... ]
# Scaleway 服务发现配置列表。
scaleway_sd_configs:
[ - <scaleway_sd_config> ... ]
# Zookeeper Serverset 服务发现配置列表。
serverset_sd_configs:
[ - <serverset_sd_config> ... ]
# Triton 服务发现配置列表。
triton_sd_configs:
[ - <triton_sd_config> ... ]
# Uyuni 服务发现配置列表。
uyuni_sd_configs:
[ - <uyuni_sd_config> ... ]
# Vultr 服务发现配置列表。
vultr_sd_configs:
[ - <vultr_sd_config> ... ]
# 静态配置的 Labeled Alertmanagers 列表。
static_configs:
[ - <static_config> ... ]
# Alertmanager 的 relabel 配置列表。
relabel_configs:
[ - <relabel_config> ... ]
# 告警 relabel 配置列表。
alert_relabel_configs:
[ - <relabel_config> ... ]

<remote_write>

在发送样本到远程端点之前,write_relabel_configs对样本进行重标签处理。写入重标签化操作在外部标签之后应用。这可以用于限制要发送的样本。

有关此功能的小型演示,请参阅远程存储示例

# 指定要发送样例的端点 URL。
url: <string>
# 当写入 remote write 端点时使用的 protobuf 消息。
#
# * `prometheus.WriteRequest` 表示在1.0版本中引入的消息,最终会过时。
# * `io.prometheus.write.v2.Request` 在2.0版本中引入,并替代了前者,通过提高效率并默认发送元数据、创建时间戳和原生 Histogram 来改进性能。
#
# 在更改此值之前,请咨询你的远程存储提供商(或进行测试),了解它支持哪种消息。
# 更多信息见:https://prometheus.io/docs/specs/remote_write_spec_2_0/#io-prometheus-write-v2-request
[ protobuf_message: <prometheus.WriteRequest | io.prometheus.write.v2.Request> | default = prometheus.WriteRequest ]
# remote write 端点请求的超时时间。
[ remote_timeout: <duration> | default = 30s ]
# 每个 remote write 请求随附的自定义HTTP头部。
# 需要注意的是,Prometheus 自身设置的头部无法被覆盖。
headers:
[ <string>: <string> ... ]
# remote write 配置的远程重定向规则列表。
write_relabel_configs:
[ - <relabel_config> ... ]
# remote write 配置的名称,如果指定,则必须与其他 remote write 配置唯一。
# 名称将用于指标和日志中,代替生成的值,以帮助用户区分不同的 remote write 配置。
[ name: <string> ]
# 启用通过 remote write 发送示例。请注意,示例存储本身必须启用,才能首先抓取到示例。
[ send_exemplars: <boolean> | default = false ]
# 启用通过 remote write 发送原生 Histogram,也被称为稀疏 Histogram。
# 对于`io.prometheus.write.v2.Request`消息,此选项为 noop(始终为 true)。
[ send_native_histograms: <boolean> | default = false ]
# 设置在每个 remote write 请求上的`Authorization`头部,带有配置的用户名和密码。
# password 和 password_file 互斥。
basic_auth:
[ username: <string> ]
[ password: <secret> ]
[ password_file: <string> ]
# 可选的`Authorization`头部配置。
authorization:
# 设置认证类型。
[ type: <string> | default = Bearer ]
# 设置凭据。与`credentials_file`互斥。
[ credentials: <secret> ]
# 设置凭据来自配置文件中的凭据。
# 与`credentials`互斥。
[ credentials_file: <filename> ]
# 选项地配置 AWS 的 Signature Verification 4 签名过程以对请求进行签名。
# 不能同时设置为 basic_auth、authorization、oauth2、azuread或google_iam。
# 要使用 AWS SDK 的默认凭据,请使用`sigv4: {}`。
sigv4:
# AWS 区域。如果空白,则使用默认凭据链中的区域。
[ region: <string> ]
# AWS API 密钥。如果空白,则使用环境变量`AWS_ACCESS_KEY_ID`和`AWS_SECRET_ACCESS_KEY`。
[ access_key: <string> ]
[ secret_key: <secret> ]
# 使用命名的 AWS 配置文件进行身份验证。
[ profile: <string> ]
# AWS 角色 ARN,作为使用 AWS API 密钥的替代方式。
[ role_arn: <string> ]
# 可选的 OAuth 2.0 配置。
# 不能同时设置为 basic_auth、authorization、oauth2、sigv4、azuread 或 google_iam。
oauth2:
[ <oauth2> ]
# 可选的 AzureAD 配置。
# 不能同时设置为 basic_auth、authorization、oauth2、sigv4 或 google_iam。
azuread:
# Azure 云。选项是'AzurePublic'、'AzureChina'或'AzureGovernment'。
[ cloud: <string> | default = AzurePublic ]
# Azure 用户分配的管理身份。
[ managed_identity:
[ client_id: <string> ] ]
# Azure OAuth。
[ oauth:
[ client_id: <string> ]
[ client_secret: <string> ]
[ tenant_id: <string> ] ]
# Azure SDK 认证。
# 见:https://learn.microsoft.com/en-us/azure/developer/go/azure-sdk-authentication
[ sdk:
[ tenant_id: <string> ] ]
# 警告:remote write 不支持 Google Cloud。此配置预留未来使用。
# 可选的 Google Cloud 监控配置。
# 不能同时设置为 basic_auth、authorization、oauth2、sigv4 或 azuread。
# 要使用 Google Cloud SDK 的默认凭据,请使用`google_iam: {}`。
google_iam:
# 具有监控写权限的服务帐户密钥。
credentials_file: <file_name>
# 配置 remote write 请求的 TLS 设置。
tls_config:
[ <tls_config> ]
# 可选代理 URL。
[ proxy_url: <string> ]
# 包含 IP、CIDR 表示法、域名的逗号分隔字符串,这些应从代理中排除。
# IP和域名可以包含端口号。
[ no_proxy: <string> ]
# 使用环境变量(HTTP_PROXY、https_proxy、HTTPs_PROXY、https_proxy和no_proxy)指示的代理URL。
[ proxy_from_environment: <boolean> | default = false ]
# 指定CONNECT请求期间发送给代理的头部。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]
# 配置 HTTP 请求是否遵循 HTTP 3xx 重定向。
[ follow_redirects: <boolean> | default = true ]
# 是否启用 HTTP2。
[ enable_http2: <boolean> | default = true ]
# 配置用于写入远程存储的队列。
queue_config:
# 每个分区在阻塞更多WAL样例读取之前缓冲的样例数。建议每个分区有足够的容量来缓冲几个请求,以保持处理偶尔缓慢远程请求时的吞吐量。
[ capacity: <int> | default = 10000 ]
# 最大分区数,即并发度。
[ max_shards: <int> | default = 50 ]
# 最小分区数,即并发度。
[ min_shards: <int> | default = 1 ]
# 每次发送的最大样例数。
[ max_samples_per_send: <int> | default = 2000]
# 样例等待发送的最大时间。样例可能等待更少的时间,如果缓冲区已满。进一步的时间可能会因为潜在的重试而流逝。
[ batch_send_deadline: <duration> | default = 5s ]
# 重试的最小回退延迟。每次重试都会翻倍。
[ min_backoff: <duration> | default = 30ms ]
# 最大重试延迟。
[ max_backoff: <duration> | default = 5s ]
# 在收到 remote write 存储的429状态码时重试。
# 这是实验性的,未来可能会改变。
[ retry_on_http_429: <boolean> | default = false ]
# 如果设置,则任何超过sample_age_limit的样例都不会发送到远程存储。
# 默认值为0s,这意味着所有样例都被发送。
[ sample_age_limit: <duration> | default = 0s ]
# 配置向远程存储发送系列元数据,
# 当选择了`prometheus.WriteRequest`消息时。当使用`io.prometheus.write.v2.Request`时,元数据总是发送的。
#
# 元数据配置可能会在未来任何时候更改甚至被删除。
metadata_config:
# 是否向远程存储发送指标元数据。
[ send: <boolean> | default = true ]
# 元数据发送到远程存储的频率。
[ send_interval: <duration> | default = 1m ]
# 每次发送的最大样例数。
[ max_samples_per_send: <int> | default = 500]

集成

此处有一份包含此功能的集成列表

<remote_read>

url: <string>
# 遥控读取配置的名称,如果指定,则必须与其他遥控读取配置唯一。
# 名称将在指标和日志中用于替换生成的值,以帮助用户区分不同的遥控读取配置。
[ name: <string> ]
# 可选的匹配器列表,这些匹配器必须存在于选择器中才能查询 remote read 端点。
required_matchers:
[ <labelname>: <labelvalue> ... ]
# 请求 remote read 端点的超时时间。
[ remote_timeout: <duration> | default = 1m ]
# 每个 remote read 请求随附的自定义 HTTP 头部。
# 注意:由 Prometheus 自身设置的头部不能被覆盖。
headers:
[ <string>: <string> ... ]
# 是否在本地存储应具有完整数据的时间范围内进行读取。
[ read_recent: <boolean> | default = false ]
# 在每个 remote read 请求上设置`Authorization`头部,使用配置的用户名和密码。
# password 和 password_file 互斥。
basic_auth:
[ username: <string> ]
[ password: <secret> ]
[ password_file: <string> ]
# 可选的`Authorization`头部配置。
authorization:
# 设置认证类型。
[ type: <string> | default: Bearer ]
# 设置凭证。与`credentials_file`互斥。
[ credentials: <secret> ]
# 设置凭证从配置的文件中读取的凭证。
# 与`credentials`互斥。
[ credentials_file: <filename> ]
# 可选的 OAuth 2.0 配置。
# 不能同时与 basic_auth 或 authorization 一起使用。
oauth2:
[ <oauth2> ]
# 配置 remote read 请求的 TLS 设置。
tls_config:
[ <tls_config> ]
# 可选的代理 URL。
[ proxy_url: <string> ]
# 包含 IP、CIDR 表示法、域名的逗号分隔字符串,这些应该从代理中排除。IP和域名可以包含端口号。
[ no_proxy: <string> ]
# 使用环境变量(HTTP_PROXY, https_proxy, HTTPs_PROXY, https_proxy, no_proxy)指示的代理 URL。
[ proxy_from_environment: <boolean> | default: false ]
# 指定 CONNECT 请求期间发送给代理的头部。
[ proxy_connect_header:
[ <string>: [<secret>, ...] ] ]
# 配置 HTTP 请求是否遵循 HTTP 3xx 重定向。
[ follow_redirects: <boolean> | default = true ]
# 是否启用 HTTP2。
[ enable_http2: <boolean> | default: true ]
# 是否使用外部标签作为 remote read 端点的选择器。
[ filter_external_labels: <boolean> | default = true ]

集成

此处有一份包含此功能的集成列表

<tsdb>

tsdb可以让你你配置 TSDB 的运行时可重新加载配置设置。

注意:离线数据处理(out-of-order ingestion)是实验性特性,但无需额外标志即可启用。只需out_of_order_time_window置为正数即可启用它。

# 配置离线数据处理样本的旧程度,与 TSDB 最大时间的关系。
# 如果样本的时间戳大于等于 TSDB.MaxTime-out_of_order_time_window,则将离线数据处理样本纳入 TSDB。
#
# 当out_of_order_time_window 大于0时,错误“离线”和“越界”被合并为一个名为'too-old'的错误;样本要么(a)可纳入 TSDB,即它是顺序样本或在 out-of-order 窗口内的离线数据处理样本,要么(b)太老,即不顺序且在 out-of-order 窗口之前。
#
# 当 out_of_order_time_window 大于0时,它也影响实验性代理。它允许代理的 WAL 接受相对于同一系列最后追加样本的时间戳,在指定的时间窗口内落入的离线数据处理样本。
[ out_of_order_time_window: <duration> | default = 0s ]

<exemplars>

请注意,示例存储仍然被认为是实验性的,必须通过--enable-feature=exemplar-storage启用。

# 配置用于存储所有序列的示例的循环缓冲区的最大大小。运行时可调整大小。
[ max_exemplars: <int> | default = 100000 ]

<tracing_config>

tracing_config配置了 Prometheus 通过 OTLP 协议向追踪后端导出跟踪信息的功能。追踪功能目前是实验性特性,未来可能会改变。

# 用于导出跟踪的客户端。选项为'http'或'grpc'。
[ client_type: <string> | default = grpc ]
# 向其发送跟踪的端点。应以`<host>:<port>`格式提供。
[ endpoint: <string> ]
# 设置给定跟踪被采样的概率。必须是一个介于0和1之间的浮点数。
[ sampling_fraction: <float> | default = 0 ]
# 如果禁用,则客户端将使用安全连接。
[ insecure: <boolean> | default = false ]
# 作为与 gRPC 或 HTTP 请求关联的键值对使用的头部。
headers:
[ <string>: <string> ... ]
# 支持的压缩类型中的压缩密钥。支持的压缩:gzip。
[ compression: <string> ]
# 导出器等待每个批处理导出的最大时间。
[ timeout: <duration> | default = 10s ]
# TLS 配置。
tls_config:
[ <tls_config> ]

该文档基于 Prometheus 官方文档翻译而成。


observability.cn Authors 2024 | Documentation Distributed under CC-BY-4.0
Copyright © 2017-2024, Alibaba. All rights reserved. Alibaba has registered trademarks and uses trademarks.
浙ICP备2021005855号-32