配置
Prometheus 是通过命令行参数和配置文件进行配置的。其中命令行参数用于配置不可变的系统参数(如存储位置、磁盘和内存中保留的数据量等),而配置文件则定义了与采集任务和实例以及要加载的规则文件(记录规则配置)相关的一切。
要查看所有可用的命令行参数,请运行./prometheus -h
。
Prometheus 可在运行时重新加载其配置。如果新配置不正确,则不会应用更改。
触发配置重新加载的方法是向 Prometheus 进程发送SIGHUP
。或者,向-/reload
端点发送 HTTP POST 请求(当启用了--web.enable-lifecycle
参数时),这也会重新加载任何配置的规则文件。
配置文件
要指定要加载的配置文件,请使用 --config.file
标志。
文件采用 YAML 格式,由如下方案描述。
方括号表示参数可选。对于非列表参数,值设置为其指定的默认值。
通用占位符定义如下:
<boolean>
:可以取值为true
或false
的布尔值<duration>
:匹配正则表达式((([0-9]+)y)?(([0-9]+)w)?(([0-9]+)d)?(([0-9]+)h)?(([0-9]+)m)?(([0-9]+)s)?(([0-9]+)ms)?|0)
的持续时间,例如1d
、1h30m
、5m
、10s
<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>
:可以取值为http
或https
的字符串<secret>
:像密码这样的常规字符串,秘文<string>
:常规字符串<size>
:以字节为单位的大小,例如512MB
。需要单位。支持的单位:B、KB、MB、GB、TB、PB、EB。<tmpl_string>
:在使用前被模板展开的字符串
其他占位符单独指定。
一个有效的示例文件可以在这里找到。
全局配置指定了适用于所有其他配置上下文的参数。它们也充当其他配置部分的默认值。
<scrape_config>
scrape_config
部分定义了要抓取的 Target 集合以及描述如何抓取它们的参数。在一般情况下,一个抓取配置指定单个采集任务。然而,在高级配置中,这可能会有所不同。
Target 可以通过static_configs
参数静态配置,或者通过服务发现机制动态发现。
此外,relabel_configs
允许在抓取之前对任何 Target 及其标签进行高级的修改行为(重标签)。
<tls_config>
tls_config
可以配置 TLS 连接。
<oauth2>
使用客户端凭据授权类型的 OAuth 2.0 认证。
Prometheus 通过给定的客户端访问和密钥从指定的端点获取访问令牌。
<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 发现的配置选项:
<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 的标签列表,使用标签分隔符连接
请注意,用于抓取 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
<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 发现的配置选项:
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 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 记录的目标字段。
<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 发现配置选项,请参阅下方:
重标签是基于任意标签过滤 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 发现的选项:
<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 发现的配置选项,请参阅以下内容:
<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 发现的配置选项:
有关详细配置示例,请参阅 Prometheus 与 PuppetDB 配置文件。
<file_sd_config>
基于文件的服务发现(file-based service discovery)提供了一种更通用的方式来配置静态 Target,能够作为插件自定义服务发现机制的接口。
它读取一组包含零个或多个<static_config>
的文件。所有定义的文件的变化会通过磁盘监控检测,并立即被应用。在监控这些个别文件的变化的同时,其父目录也会被隐式地被监控。这是为了高效处理原子重命名(atomic renaming)和检测匹配配置通配符的新文件。如果父目录包含大量其他文件,则有可能会引起问题。这是因为这些文件中的每一个都会被监控,即使我们并不关心与它们相关联的事件。
文件可以以 YAML 或 JSON 格式提供。只有符合格式要求的变化才会被应用。
文件必须包含静态配置列表,示例格式如下:
JSON
YAML
文件内容会在指定的刷新间隔内定期被重新读取。
每个 Target 在重标签阶段中有一个元标签__meta_filepath
,其值设置为从该文件提取 Target 的路径。
这里有与这个发现机制相关的几个集成。
其中<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 发现配置选项的描述:
认证信息由 Google Cloud SDK 默认客户端通过查找以下位置自动发现,优先选择找到的第一个位置:
- 通过环境变量
GOOGLE_APPLICATION_CREDENTIALS
指定的 JSON 文件 $HOME/.config/gcloud/application_default_credentials.json
路径中的 JSON 文件- 从 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
:服务器的数据中心
对于设置role
为hcloud
的 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
对于设置role
为robot
的 Target,以下标签仅可用:
__meta_hetzner_robot_product
:服务器的产品__meta_hetzner_robot_cancelled
:服务器取消状态
<http_sd_config>
基于 HTTP 的服务发现(HTTP-based service discovery)提供了一种更通用的方式来配置静态 Target,能够作为插件自定义服务发现机制的接口。
它从包含零个或多个<static_config>
的 HTTP 端点获取 Target。Target 必须响应 HTTP 200 状态码。HTTP 头Content-Type
必须为application/json
,主体必须是有效的 JSON。
示例响应体:
该端点在指定的刷新间隔内被周期性查询。prometheus_sd_http_failures_total
Counter 指标跟踪刷新失败的数量。
每个 Target 在重标签期间具有元标签__meta_url
。其值设置为其从中提取 Target 的 URL。
<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
: 服务器的类型
<kubernetes_sd_config>
Kubernetes SD 配置允许从 Kubernetes REST API检索集群节点的扫描 Target,并始终保持与集群状态的同步。
可以配置以下role
类型来发现 Target:
node
node
角色在每个集群节点上发现一个 Target,地址默认为 Kubelet 的 HTTP 端口。
Target 地址默认为 Kubernetes 节点对象中存在的第一个地址,按照地址类型顺序排列:NodeInternalIP
、NodeExternalIP
、NodeLegacyHostIP
和 NodeHostName
。
可用的元标签有:
__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
:设置为true
或false
以表示 pod 的就绪状态。__meta_kubernetes_pod_phase
:设置为生命周期中的Pending
、Running
、Succeeded
、Failed
或Unknown
状态。详情参阅 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
:设置为true
或false
以表示 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
:设置为true
或false
以表示引用端点的就绪状态。__meta_kubernetes_endpointslice_endpoint_conditions_serving
:设置为true
或false
以表示引用端点的服务状态。__meta_kubernetes_endpointslice_endpoint_conditions_terminating
:设置为true
或false
以表示引用端点的终止状态。__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发现的配置选项:
有关详细示例配置文件,请参阅 此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 监控采集任务发现配置选项:
[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 发现配置选项:
<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范围和掩码的列表,由分隔符连接
<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 中列出的所有应用都将被 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
:端点的名称
<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 的标签列表,由分隔符连接
<serverset_sd_config>
ServerSet SD 配置允许从存储在 Zookeeper 中的服务器集获取抓取 Target。服务器集通常由 Finagle 和 Aurora 使用。
以下元标签在重标签期间可以使用:
__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
:成员的状态
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 发现配置选项的详细信息:
<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 发现配置选项:
查看 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 发现的配置选项:
请注意,你需要将<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 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)。
<static_config>
static_config
允许指定 Target 列表和它们的共同标签集。这是在收集配置中指定静态 Target 的标准方式。
<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 自身使用。
<regex>
是任何有效的 RE2 正则表达式语法。它对于replace
、keep
、drop
、labelmap
、labeldrop
和labelkeep
操作都是必需的。正则表达式两端均锚定。要取消锚定正则表达式,请使用 .*<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 路径的高级修改。
<remote_write>
在发送样本到远程端点之前,write_relabel_configs
对样本进行重标签处理。写入重标签化操作在外部标签之后应用。这可以用于限制要发送的样本。
有关此功能的小型演示,请参阅远程存储示例。
集成
此处有一份包含此功能的集成列表。
<remote_read>
集成
此处有一份包含此功能的集成列表。
<tsdb>
tsdb
可以让你你配置 TSDB 的运行时可重新加载配置设置。
注意:离线数据处理(out-of-order ingestion)是实验性特性,但无需额外标志即可启用。只需out_of_order_time_window
置为正数即可启用它。
<exemplars>
请注意,示例存储仍然被认为是实验性的,必须通过--enable-feature=exemplar-storage
启用。
<tracing_config>
tracing_config
配置了 Prometheus 通过 OTLP 协议向追踪后端导出跟踪信息的功能。追踪功能目前是实验性特性,未来可能会改变。
该文档基于 Prometheus 官方文档翻译而成。