;计费和使用;控制普罗米修斯指标的使用;减少普罗米修斯度量的使用

通过重新标签减少Prometheus参数的使用

本指南描述了几种可以用来减少在Grafana Cloud上使用Prometheus度量的技术。

在应用这些技术之前,请确保您正在重复删除从高可用性Prometheus集群发送的任何样本。这将使您的活动系列计数减少一半。要了解如何做到这一点,请参阅从多个高可用性Prometheus实例发送数据

您可以通过以下两种方式减少发送到Grafana Cloud的活动系列的数量:

  • Allowlisting:这包括保留一组明确定义的“重要”指标和标签,并放弃其他一切。为了允许列出指标和标签,您应该确定一组希望保留的核心重要指标和标签。要在Prometheus中启用allowlisting,请使用保持而且labelkeep任何重标配置的操作。

  • Denylisting:这包括放弃一组您显式定义的高基数“不重要”指标,并保留所有其他指标。一旦您确定了您想要删除的高基数指标和标签的列表,拒绝列表就成为可能。要了解如何发现高基数度量,请参见分析普罗米修斯公制的使用情况.要在Prometheus中启用拒绝列表,请使用下降而且labeldrop任何重标配置的操作。

这两种方法都是通过普罗米修斯的度量滤波和重标功能实现的,relabel_config.该特性允许您使用正则表达式筛选系列标签,并保留或删除匹配的标签。还可以使用操作、转换和重命名系列标签relabel_config

舞会实验室的重新用标签标明在调试重新标记配置时,该工具可能会有帮助。Relabeler允许您直观地确认由relabel配置实现的规则。

本指南希望您熟悉正则表达式。要了解更多,请参见正则表达式在维基百科上。要处理和分析任何正则表达式,可以使用RegExr

Relabel_config语法

你可以使用Prometheus 's来过滤系列relabel_config配置对象。在高层次上,arelabel_config属性可以选择一个或多个可以连接的源标签值分隔符参数。然后,可以使用正则表达式,以及行动如果匹配,则执行操作。

您可以执行以下常见操作行动操作:

  • 保持:保持一个匹配的目标或系列,放弃其他所有目标或系列
  • 下降:删除一个匹配的目标或系列,保留所有其他目标或系列
  • 取代属性定义的新标签替换或重命名匹配的标签target_label而且更换参数
  • labelkeep:匹配正则表达式针对所有标签名称,删除所有不匹配的标签(忽略source_labels并适用于所有标签名称)
  • labeldrop:匹配正则表达式针对所有标签名,删除所有匹配(忽略source_labels并适用于所有标签名称)

有关可用操作的完整列表,请参见relabel_config来自普罗米修斯的文件。

任何relabel_config必须具有相同的一般结构:

- source_labels = [source_label_1, source_label_2,…]分隔符:;操作:replace regex:(.*) replace: $1

应该修改这些默认值,以适应重新标记用例。

  • source_labels:从可用标签集中选择一个或多个标签
  • 分隔符:连接所选标签使用这个字符
  • 正则表达式:在级联数据上匹配该正则表达式
  • 行动:执行指定的重标签操作
  • 更换:如果使用其中之一取代labelmap,定义替换值。控件捕获的数据可以使用正则表达式匹配组正则表达式.要了解更多关于正则表达式匹配组的信息,请参见这个StackOverflow的答案
  • target_label定义的提取和修改的标签值更换到此标签名称。

未显式设置的参数将使用默认值填充。为了可读性,通常最好显式地定义relabel_config.的一般格式relabel_config块,请参见relabel_config来自普罗米修斯文档。

这里有一个例子:

- source_labels: [instance_ip] separator:;操作:replace regex:(.*) replace: $1 target_label: host_ip

这个最小的重新标记代码段在一组抓取的标签中搜索instance_ip标签。如果它找到instance_ipLabel,它将这个标签重命名为host_ip.自(. *)Regex捕获整个标签值,替换引用这个捕获组,1美元时,设置新的target_label.因为我们使用了默认值正则表达式更换行动,分隔符为简洁起见,可以省略这里的值。但是,为了可读性,通常最好显式地定义它们。

要删除特定的标签,使用选择它source_labels并使用替换值"".要批量删除或保留标签,请使用labelkeep而且labeldrop行动。

你可以使用relabel_config过滤:过滤并重新标记:

  • 刮的目标
  • 样本和标签,送入普罗米修斯仓库
  • 样品和标签运输到远程存储

