prometheus中如何过滤不需要的指标
在prometheus的采集中会发现一个job中可能包含几十上百个指标,而每个指标的下的数据量也很大。在生产环境中我们实际上用的到指标可能只有几十个,而哪些被prometheus采集过来我们又没有用到的指标就成了浪费部署资源的元凶。
这个时候我们就要考虑对prometheus采集的job中指标进行过滤。
如何查询指标下数据量的情况
1 2 3 4 5
   |  topk(50, count by (__name__, job)({__name__=~".+"}))
 
  sum(count by (__name__, job)({__name__=~".+"}))
 
  | 
 
过滤prometheus 采集Job上的指标
下面以cadvice采集job为例子,目前采用的是metric_relabel_configs下的drop操作,丢弃不需要的指标(感觉不是特别方便)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
   | - job_name: kubernetes-cadvisor   kubernetes_sd_configs:   - role: node   scheme: https   tls_config:     ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt   bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token   relabel_configs:   - action: labelmap     regex: __meta_kubernetes_node_label_(.+)   - target_label: __address__     replacement: kubernetes.default.svc:443   - source_labels: [__meta_kubernetes_node_name]     regex: (.+)     target_label: __metrics_path__     replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor   metric_relabel_configs:     - action: replace       source_labels: [id]       regex: '^/machine\.slice/machine-rkt\\x2d([^\\]+)\\.+/([^/]+)\.service$'       target_label: rkt_container_name       replacement: '${2}-${1}'     - action: replace       source_labels: [id]       regex: '^/system\.slice/(.+)\.service$'       target_label: systemd_service_name       replacement: '${1}'          - action: drop       source_labels: [__name__]       regex: 'container_network_tcp_usage_total'     - action: drop       source_labels: [__name__]       regex: 'container_tasks_state'     - action: drop       source_labels: [__name__]       regex: 'container_network_udp_usage_total'     - action: drop       source_labels: [__name__]       regex: 'container_memory_failures_total'
   | 
 
过滤prometheus-opretor中Servicemonit配置的job指标
当采用prometheus-opretor部署监控环境时,会发现很多监控job都是使用Servicemonit来定义的,Servicemonit内部同样可以配置drop来丢弃指标
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
   | serviceMonitors:   - name: foundation-prometheus   namespaceSelector:     matchNames:     - monitoring   selector:     matchLabels:       cluster: foundation   endpoints:   - port: foundation-port     honorLabels: true     path: /federate     params:       'match[]':        - '{__name__=~".+"}'          metricRelabelings:       - action: drop         source_labels: [__name__]         regex: 'container_memory_failures_total'
   | 
 
在各个采集export中配置不需要的指标
最好的处理的方式就是在prometheus采集指标之前就对各个export提供的指标进行控制,只给prometheus提供我们需要监控的指标。下面以node-export为例,在node-export官方就对应用有说明可以使用–no-collector. flag来控制不需要采集的模块
node-export