配置
最后更新于
这有帮助吗?
Prometheus 通过命令行参数和配置文件进行配置。命令行参数配置了不可变的系统参数(如存储位置,保留在磁盘和内存中的数据量等)。配置文件定义了与采集数据相关的所有内容及。
执行./prometheus -h
查看所有可用的命令行参数
Prometheus 可以在运行时重新加载其配置。如果新的配置格式不正确,则不会应用相关更改。通过向 Prometheus 进程发送SIGHUP
信号或向/-/reload
端点发送 HTTP POST 请求(当启动--web.enable-lifecycle
标志时)来触发配置重载。同时,这也会重新加载所有已配置的规则文件。
使用--config.file
标志指定要加载的配置文件。
配置文件是 的,由以下描述的格式进行定义。方括号表示参数是可选的。对于非列表参数,该值设置为指定的默认值。
通用占位符定义如下:
<boolean>
: 值为 true
或 false
的布尔值
<duration>
: 可被正则表达式[0-9]+(ms|[smhdwy]
匹配的一段时间
<labelname>
: 可被正则表达式[a-zA-Z_][a-zA-Z0-9_]*
匹配的字符串
<labelvalue>
: unicode 字符串
<filename>
: 当前工作目录中的合法的路径
<host>
: 由主机名或 IP 后跟可选端口号组成的合法的字符串
<path>
: 合法的 URL 路径
<scheme>
: 字符串,可取值为 http
或 https
<string>
: 常规字符串
<secret>
: 加密后的常规字符串,例如密码
<tmpl_string>
: 使用模版扩展的字符串
个别其它占位符单独指出。
全局配置指定在所有其它配置上下文中有效的参数,它们还用作其它配置部分的默认配置。
<scrape_config>
scrape_config
配置部分指定了一组目标和参数,这些目标和参数描述了如何对它们进行数据采集。一般情况下,一个采集配置指定一个作业。在高级配置中,这可能会改变。
可以通过static_configs
参数配置静态目标,也可以使用支持的服务发现机制动态发现目标。
此外,relabel_configs
允许在数据采集之前对任何目标及其标签进行进一步修改。
<tls_config>
tls_config
配置 TLS 连接相关内容。
<azure_sd_config>
azure 服务发现配置允许从 Azure VMs 发现数据收集的目标。
重新标记过程中,支持以下的 meta 标签:
__meta_azure_machine_id
: 设备 ID
__meta_azure_machine_location
: 设备运行位置
__meta_azure_machine_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
: VM 所属的伸缩集的名称(当您使用此伸缩集时才设置此值)
__meta_azure_subscription_id
: 订阅 ID
__meta_azure_tenant_id
: 租户 ID
请参阅以下有关 Azure 服务发现的配置项:
<consul_sd_config>
重新标记过程中,支持以下的 meta 标签:
__meta_consul_address
: 目标地址
__meta_consul_dc
: 目标数据中心名称
__meta_consul_tagged_address_<key>
: 节点标记的目标地址的键值
__meta_consul_metadata_<key>
: 节点标记的目标元数据的键值
__meta_consul_node
: 目标的节点名称
__meta_consul_service_address
: 目标的服务地址
__meta_consul_service_id
: 目标的服务 ID
__meta_consul_service_metadata_<key>
: 目标服务的元数据键值
__meta_consul_service_port
: 目标服务端口
__meta_consul_service
: 目标所属服务的名称
__meta_consul_tags
: 标签分割符连接的目标的标签列表
请注意,用于数据采集的目标的 IP 地址和端口被组合为<__meta_consul_address>:<__meta_consul_service_port>
。 但是,在某些 Consul 设置中,相关地址在__meta_consul_service_address
中。在这种情况下,您可以使用重新标记功能来替换特殊的__address__
标签。
重新标记阶段是基于任意标签为服务筛选服务或节点的首选且功能更强大的方法。对于拥有数千项服务的用户而言,直接使用 Consul API 更为有效,该 API 具有基本的过滤节点支持(一般通过节点元数据和单个标签)。
<dns_sd_config>
基于 DNS 的服务发现配置允许指定一组 DNS 域名,通过定期查询这些域名以发现目标列表。从 /etc/resolv.conf
读取要连接的 DNS 服务器。
<ec2_sd_config>
EC2 服务发现配置允许从 AWS EC2 实例目标采集数据指标。默认情况下使用私有 IP 地址,但可以通过重新标记将其更改为公共 IP 地址。
__meta_ec2_availability_zone
: EC2 实例运行的可用区域
__meta_ec2_instance_id
: EC2 实例 ID
__meta_ec2_instance_lifecycle
: EC2 实例的生命周期,仅为 'spot' 或 'scheduled' 状态实例设置,否则不存在
__meta_ec2_instance_state
: EC2 实例状态
__meta_ec2_instance_type
: EC2 实例类型
__meta_ec2_owner_id
: EC2 实例拥有者 AWS 账户的 ID
__meta_ec2_platform
: EC2 实例的操作系统平台,仅在 Windows 服务器上设置为 'windows',否则不存在
__meta_ec2_primary_subnet_id
: EC2 实例的主网络接口的子网 ID(如果有)
__meta_ec2_private_dns_name
: EC2 实例的私有DNS名称(如果有)
__meta_ec2_private_ip
: 实例的私有 IP 地址(如果有)
__meta_ec2_public_dns_name
: 实例的公共 DNS 名称(如果有)
__meta_ec2_public_ip
: 实例的公共 IP 地址(如果有)
__meta_ec2_subnet_id
: 逗号分隔的实例运行的子网 ID 列表(如果有)
__meta_ec2_tag_<tagkey>
: 实例的每个标签值
__meta_ec2_vpc_id
: 运行实例的 VPC 的 ID
请参阅以下有关 EC2 发现的配置选项:
<openstack_sd_config>
OpenStack 服务发现配置允许从 OpenStack Nova 实例中发现数据采集的目标。
可以配置以下 <openstack_role>
类型之一来发现目标:
hypervisor
hypervisor
角色为每个 Nova hypervisor 节点发现一个目标。目标地址默认为虚拟机管理程序的 host_ip
属性。
__meta_openstack_hypervisor_host_ip
: hypervisor 节点的 IP 地址
__meta_openstack_hypervisor_id
: hypervisor 节点 ID
__meta_openstack_hypervisor_name
: hypervisor 节点名称
__meta_openstack_hypervisor_state
: hypervisor 节点状态
__meta_openstack_hypervisor_status
: hypervisor 节点状态
__meta_openstack_hypervisor_type
: hypervisor 节点类型
instance
instance
实例角色为 Nova 实例的每个网络接口发现一个目标。目标地址默认为网络接口的专用 IP 地址。
__meta_openstack_address_pool
: OpenStack 实例的专用 IP 池
__meta_openstack_instance_flavor
: OpenStack 实例的 flavor
__meta_openstack_instance_id
: OpenStack 实例 ID.
__meta_openstack_instance_name
: OpenStack 实例名称
__meta_openstack_instance_status
: OpenStack 实例状态信息
__meta_openstack_private_ip
: OpenStack 实例私有 IP
__meta_openstack_project_id
: 拥有此实例的 project (租户) ID
__meta_openstack_public_ip
: OpenStack 实例公共 IP
__meta_openstack_tag_<tagkey>
: 实例的每个标签值
__meta_openstack_user_id
: 拥有此租户的用户帐户
请参阅以下有关 OpenStack 发现的配置选项:
<file_sd_config>
基于文件的服务发现提供了一种更通用的配置静态目标或用作插入自定义服务发现机制接口服务的方法。
它读取一组包含零个或多个<static_config>
列表的文件。对所有已定义文件的更改将通过磁盘检测并立即应用。文件可以以 YAML 或 JSON 格式提供。仅应用符合目标组规范的更改。
JSON文件必须包含使用以下格式的静态配置列表:
作为备用,文件内容也将以指定的刷新间隔定期重新读取。
其中,<filename_pattern>
可能是以 .json
,.yml
或 .yaml
结尾的路径。最后一个路径段可能包含与任何字符序列匹配的单个 *
,如 my/path/tg_*.json
<gce_sd_config>
__meta_gce_instance_id
: 实例数字形式的 ID
__meta_gce_instance_name
: 实例名称
__meta_gce_label_<name>
: 实例的每个 GCE 标签
__meta_gce_machine_type
: 实例设备类型的完整或部分 URL
__meta_gce_metadata_<name>
: 实例的每个元数据项
__meta_gce_network
: 实例的网络 URL
__meta_gce_private_ip
: 实例的私有 IP 地址
__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 之外运行,请确保创建适当的服务帐户,并将凭据文件放在其中一个预期的位置。
<kubernetes_sd_config>
可以配置以下 role
角色类型之一来发现目标。
node
node
角色为集群每个节点发现一个目标,其地址默认为 Kubelet 的 HTTP 端口。目标地址默认为 Kubernetes 节点对象按照NodeInternalIP
,NodeInternalIP
,NodeExternalIP
,NodeLegacyHostIP
和NodeHostName
的顺序检索的第一个现有地址。
可用的 meta 标签:
__meta_kubernetes_node_name
: 节点对象名称
__meta_kubernetes_node_label_<labelname>
: 节点对象的标签
__meta_kubernetes_node_annotation_<annotationname>
: 节点对象的注解
__meta_kubernetes_node_annotationpresent_<annotationname>
: 对于来自节点对象的每个注解,为true
__meta_kubernetes_node_address_<address_type>
: 节点对象指定地址类型的第一个地址(如果存在)
另外,该节点的instance
标签将设置为从 API 服务器检索到的节点名称。
service
service
角色发现每个服务及其端口的数据采集目标。通常,这对于黑盒监控服务很有用。地址将设置为服务的 Kubernetes DNS 名称及相应的服务端口。
可用的 meta 标签:
__meta_kubernetes_namespace
: service 对象的名称空间
__meta_kubernetes_service_annotation_<annotationname>
: service 对象的注解
__meta_kubernetes_service_annotationpresent_<annotationname>
: 对于每个 service 对象的注解为 true
__meta_kubernetes_service_cluster_ip
: service 的 ClusterIP 地址(不适用于 ExternalName 类型的 service)
__meta_kubernetes_service_external_name
: service 的 DNS 名称(适用于 ExternalName 类型的 services)
__meta_kubernetes_service_label_<labelname>
: service 对象的标签
__meta_kubernetes_service_labelpresent_<labelname>
: 对于每个 service 对象的标签为 true
__meta_kubernetes_service_name
: service 对象的名称
__meta_kubernetes_service_port_name
: 目标的服务端口名称
__meta_kubernetes_service_port_protocol
: 目标的服务端口协议
__meta_kubernetes_service_type
: service 的类型
pod
pod
角色发现所有 pod 并将其暴露为目标。对于容器的每个声明的端口,将生成一个目标。如果容器没有指定的端口,则会为每个容器创建无端口目标,以通过重新标记手动添加端口。
可用的 meta 标签:
__meta_kubernetes_namespace
: pod 对象的名称空间
__meta_kubernetes_pod_name
: pod 对象名称.
__meta_kubernetes_pod_ip
: 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
: 如果容器是初始化容器,则为 true
__meta_kubernetes_pod_container_name
: 目标地址指向的容器的名称
__meta_kubernetes_pod_container_port_name
: 容器的端口名称
__meta_kubernetes_pod_container_port_number
: 容器的端口号
__meta_kubernetes_pod_container_port_protocol
: 容器端口协议
__meta_kubernetes_pod_ready
: pod 是否已经就绪
__meta_kubernetes_pod_phase
: pod 的生命周期,可能的值为 Pending, Running, Succeeded, Failed 或 Unknown
__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
角色从列出的服务的 endpoints 中发现目标。对于每个 endpoints 地址,每个端口都发现一个目标。如果 endpoints 后端负载为 pod,则该 pod 的所有其它未绑定到 endpoints 端口的容器端口也将被发现为目标。
可用的 meta 标签:
__meta_kubernetes_namespace
: endpoints 对象的名称空间
__meta_kubernetes_endpoints_name
: endpoints 对象的名称
对于直接从 endpoints 列表中发现的所有目标(不是从 pod 获取的),将附加以下标签:
__meta_kubernetes_endpoint_hostname
: endpoint 的主机名
__meta_kubernetes_endpoint_node_name
: endpoint 节点名称
__meta_kubernetes_endpoint_ready
: 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 地址名称
如果 endpoints 归属于某个 service,则role: service
服务发现的所有标签都适用
如果 endpoints 后端负载为 pod,则role: pod
服务发现的所有标签都适用
ingress
ingress
角色发现每个入口的每个路径目标。这通常对于入口的黑盒监控很有用。地址将设置为 ingress 规范中指定的主机地址(ingress.spec.host
)
可用的 meta 标签:
__meta_kubernetes_namespace
: ingress 对象的名称空间
__meta_kubernetes_ingress_name
: ingress 对象的名称.
__meta_kubernetes_ingress_label_<labelname>
: ingress 对象的标签.
__meta_kubernetes_ingress_labelpresent_<labelname>
: 如果是 ingress 对象的标签,则为 true
__meta_kubernetes_ingress_annotation_<annotationname>
: ingress 对象的注解
__meta_kubernetes_ingress_annotationpresent_<annotationname>
: 如果是 ingress 对象的注解,则为 true
__meta_kubernetes_ingress_scheme
: ingress 的协议。如果配置了 TLS,则为 https
。默认为 http
。
__meta_kubernetes_ingress_path
: ingress 规范中指定的路径(ingress.spec.path
).默认为 /
.
请参阅如下 Kubernetes 服务发现配置项:
role
必须是endpoints
, service
, pod
, node
或ingress
<marathon_sd_config>
__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
: 端口索引号
请参阅以下有关 Marathon 发现的配置选项:
默认情况下,所有应用程序都将在 Prometheus(配置文件中指定的一项)中显示为独立的作业,也可以使用重新标记进行更改。
<nerve_sd_config>
__meta_nerve_path
: Zookeeper 中端点节点(公开数据指标的 URL)的完整路径
__meta_nerve_endpoint_host
: 端点节点(公开数据指标的 URL)主机地址
__meta_nerve_endpoint_port
: 端点节点(公开数据指标的 URL)端口
__meta_nerve_endpoint_name
: 端点节点(公开数据指标的 URL)的名称
<serverset_sd_config>
__meta_serverset_path
: Zookeeper 中 serverset 节点(公开数据指标的 URL)的完整路径
__meta_serverset_endpoint_host
: serverset 节点默认端点
__meta_serverset_endpoint_port
: serverset 节点默认端口
__meta_serverset_endpoint_host_<endpoint>
: 给定端点的主机
__meta_serverset_endpoint_port_<endpoint>
: 给定端点的端口
__meta_serverset_shard
: serverset 成员的分片号
__meta_serverset_status
: serverset 成员的状态
Serverset 数据必须为JSON格式,当前不支持 Thrift 格式。
<triton_sd_config>
__meta_triton_groups
: 由逗号分隔的属于目标的组列表
__meta_triton_machine_alias
: 目标容器的别名
__meta_triton_machine_brand
: 目标容器的类型
__meta_triton_machine_id
: 目标容器的 UUID
__meta_triton_machine_image
: 目标容器的镜像类型
__meta_triton_server_id
: 目标容器的服务 UUID
<static_config>
static_config
允许指定目标列表和目标的通用标签集。这是在数据采集配置中指定静态目标的典型方法。
<relabel_config>
重新标记是一个可以在数据采集之前动态重写目标标签的强大工具。每个数据采集配置可以配置多个重新标记步骤。他们按照在配置文件中出现的顺序依次应用于目标的标签集。
最初,除了已配置的每个目标标签外,目标的job
标签设置为各个数据采集配置的job_name
的标签值。__address__
标签设置为目标的<host>:<port>
地址。重新标记后,如果在重新标记期间未设置instance
标签,则默认将其设置为__address__
的值。__scheme__
和__metrics_path__
标签将被分别设置为数据采集目标的协议和路径。__param_<name>
标签设置为传递的 URL 参数中第一个为<name>
的值。
在重新标记阶段,可能会加上以__meta_
开头的其它标签。它们由提供目标服务发现的方法设置,并在各个方法之间有所不同。
重新标记完成后,__
开头的标签将从标签集中删除。
如果重新标记过程中仅需要临时存储标签值(作为后续重新标记步骤的输入),请使用__tmp
标签名称前缀。 保证该前缀不会被 Prometheus 单独使用。
<reloabel_action>
确定要执行的重新标记操作:
replace
: 将正则表达式与串联的source_labels
匹配。然后,用replacement
中的匹配组引用(${1}
,${2}
...)将target_label
的值设置为replacement
的值。如果正则表达式不匹配,则不会进行替换。
keep
: 删除目标的source_labels
不能匹配regex
的目标
drop
: 删除目标的source_labels
能匹配regex
的目标
hashmod
: 将target_label
设置为串联的source_label
的哈希的modulus
labelmap
: 将regex
与所有标签名称匹配。然后将匹配标签的值复制到replacement
中给定的标签名称,并用replacement
中的匹配组引用(${1}
,${2}
...)替换它们的值。
labeldrop
: 将regex
与所有标签名称匹配。任何匹配的标签将从标签集中删除。
labelkeep
: 将regex
与所有标签名称匹配。任何不匹配的标签将从标签集中删除。
请谨慎使用labeldrop
和labelkeep
以确保一旦删除标签,数据指标仍可以被唯一标记。
<metric_relabel_configs>
对数据样本进行重新标记是入库前的最后一步。它与目标重新标记有相同的配置格式和操作。指标重新标记不适用于自动生成的时间序列,如up
.
这样做的一种用途是将由于过多开销的而无法入库的时间序列列如黑名单。
<alert_relabel_configs>
告警重新标记应用于发送告警到 Alertmanager 之前。它与目标重新标记有相同的配置格式和操作。在扩展标记之后应用告警重新标记。
一种用途是确保具有不同扩展标签的一对高可用 Prometheus 发送相同的告警。
<alertmanager_config>
alertmanager_config
部分指定了 Prometheus 向其发送告警的 Alertmanager 实例。它还提供了用于配置如何与 Alertmanager 通信的参数。
Alertmanager 可以通过static_configs
参数静态配置,也可以使用支持的服务发现机制动态发现。
另外,relabel_configs
允许从发现的实例中选择 Alertmanagers,并提供对使用的 API 路径的高级修改,该路径通过__alerts_path__
标签暴露。
<remote_write>
write_relabel_configs
在将样本数据发送到远程节点之前重新标记样本数据。在扩展标记之后应用写重新标记。这可以用来限制发送哪些样本数据。
<remote_read>
在可以找到合法的示例配置文件。
consul 服务发现配置允许从 的 Catalog API 中自动发现采集数据的目标。
此服务发现方法仅支持基本 DNS A,AAAA 和 SRV 记录查询,不支持中指定的高级 DNS 服务发现方法。
在阶段,每个目标都有一个元标记 __meta_dns_name
,并设置为发现目标的记录名称。
在阶段,支持以下的 meta 标签:
阶段是基于任意标签过滤目标的首选且更强大的方法。对于具有数千个实例的用户,直接使用支持过滤实例的 EC2 API 可能更有效。
在阶段,支持以下的 meta 标签:
在阶段,支持以下的 meta 标签:
在阶段,每个目标都有一个元标记 __meta_filepath
。 它的值设置为从中发现目标的文件路径。
有与此发现机制的列表。
服务发现配置允许从 GCP GCE 实例中发现数据采集的目标。默认使用私有 IP 地址,但可以在阶段变更为公共 IP 地址。
在阶段,支持以下的 meta 标签:
kubernetes 服务发现配置允许从 的 REST API 发现数据采集的目标,并始终与集群状态保持同步。
有关为 Kubernetes 配置 Prometheus 的详细示例,请参见
您可能希望查看第三方的 ,它可以在 Kubernetes 上自动设置 Prometheus。
Marathon 服务发现配置允许使用 REST API 发现数据采集的目标。Prometheus 将定期检查 REST API 端点是否有正在运行的任务,并为每个具有至少一个正常任务的应用程序创建一个目标组。
在阶段,支持以下的 meta 标签:
默认情况下,Prometheus 将对 Marathon 中列出的每个应用进行指标采集。如果并非所有服务都提供Prometheus 指标,则可以使用 Marathon 标记和 Prometheus 重新标记功能来控制实际上将被采集的实例。 有关如何设置 Marathon 应用程序和 Prometheus 配置的实际示例,请参阅 。
Nerve 服务发现配置允许从存储在 中的 发现采集目标。
在阶段,支持以下的 meta 标签:
Serverset 服务发现配置允许从存储在 中的 检索抓取目标。Serverset 通常由 和 使用。
在阶段,支持以下的 meta 标签:
服务发现允许从 发现采集目标。
在阶段,支持以下的 meta 标签:
<regex>
可以是任何有效的 。replace
, keep
, drop
, labelmap
,labeldrop
和labelkeep
等操作是必需的。正则表达式被锚定在两端,要取消锚定正则表达式,请使用.*<regex>.*
。
这里有一个演示了如何使用此功能。
这里是有此功能的
这里是有此功能的