在下一节中,您将学习如何做到这一点。

Prometheus配置文件中的Relabel_config

你可以申请relabel_config在指标收集的以下阶段过滤和操作标签:

  • 目标选择relabel_configsa段scrape_configs的工作。这允许您使用relabel_config对象选择目标,以刮除和重新标记由任何服务发现机制创建的元数据。
  • 指标的选择metric_relabel_configsa段scrape_configs的工作。这允许您使用relabel_config对象来选择应该摄入到Prometheus存储中的标签和系列。
  • 远程写write_relabel_configsa段remote_write配置。这允许您使用relabel_config来控制普罗米修斯将哪些标签和系列发送到远程存储。

这个示例配置文件骨架演示了这些部分在Prometheus配置中的位置:

全球:……Rule_files:……Scrape_configs:—job_name: sample_job_1 kubernetes_sd_configs:—……Relabel_configs:—source_labels:[…]……—source_labels:[…]…Metric_relabel_configs:—source_labels:[…]……—source_labels:[…]…—job_name: sample_job_2 static_configs:—targets:[…]metric_relabel_configs:—source_labels:[…]. . . . . .Remote_write:—url:……Write_relabel_configs:—source_labels:[…]…… - source_labels: [. . .] . . .

使用relabel_configs在给定的刮取作业中选择要刮取的目标。这在使用服务发现机制获取目标集时通常很有用kubernetes_sd_configs,或Kubernetes服务发现。要了解有关Prometheus服务发现特性的更多信息,请参见配置来自普罗米修斯文档。

使用metric_relabel_configs在给定的刮取作业中选择要保留的系列和标签,并执行任何标签替换操作。这发生在目标选择使用之后relabel_configs

最后,使用write_relabel_configs在一个remote_write配置以选择要发送到远程存储的系列和标签。此配置不会影响中设置的任何配置metric_relabel_configsrelabel_configs.如果你在一个metric_relabel_configs部分,它不会被普罗米修斯摄取,因此不会被运送到远程存储。

使用relabel_configs抓取目标选择

一个relabel_configs配置允许您执行以下操作保持下降服务发现机制(如Kubernetes服务发现或AWS EC2实例服务发现)返回的目标。例如,你可能有一个抓取作业,获取所有Kubernetes端点使用kubernetes_sd_configs参数。通过使用以下方法relabel_configs代码片段中,可以将此作业的抓取目标限制为服务标签对应的对象应用= nginx和端口名称网络

Scrape_configs:—job_name: kubernetes_nginx honor_timestamps: true scrape_interval: 30s scrape_timeout: 10s metrics_path: /metrics scheme: HTTP kubernetes_sd_configs:—role: endpoint namespaces: names: - default relabel_configs:—source_labels: [__meta_kubernetes_service_label_app] regex: nginx action: keep - source_labels: [__meta_kubernetes_endpoint_port_name] regex: web action: keep

获取的初始端点集kuberentes_sd_configs默认的Namespace可以非常大,这取决于您在集群中运行的应用程序。使用__meta_kubernetes_service_label_app标签筛选器,其对应的服务不具有应用= nginx标签会被这个刮胡子的工作弄掉。

kubernetes_sd_configs也将添加任何其他Pod端口作为刮擦目标(与角色:端点),我们需要使用__meta_kubernetes_endpoint_port_name重新贴标签于配置。例如,如果支持Nginx服务的Pod有两个端口,我们只抓取指定的端口网络放下另一个。

方法中的所有端点默认的命名空间,并保留为抓取目标,其对应的服务具有应用= nginx标签集。这组目标由一个或多个具有一个或多个已定义端口的pod组成。我们删除所有未命名的端口网络

在目标选择阶段使用重新标记,您可以有选择地选择您想要抓取(或删除)的目标和端点来优化您的指标使用。

使用metric_relabel_configs选择度量和标签

在这个阶段,重新标记和过滤会修改或丢弃样本,然后普罗米修斯才会在本地摄取样本并将其运送到远程存储。这种重新标记发生在目标选择之后。一旦普罗米修斯抓到了一个目标metric_relabel_configs允许你定义保持下降而且取代对刮取样品的处理:

