配置

Prometheus 通过命令行参数和配置文件进行配置。命令行参数配置了不可变的系统参数(如存储位置,保留在磁盘和内存中的数据量等)。配置文件定义了与采集数据作业及实例相关的所有内容及加载哪些规则文件

执行./prometheus -h查看所有可用的命令行参数

Prometheus 可以在运行时重新加载其配置。如果新的配置格式不正确,则不会应用相关更改。通过向 Prometheus 进程发送SIGHUP信号或向/-/reload端点发送 HTTP POST 请求(当启动--web.enable-lifecycle标志时)来触发配置重载。同时,这也会重新加载所有已配置的规则文件。

配置文件

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

配置文件是 YAML 格式arrow-up-right的,由以下描述的格式进行定义。方括号表示参数是可选的。对于非列表参数,该值设置为指定的默认值。

通用占位符定义如下:

  • <boolean>: 值为 truefalse 的布尔值

  • <duration>: 可被正则表达式[0-9]+(ms|[smhdwy]匹配的一段时间

  • <labelname>: 可被正则表达式[a-zA-Z_][a-zA-Z0-9_]*匹配的字符串

  • <labelvalue>: unicode 字符串

  • <filename>: 当前工作目录中的合法的路径

  • <host>: 由主机名或 IP 后跟可选端口号组成的合法的字符串

  • <path>: 合法的 URL 路径

  • <scheme>: 字符串,可取值为 httphttps

  • <string>: 常规字符串

  • <secret>: 加密后的常规字符串,例如密码

  • <tmpl_string>: 使用模版扩展的字符串

个别其它占位符单独指出。

这里arrow-up-right可以找到合法的示例配置文件。

全局配置指定在所有其它配置上下文中有效的参数,它们还用作其它配置部分的默认配置。

<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>

consul 服务发现配置允许从 consularrow-up-right 的 Catalog API 中自动发现采集数据的目标。

重新标记过程中,支持以下的 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 服务器。

此服务发现方法仅支持基本 DNS A,AAAA 和 SRV 记录查询,不支持RFC6763arrow-up-right中指定的高级 DNS 服务发现方法。

重新标记阶段,每个目标都有一个元标记 __meta_dns_name,并设置为发现目标的记录名称。

<ec2_sd_config>

EC2 服务发现配置允许从 AWS EC2 实例目标采集数据指标。默认情况下使用私有 IP 地址,但可以通过重新标记将其更改为公共 IP 地址。

重新标记阶段,支持以下的 meta 标签:

  • __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 发现的配置选项:

重新标记阶段是基于任意标签过滤目标的首选且更强大的方法。对于具有数千个实例的用户,直接使用支持过滤实例的 EC2 API 可能更有效。

<openstack_sd_config>

OpenStack 服务发现配置允许从 OpenStack Nova 实例中发现数据采集的目标。

可以配置以下 <openstack_role> 类型之一来发现目标:

hypervisor

hypervisor 角色为每个 Nova hypervisor 节点发现一个目标。目标地址默认为虚拟机管理程序的 host_ip 属性。

重新标记阶段,支持以下的 meta 标签:

  • __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 标签:

  • __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文件必须包含使用以下格式的静态配置列表:

作为备用,文件内容也将以指定的刷新间隔定期重新读取。

重新标记阶段,每个目标都有一个元标记 __meta_filepath。 它的值设置为从中发现目标的文件路径。

有与此发现机制的集成列表。

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

<gce_sd_config>

GCEarrow-up-right 服务发现配置允许从 GCP GCE 实例中发现数据采集的目标。默认使用私有 IP 地址,但可以在重新标记阶段变更为公共 IP 地址。

重新标记阶段,支持以下的 meta 标签:

  • __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 默认客户端通过在以下位置查找(首选找到的第一个位置)来发现凭据:

  1. GOOGLE_APPLICATION_CREDENTIALS 环境变量指定的 JSON 文件

  2. $HOME/.config/gcloud/application_default_credentials.json 中的 JSON 文件

  3. 从 GCE 元数据服务中获取

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

<kubernetes_sd_config>

kubernetes 服务发现配置允许从 Kubernetesarrow-up-right 的 REST API 发现数据采集的目标,并始终与集群状态保持同步。

可以配置以下 role 角色类型之一来发现目标。

node

node角色为集群每个节点发现一个目标,其地址默认为 Kubelet 的 HTTP 端口。目标地址默认为 Kubernetes 节点对象按照NodeInternalIPNodeInternalIPNodeExternalIPNodeLegacyHostIPNodeHostName的顺序检索的第一个现有地址。

可用的 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, nodeingress

有关为 Kubernetes 配置 Prometheus 的详细示例,请参见 Prometheus 示例配置文件arrow-up-right

您可能希望查看第三方的 Prometheus Operatorarrow-up-right,它可以在 Kubernetes 上自动设置 Prometheus。

<marathon_sd_config>

Marathon 服务发现配置允许使用 Marathonarrow-up-right REST API 发现数据采集的目标。Prometheus 将定期检查 REST API 端点是否有正在运行的任务,并为每个具有至少一个正常任务的应用程序创建一个目标组。

重新标记阶段,支持以下的 meta 标签:

  • __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 将对 Marathon 中列出的每个应用进行指标采集。如果并非所有服务都提供Prometheus 指标,则可以使用 Marathon 标记和 Prometheus 重新标记功能来控制实际上将被采集的实例。 有关如何设置 Marathon 应用程序和 Prometheus 配置的实际示例,请参阅 Prometheus marathon-sd 配置文件arrow-up-right

默认情况下,所有应用程序都将在 Prometheus(配置文件中指定的一项)中显示为独立的作业,也可以使用重新标记进行更改。

<nerve_sd_config>

Nerve 服务发现配置允许从存储在 Zookeeperarrow-up-right 中的 AirBnB's Nervearrow-up-right 发现采集目标。

重新标记阶段,支持以下的 meta 标签:

  • __meta_nerve_path: Zookeeper 中端点节点(公开数据指标的 URL)的完整路径

  • __meta_nerve_endpoint_host: 端点节点(公开数据指标的 URL)主机地址

  • __meta_nerve_endpoint_port: 端点节点(公开数据指标的 URL)端口

  • __meta_nerve_endpoint_name: 端点节点(公开数据指标的 URL)的名称

<serverset_sd_config>

Serverset 服务发现配置允许从存储在 Zookeeperarrow-up-right 中的 Serversetarrow-up-right 检索抓取目标。Serverset 通常由 Finaglearrow-up-rightAuroraarrow-up-right 使用。

重新标记阶段,支持以下的 meta 标签:

  • __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>

Tritonarrow-up-right 服务发现允许从 Container Monitorarrow-up-right 发现采集目标。

重新标记阶段,支持以下的 meta 标签:

  • __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 单独使用。

<regex>可以是任何有效的 RE2 正则表达式arrow-up-rightreplace, keep, drop, labelmap,labeldroplabelkeep等操作是必需的。正则表达式被锚定在两端,要取消锚定正则表达式,请使用.*<regex>.*

<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与所有标签名称匹配。任何不匹配的标签将从标签集中删除。

请谨慎使用labeldroplabelkeep以确保一旦删除标签,数据指标仍可以被唯一标记。

<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在将样本数据发送到远程节点之前重新标记样本数据。在扩展标记之后应用写重新标记。这可以用来限制发送哪些样本数据。

这里有一个样例arrow-up-right演示了如何使用此功能。

这里是有此功能的集成列表

<remote_read>

这里是有此功能的集成列表

最后更新于