Prometheus的标签管理
作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。
目录
一.标签概述
1.什么是标签

标签用于对数据分组和分类,利用标签可以将数据进行过滤筛选。
标签管理的常见场景:
- 1.删除不必要的指标;
- 2.从指标中删除敏感或不需要的标签;
- 3.添加,编辑或修改指标的标签值或标签格式;
标签的分类:
- 默认标签:
Prometheus自身内置的标签,格式为"__LABLE__"。
如上图所示,典型点如下所示:
- "__metrics_path__"
- "__address__"
- "__scheme__"
- "__scrape_interval__"
- "__scrape_timeout__"
- "instance"
- "job"
- 应用标签:
应用本身内置,尤其是监控特定的服务,会有对应的应用标签,格式一般为"__LABLE"
如下图所示,以consul服务为例,典型点如下所示:
- "__meta_consul_address"
- "__meta_consul_dc"
- ...
- 自定义标签:
指的是用户自定义的标签,我们在定义targets可以自定义。

2.标签主要有两种表现形式
- 私有标签:
以"__*"样式存在,用于获取监控目标的默认元数据属性,比如"__scheme__","__address__","__metrics_path__"等。
- 普通标签:
对监控指标进行各种灵活管理操作,常见的操作有删除不必要敏感数据,添加,编辑或修改指标标签纸或者标签格式等。
3.Prometheus对数据处理的流程
- 1.服务发现: 支持静态发现和动态发现,主要是找打到对应的target。
- 2.配置: 加载"__scheme__","__address__","__metrics_path__"等信息。
- 3.重新标记: relabel_configs,主要针对要监控的target的标签。
- 4.抓取: 开始抓取数据。
- 5.重新标记: metric_relabel_configs,主要针对已经抓取回来的metrics的标签的操作。
二.relabel_configs修改target标签案例
1.为targets自定义打标签案例

如上图所示,我们成为target自定义了标签。
测试代码如下:
[root@prometheus-server31 ~]# tail -6 /yinzhengjie/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml
- job_name: "yinzhengjie-node-exporter"
static_configs:
- targets: ["10.0.0.31:9100","10.0.0.41:9100","10.0.0.42:9100","10.0.0.43:9100"]
labels:
auther: yinzhengjie
blog: https://www.cnblogs.com/yinzhengjie
[root@prometheus-server31 ~]#
2.使用target_label新增标签

1.编写代码
[root@prometheus-server31 ~]# tail -7 /yinzhengjie/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml
- job_name: "yinzhengjie-node-exporter"
static_configs:
- targets: ["10.0.0.31:9100","10.0.0.41:9100","10.0.0.42:9100","10.0.0.43:9100"]
relabel_configs:
- source_labels:
- job
target_label: jasonyin2020_jobs
[root@prometheus-server31 ~]#
2.验证效果
测试结果如上图所示。
2.relabel_configs替换标签replace案例

1.编写代码
[root@prometheus-server31 ~]# tail -29 /yinzhengjie/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml
- job_name: "yinzhengjie-node-exporter"
static_configs:
- targets: ["10.0.0.31:9100","10.0.0.41:9100","10.0.0.42:9100","10.0.0.43:9100"]
labels:
auther: yinzhengjie
blog: https://www.cnblogs.com/yinzhengjie
relabel_configs:
# 指定正则表达式匹配成功的label进行标签管理的列表
- source_labels:
- __scheme__
- __address__
- __metrics_path__
# 表示source_labels对应Label的名称或值进行匹配此处指定的正则表达式。
# 此处我们对数据进行了分组,后面replacement会是哟合格"${1}"和"$2"进行引用。
regex: "(http|https)(.*)"
# 指定用于连接多个source_labels为一个字符串的分隔符,若不指定,默认为分号";"。
# 假设源数据如下:
# __address__="10.0.0.31:9100"
# __metrics_path__="/metrics"
# __scheme__="http"
# 拼接后操作的结果为: "http10.0.0.31:9100/metrics"
separator: ""
# 在进行Label替换的时候,可以将原来的source_labels替换为指定修改后的label。
# 将来会新加一个标签,标签的名称为"yinzhengjie_prometheus_ep",值为replacement的数据。
target_label: "yinzhengjie_prometheus_ep"
# 替换标签时,将target_label对应的值进行修改成此处的值
replacement: "${1}://${2}"
# 对Label或指标进行管理,场景的动作有replace|keep|drop|lablemap|labeldrop等,默认为replace。
action: replace
[root@prometheus-server31 ~]#
2.验证效果
测试结果如上图所示。
3.relabel_configs新增标签映射labelmap案例

1.编写代码
[root@prometheus-server31 ~]# tail -9 /yinzhengjie/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml
- job_name: "yinzhengjie-node-exporter"
static_configs:
- targets: ["10.0.0.31:9100","10.0.0.41:9100","10.0.0.42:9100","10.0.0.43:9100"]
relabel_configs:
- regex: "(job|app)"
replacement: "${1}_yinzhengjie_labelmap_kubernetes"
# labelmap一般用于生成新的标签,通常用于驱逐匹配标签名的一部分生成新表现,旧的标签依旧会存在。
# 将regex对source label中指定的标签名称进行匹配,而后将匹配到的标签的赋值给replacement字段指定的标签。
action: labelmap
[root@prometheus-server31 ~]#
2.验证效果
测试结果如上图所示。
4.relabel_configs删除标签labeldrop案例