—job_name: monitoring/kubelet/1 honor_labels: true honor_timestamps: false scrape_interval: 30s scrape_timeout: 10s metrics_path: /metrics/cadvisor scheme: HTTPS kubernetes_sd_configs:—role: endpoint namespaces: names:—kube-system bearer_token_file: /var/run/secrets/kubernetes. zipIo /serviceaccount/token tls_config: insecure_skip_verify: true relabel_configs:—source_labels: [__meta_kubernetes_service_label_k8s_app] regex: kubelet action: keep - source_labels: [__meta_kubernetes_endpoint_port_name] regex: http -metrics action: keep…Metric_relabel_configs:—source_labels: [__name__] regex: container_(network_tcp_usage_total|network_udp_usage_total|tasks_state|cpu_load_average_10s) action: drop

这个配置示例指示Prometheus首先获取一个端点列表,使用Kubernetes服务发现(kubernetes_sd_configs).端点被限制为kube-system名称空间。接下来,使用relabel_configs,只有带有服务标签的端点k8s_app = kubelet保存。此外,只有端点具有https-metrics作为定义的端口名称被保留。这个减少的目标集对应于Kubelethttps-metrics刮端点。

在抓取这些端点之后,Prometheus应用metric_relabel_configs部分,其中下降S所有指标名称与指定指标匹配的指标正则表达式.方法提取样本的度量名称__name__meta-label。在这种情况下,普罗米修斯会掉落一个度规Container_network_tcp_usage_total(…).普罗米修斯保持所有其他指标。你可以添加额外的metric_relabel_configs部分取代修改这里的标签。

metric_relabel_configs通常用于在摄入样本之前重新标记和过滤样本,并限制持久化到存储中的数据量。使用metric_relabel_configs,您可以通过丢弃不需要的样本来大幅减少普罗米修斯度量的使用。

如果将样本发送到Grafana Cloud,您还可以选择在本地持久化样本,但防止发送到远程存储。要做到这一点,请使用relabel_config对象中的write_relabel_configsremote_write普罗米修斯配置的一部分。当本地普罗米修斯存储便宜而充足时,这可能很有用,但传输到远程存储的指标集需要明智的管理,以避免额外的成本。

使用write_relabel_configs控制远程写行为

这一阶段的重新标记和过滤在普罗米修斯将样本运送到远程存储之前修改或丢弃样本。使用此功能,您可以在本地存储度量,但防止它们传输到Grafana Cloud。了解更多remote_write,请参阅remote_write来自普罗米修斯官方文件。

普罗米修斯在执行目标选择使用后应用这个重标记和删除步骤relabel_configs以及度量的选择和重新标记的使用metric_relabel_configs

下面的配置片段演示了一种“allowlisting”方法,其中指定的指标被发送到远程存储,而所有其他指标被删除。回想一下,这些指标仍然将被持久化到本地存储,除非在metric_relabel_configs一段刮擦工作。

remote_write: - url:  remote_timeout: 30s write_relabel_configs: - source_labels: [__name__] regex: "apiserver_request_total|kubelet_node_config_error|kubelet_runtime_operations_errors_total" action: keep basic_auth: username:  password:  queue_config: capacity: 500 max_shards: 1000 min_shards: 1 max_samples_per_send: 100 batch_send_deadline: 5s min_backoff: 30ms max_backoff:100毫秒

这块remote_write配置设置Prometheus将推送样本的远程端点。的write_relabel_configs部分定义了保持对象匹配的所有指标的操作apiserver_request_total | kubelet_node_config_error | kubelet_runtime_operations_errors_totalRegex,去掉其他的。你可以另外定义remote_write-具体的重标签规则。

最后,配置身份验证凭据和remote_write队列中。了解更多remote_write配置参数请参见remote_write来自普罗米修斯文档。

结论

在本指南中,我们概述了普罗米修斯的强大和灵活relabel_config特性以及如何利用它来控制和减少本地和Grafana Cloud Prometheus的使用。

一开始,选择哪些指标和样本要刮取、存储和发送到Grafana Cloud似乎相当令人生畏。可以在Mixins中找到精心策划的重要指标集。Mixins是一组预配置的仪表板和警报。驱动这些仪表板和警报的PromQL查询引用了一组核心的“重要”可观察性指标。有Kubernetes, Consul, Jaeger和更多的mixin。要了解更多有关它们的信息,请参见普罗米修斯监控Mixins.允许在Mixin的警报规则和仪表板中列出或保留一组引用的度量标准,可以为构建一组完整的可观察性度量标准提供坚实的基础。

参考文献