标签的作用:
- 可以基于已有的标签,生成一个标签
- 也可以创建新的标签
- 还可以过滤标签,不想采集哪些
- 哪些标签不要了也可以将其删除
保留或丢弃对象、哪些对象需要抓取
Relabeling 另一个常见的用例就是过滤有标签的对象,keep
或 drop
这两个动作可以来完成,使用这两个操作,可以帮助我们完成如下的一些操作:
- 来自服务发现的哪些目标应该被抓取
- 从目标中抓取哪些指定的序列样本,或将其发送到远程存储
- 哪些报警要发送到 Alertmanager
一个 keep
动作的配置规则如下所示:
action: keep
source_labels: [<source label name list>]
separator: <source labels separator> # 默认为 ';'
regex: <regular expression> # 默认为 '(.*)' (匹配任何值)
keep
操作同样按顺序执行如下步骤:
- 使用 separator 分隔符将 source_labels 中列出的标签值连接起来,多个label用分隔符分开
- 测试 regex 中的正则表达式是否与上一步的连接字符串匹配
- 如果不匹配,该对象将从最终输出列表中删除,如果匹配,则保留该对象
drop
动作和 keep
类似,只是它是删除一个对象而不是保留。同样接下来看一看 keep
和 drop
的示例。
只抓取具有注解的目标
在服务发现的时候,我们可能只想抓取那些具有特定元数据标签的目标,例如,下面的配置让我们只抓取 Kubernetes 中具有 example.io/should_be_scraped=true
这个 annotation 的目标。
- action: keep
source_labels:
[_meta_kubernetes_service_annotation_example_io_should_be_scraped]
regex: true
kind: Service
apiVersion: v1
metadata:name: redisnamespace: monitorannotations:prometheus.io/scrape: "true"prometheus.io/port: "9121"--------------------------------------------------------------------------------- job_name: 'kubernetes-service-endpoints'kubernetes_sd_configs:- role: endpointsrelabel_configs:- source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape]action: keepregex: true
relabel_configs:- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]action: keepregex: default;kubernetes;https
Kubernetes 服务发现机制下面会将 labels 标签与 annotation 作为元信息输出到 Prometheus,这些元信息都包含 __meta_
前缀,这里我们的配置就是保留具有 example.io/should_be_scraped
这个 annotation 标签,且值为 true
的目标。
只存储特定的指标
当使用 metric_relabel_configs(抓取数据之后的,也就是说要存储了,只会去存储这样的指标,relabel_configs是抓取之前)
来控制目标的抓取方式时,我们可以使用下面的规则来只存储指标名称以 api_
或 http_
开头的指标。
action: keep
source_labels: [__name__]
regex: "(api_|http_).*"
只抓取特定目标的Service
Keep只有匹配的才会去采集数据,不匹配的就不采集。下面意思就是pod当中有些注解中声明了prometheus_io_scrape这个字段,那么就会把你纳入监控,如果没有声明就不会纳入监控。也就是k8s当中部署了这么多pod,谁要监控,谁不要被监控,在部署service可以指定是否需要采集,如果需要采集需要在注解当中声明prometheus_io_scrape: true
在service 和pod里面声明配置注解,那么就会采集注解里面含有这个值的
annotations:
prometheus.io/scrape: 'true'# Service没配置注解prometheus.io/scrape的不采集
- action: keep
regex: true
source_labels:
- __meta_kubernetes_service_annotation_prometheus_io_scrape