1.编写代码
[root@prometheus-server31 ~]# tail /yinzhengjie/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml
- job_name: "yinzhengjie-node-exporter"
static_configs:
- targets: ["10.0.0.31:9100","10.0.0.41:9100","10.0.0.42:9100","10.0.0.43:9100"]
relabel_configs:
- regex: "(job|app)"
replacement: "${1}_yinzhengjie_labelmap_kubernetes"
action: labelmap
- regex: "(job|app)"
# 删除regex匹配到的标签
action: labeldrop
[root@prometheus-server31 ~]#
2.验证效果
测试结果如上图所示。
三.metric_relabel_configs修改metric标签案例
1.metric_relabel_configs删除指标

1.编写代码
[root@prometheus-server31 ~]# tail -8 /yinzhengjie/softwares/prometheus-2.53.2.linux-amd64/prometheus.yml
- job_name: "yinzhengjie-node-exporter"
static_configs:
- targets: ["10.0.0.31:9100","10.0.0.41:9100","10.0.0.42:9100","10.0.0.43:9100"]
metric_relabel_configs:
- source_labels:
- __name__
regex: "node_cpu_.*"
action: drop
[root@prometheus-server31 ~]#
[root@prometheus-server31 ~]# for i in 31 41 42 43; do curl -s 10.0.0.$i:9100/metrics | grep ^node_cpu | wc -l;done
20
20
20
20
[root@prometheus-server31 ~]#
2.验证效果
测试结果如上图所示。
温馨提示:
如果你已经做过relabel_configs相关实验,建议将Prometheus的数据目录删除清空后测试效果更佳哟~
2.黑盒监控示例
推荐阅读:
https://www.cnblogs.com/yinzhengjie/p/18540807
3.K8S示例
参考链接:
https://github.com/prometheus/prometheus/blob/release-2.53/documentation/examples/prometheus-kubernetes.yml
https://prometheus.io/docs/prometheus/2.53/configuration/configuration/#kubernetes_sd_config
源代码如下:
[root@prometheus-server31 ~]# egrep -v "^.*#|^$" /tmp/prometheus-kubernetes.yml
global:
keep_dropped_targets: 100
scrape_configs:
- job_name: "kubernetes-apiservers"
kubernetes_sd_configs:
- role: endpoints
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
authorization:
credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
relabel_configs:
- source_labels:
[
__meta_kubernetes_namespace,
__meta_kubernetes_service_name,
__meta_kubernetes_endpoint_port_name,
]
action: keep
regex: default;kubernetes;https
- job_name: "kubernetes-nodes"
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
authorization:
credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
kubernetes_sd_configs:
- role: node
relabel_configs:
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
- job_name: "kubernetes-cadvisor"
scheme: https
metrics_path: /metrics/cadvisor
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
authorization:
credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
kubernetes_sd_configs:
- role: node
relabel_configs:
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
- job_name: "kubernetes-service-endpoints"
kubernetes_sd_configs:
- role: endpoints
relabel_configs:
- action: labelmap
regex: __meta_kubernetes_service_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: namespace
- source_labels: [__meta_kubernetes_service_name]
action: replace
target_label: service
- job_name: "kubernetes-services"
metrics_path: /probe
params:
module: [http_2xx]
kubernetes_sd_configs:
- role: service
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- target_label: __address__
replacement: blackbox-exporter.example.com:9115
- source_labels: [__param_target]
target_label: instance
- action: labelmap
regex: __meta_kubernetes_service_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
target_label: namespace
- source_labels: [__meta_kubernetes_service_name]
target_label: service
- job_name: "kubernetes-ingresses"
metrics_path: /probe
params:
module: [http_2xx]
kubernetes_sd_configs:
- role: ingress
relabel_configs:
- source_labels:
[
__meta_kubernetes_ingress_scheme,
__address__,
__meta_kubernetes_ingress_path,
]
regex: (.+);(.+);(.+)
replacement: ${1}://${2}${3}
target_label: __param_target
- target_label: __address__
replacement: blackbox-exporter.example.com:9115
- source_labels: [__param_target]
target_label: instance
- action: labelmap
regex: __meta_kubernetes_ingress_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
target_label: namespace
- source_labels: [__meta_kubernetes_ingress_name]
target_label: ingress
- job_name: "kubernetes-pods"
kubernetes_sd_configs:
- role: pod
relabel_configs:
- action: labelmap
regex: __meta_kubernetes_pod_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: namespace
- source_labels: [__meta_kubernetes_pod_name]
action: replace
target_label: pod
[root@prometheus-server31 ~]#
本文来自博客园,作者:尹正杰,转载请注明原文链接:https://www.cnblogs.com/yinzhengjie/p/18800224,个人微信: "JasonYin2020"(添加时请备注来源及意图备注,有偿付费)
当你的才华还撑不起你的野心的时候,你就应该静下心来学习。当你的能力还驾驭不了你的目标的时候,你就应该沉下心来历练。问问自己,想要怎样的人生。

浙公网安备 33010602011771号