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